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

Revision 7143, 4.9 KB checked in by sieerinn, 7 years ago (diff)

Vaihto binääristä tekstimuotoiseen protokollaan.

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", 3074);
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        if (!muutPelaajat.ContainsKey(id))
72        {
73            muutPelaajat.Add(id, LuoPelaaja());
74        }
75        Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti);
76        muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
77    }
78
79    void LuoKentta()
80    {
81        TileMap kentta = TileMap.FromLevelAsset("kentta1");
82        kentta.SetTileMethod('#', LisaaTaso);
83        kentta.SetTileMethod('*', LisaaTahti);
84        kentta.SetTileMethod('N', LisaaPelaaja);
85        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
86        Level.CreateBorders();
87        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
88    }
89
90    void LisaaTaso(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        taso.Position = paikka;
94        taso.Color = Color.Green;
95        Add(taso);
96    }
97
98    void LisaaTahti(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
101        tahti.IgnoresCollisionResponse = true;
102        tahti.Position = paikka;
103        tahti.Image = tahtiKuva;
104        tahti.Tag = "tahti";
105        Add(tahti);
106    }
107
108    PlatformCharacter LuoPelaaja()
109    {
110        PlatformCharacter pelaaja = new PlatformCharacter(RUUDUN_KOKO, RUUDUN_KOKO);
111        pelaaja.Mass = 4.0;
112        pelaaja.Image = pelaajanKuva;
113        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
114        Add(pelaaja);
115        return pelaaja;
116    }
117
118    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
119    {
120        pelaaja1 = LuoPelaaja();
121        pelaaja1.Position = paikka;
122    }
123
124    void LisaaNappaimet()
125    {
126        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
127        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
128
129        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
130        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
131        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
132
133        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
134
135        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
136        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
137        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
138
139        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
140    }
141
142    void Liikuta(PlatformCharacter hahmo, double nopeus)
143    {
144        hahmo.Walk(nopeus);
145
146        Paketti paketti = new Paketti();
147        paketti.X = hahmo.X;
148        paketti.Y = hahmo.Y;
149        yhteys.SendObject(paketti);
150    }
151
152    void Hyppaa(PlatformCharacter hahmo, double nopeus)
153    {
154        hahmo.Jump(nopeus);
155    }
156
157    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
158    {
159        maaliAani.Play();
160        MessageDisplay.Add("Keräsit tähden!");
161        tahti.Destroy();
162    }
163}
Note: See TracBrowser for help on using the repository browser.