source: 2015/koodauskerho/sieerinn/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli.cs @ 7142

Revision 7141, 4.8 KB checked in by sieerinn, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9[Serializable]
10class Paketti
11{
12    public double X;
13    public double Y;
14}
15
16public class TasohyppelyNettipeli : PhysicsGame
17{
18    const double nopeus = 200;
19    const double hyppyNopeus = 750;
20    const int RUUDUN_KOKO = 40;
21
22    PlatformCharacter pelaaja1;
23
24    Image pelaajanKuva = LoadImage("norsu");
25    Image tahtiKuva = LoadImage("tahti");
26
27    SoundEffect maaliAani = LoadSoundEffect("maali");
28
29    NetworkConnection yhteys;
30
31    Dictionary<Guid, PhysicsObject> muutPelaajat = new Dictionary<Guid, PhysicsObject>();
32
33    public override void Begin()
34    {
35        Window.Width = 600;
36        Window.Height = 400;
37        IsMouseVisible = true;
38
39        yhteys = new NetworkConnection("tasoloikka");
40        yhteys.OnMessageReceive += UusiViesti;
41        yhteys.OnConnect += UusiPelaaja;
42        yhteys.OnDisconnect += PoistaPelaaja;
43        yhteys.Connect("192.168.0.100", 8888);
44        Exiting += yhteys.Close;
45
46        Gravity = new Vector(0, -1000);
47
48        LuoKentta();
49        LisaaNappaimet();
50
51        Camera.Follow(pelaaja1);
52        Camera.ZoomFactor = 1.2;
53        Camera.StayInLevel = true;
54    }
55
56    void UusiPelaaja(Guid id)
57    {
58        MessageDisplay.Add("Uusi pelaaja yhdisti peliin.");
59        muutPelaajat.Add(id, LuoPelaaja());
60    }
61
62    void PoistaPelaaja(Guid id)
63    {
64        MessageDisplay.Add("Pelaaja poistui pelistä.");
65        muutPelaajat[id].Destroy();
66        muutPelaajat.Remove(id);
67    }
68
69    void UusiViesti(Guid id, string viesti)
70    {
71        Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti);
72        muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
73    }
74
75    void LuoKentta()
76    {
77        TileMap kentta = TileMap.FromLevelAsset("kentta1");
78        kentta.SetTileMethod('#', LisaaTaso);
79        kentta.SetTileMethod('*', LisaaTahti);
80        kentta.SetTileMethod('N', LisaaPelaaja);
81        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
82        Level.CreateBorders();
83        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
84    }
85
86    void LisaaTaso(Vector paikka, double leveys, double korkeus)
87    {
88        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
89        taso.Position = paikka;
90        taso.Color = Color.Green;
91        Add(taso);
92    }
93
94    void LisaaTahti(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
97        tahti.IgnoresCollisionResponse = true;
98        tahti.Position = paikka;
99        tahti.Image = tahtiKuva;
100        tahti.Tag = "tahti";
101        Add(tahti);
102    }
103
104    PlatformCharacter LuoPelaaja()
105    {
106        PlatformCharacter pelaaja = new PlatformCharacter(RUUDUN_KOKO, RUUDUN_KOKO);
107        pelaaja.Mass = 4.0;
108        pelaaja.Image = pelaajanKuva;
109        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
110        Add(pelaaja);
111        return pelaaja;
112    }
113
114    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
115    {
116        pelaaja1 = LuoPelaaja();
117        pelaaja1.Position = paikka;
118    }
119
120    void LisaaNappaimet()
121    {
122        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
123        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
124
125        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
126        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
127        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
128
129        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
130
131        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
132        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
133        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
134
135        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
136    }
137
138    void Liikuta(PlatformCharacter hahmo, double nopeus)
139    {
140        hahmo.Walk(nopeus);
141
142        Paketti paketti = new Paketti();
143        paketti.X = hahmo.X;
144        paketti.Y = hahmo.Y;
145        yhteys.SendObject(paketti);
146    }
147
148    void Hyppaa(PlatformCharacter hahmo, double nopeus)
149    {
150        hahmo.Jump(nopeus);
151    }
152
153    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
154    {
155        maaliAani.Play();
156        MessageDisplay.Add("Keräsit tähden!");
157        tahti.Destroy();
158    }
159}
Note: See TracBrowser for help on using the repository browser.