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

Revision 7144, 5.1 KB checked in by otjojunt, 5 years ago (diff)

Käyttäjälle järkevän oloinen ilmoitus jos yhdistäminen ei onnistu.

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        if(!yhteys.Connect("192.168.0.100", 3074))
44        {
45            MessageWindow mw = new MessageWindow("Yhdistäminen epäonnistui");
46            mw.Closed += delegate { Exit(); };
47            Add(mw);
48            return;
49        }
50        Exiting += yhteys.Close;
51
52        Gravity = new Vector(0, -1000);
53
54        LuoKentta();
55        LisaaNappaimet();
56
57        Camera.Follow(pelaaja1);
58        Camera.ZoomFactor = 1.2;
59        Camera.StayInLevel = true;
60    }
61
62    void UusiPelaaja(Guid id)
63    {
64        MessageDisplay.Add("Uusi pelaaja yhdisti peliin.");
65        muutPelaajat.Add(id, LuoPelaaja());
66    }
67
68    void PoistaPelaaja(Guid id)
69    {
70        MessageDisplay.Add("Pelaaja poistui pelistä.");
71        muutPelaajat[id].Destroy();
72        muutPelaajat.Remove(id);
73    }
74
75    void UusiViesti(Guid id, string viesti)
76    {
77        if (!muutPelaajat.ContainsKey(id))
78        {
79            muutPelaajat.Add(id, LuoPelaaja());
80        }
81        Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti);
82        muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
83    }
84
85    void LuoKentta()
86    {
87        TileMap kentta = TileMap.FromLevelAsset("kentta1");
88        kentta.SetTileMethod('#', LisaaTaso);
89        kentta.SetTileMethod('*', LisaaTahti);
90        kentta.SetTileMethod('N', LisaaPelaaja);
91        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
92        Level.CreateBorders();
93        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
94    }
95
96    void LisaaTaso(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
99        taso.Position = paikka;
100        taso.Color = Color.Green;
101        Add(taso);
102    }
103
104    void LisaaTahti(Vector paikka, double leveys, double korkeus)
105    {
106        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
107        tahti.IgnoresCollisionResponse = true;
108        tahti.Position = paikka;
109        tahti.Image = tahtiKuva;
110        tahti.Tag = "tahti";
111        Add(tahti);
112    }
113
114    PlatformCharacter LuoPelaaja()
115    {
116        PlatformCharacter pelaaja = new PlatformCharacter(RUUDUN_KOKO, RUUDUN_KOKO);
117        pelaaja.Mass = 4.0;
118        pelaaja.Image = pelaajanKuva;
119        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
120        Add(pelaaja);
121        return pelaaja;
122    }
123
124    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
125    {
126        pelaaja1 = LuoPelaaja();
127        pelaaja1.Position = paikka;
128    }
129
130    void LisaaNappaimet()
131    {
132        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
133        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
134
135        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
136        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
137        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
138
139        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
140
141        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
142        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
143        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
144
145        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
146    }
147
148    void Liikuta(PlatformCharacter hahmo, double nopeus)
149    {
150        hahmo.Walk(nopeus);
151
152        Paketti paketti = new Paketti();
153        paketti.X = hahmo.X;
154        paketti.Y = hahmo.Y;
155        yhteys.SendObject(paketti);
156    }
157
158    void Hyppaa(PlatformCharacter hahmo, double nopeus)
159    {
160        hahmo.Jump(nopeus);
161    }
162
163    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
164    {
165        maaliAani.Play();
166        MessageDisplay.Add("Keräsit tähden!");
167        tahti.Destroy();
168    }
169}
Note: See TracBrowser for help on using the repository browser.