source: 2015/24/EemeliK/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama.cs @ 7302

Revision 7302, 17.8 KB checked in by taeekotr, 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    public double VX;
15    public double VY;
16    public double nopeus;
17}
18
19[Serializable]
20class AmmusPaketti
21{
22    public double X;
23    public double Y;
24    public double VX;
25    public double VY;
26}
27
28[Serializable]
29class KuoliPaketti
30{
31}
32
33
34class Pelaaja : PlatformCharacter
35{
36    public double nopeus;
37
38
39    public Pelaaja(double leveys, double korkeus)
40        : base(leveys, korkeus)
41    {
42    }
43}
44
45public class Nettipelijuttupelihymynaama : PhysicsGame
46{
47    NetworkConnection yhteys;
48    GameObject cursor;
49    GameObject asecursor;
50    GameObject E;
51    PhysicsObject KauppaanMeno;
52    Timer KauppaAjastin;
53
54    const double nopeus = 100;
55    const double hyppyNopeus = 1450;
56    const int RUUDUN_KOKO = 40;
57
58    double hahmonopeus = 0;
59
60    Pelaaja pelaaja;
61    bool onAse = false;
62    bool onKauppaE = false;
63
64    Image pelaajanKuva = LoadImage("Idle");
65    Image Aajii = LoadImage("Aajii");
66    Image viisidollaria = LoadImage("5Dollars");
67    Image aseKursorinKuva = LoadImage("cursori");
68    Image kursorinKuva = LoadImage("Windows_Cursor");
69    Image alkuTausta = LoadImage("Tausta1");
70    Image Ekuva = LoadImage("e");
71    Image kauppaTausta = LoadImage("Kauppe");
72
73    SoundEffect maaliAani = LoadSoundEffect("maali");
74    Dictionary<Guid, Pelaaja> muutPelaajat = new Dictionary<Guid, Pelaaja>();
75
76    List<Guid> kuolleet = new List<Guid>();
77
78    Vector ruudunKoko = new Vector(1920, 1037);
79
80    DoubleMeter elamaLaskuri;
81    private Animation ukkelinKavely;
82
83    public override void Begin()
84    {
85        LuoKentta("kentta1");
86        LisaaNappaimet();
87        LuoKursori();
88        LuoTausta();
89
90        KauppaAjastin = new Timer();
91        KauppaAjastin.Interval = 0.1;
92        KauppaAjastin.Timeout += KauppaEPois;
93        KauppaAjastin.Start();
94
95        yhteys = new NetworkConnection("Tasoloikka22");
96        yhteys.OnMessageReceive += UusiViesti;
97        yhteys.OnConnect += UusiPelaaja;
98        yhteys.OnDisconnect += PoistaPelaaja;
99        if (!yhteys.Connect("130.234.162.86", 3074))
100        {
101            MessageWindow mw = new MessageWindow("Yhdistäminen epäonnistui");
102            mw.Closed += delegate { Exit(); };
103            Add(mw);
104            return;
105        }
106        Exiting += yhteys.Close;
107
108        Timer pakettiajastin = new Timer();
109        pakettiajastin.Interval = 0.05;
110        pakettiajastin.Timeout += PaivitaPaketti;
111        pakettiajastin.Start();
112
113        Window.Width = 800;
114        Window.Height = 600;
115
116        //IsFullSlcreen = true;
117        IsMouseVisible = false;
118
119        LuoElamaLaskuri();
120
121        Camera.Follow(pelaaja);
122        Camera.ZoomFactor = 1.2;
123        Camera.StayInLevel = true;
124
125    }
126
127    protected override void Update(Time time)
128    {
129        foreach (var pari in muutPelaajat)
130        {
131            if (pari.Value.nopeus != 0.0)
132                pari.Value.Walk(pari.Value.nopeus);
133        }
134        base.Update(time);
135    }
136 /*   void LuoKauppa()
137    {
138
139        TileMap kauppa = TileMap.FromLevelAsset("kauppa");
140        kauppa.SetTileMethod('#', LisaaTaso);
141        kauppa.SetTileMethod('K', LisaaKauppaanMeno);
142        kauppa.SetTileMethod('*', LisaaViisiDollaria);
143        kauppa.SetTileMethod('N', LisaaPelaaja);
144        kauppa.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
145        Level.CreateBorders();
146        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
147    }*/
148
149    void LuoAseKursori()
150    {
151        cursor.Destroy();
152
153        asecursor = new GameObject(15, 15);
154        asecursor.Image = aseKursorinKuva;
155        Mouse.ListenMovement(0.1, KuunteleAseLiiketta, null);
156        Add(asecursor);
157    }
158    void LuoTausta()
159    {
160        GameObject alkutausta = new GameObject(ruudunKoko.X, ruudunKoko.Y/2); //Screen.Width, Screen.Height/2
161        alkutausta.Image = alkuTausta;
162        Add(alkutausta, -3);
163        Layers[-3].RelativeTransition = new Vector(0.5, 0.0);
164    }
165    void KuunteleAseLiiketta(AnalogState hiirenTila)
166    {
167        asecursor.X = Mouse.PositionOnWorld.X;
168        asecursor.Y = Mouse.PositionOnWorld.Y;
169
170        Vector hiirenLiike = hiirenTila.MouseMovement;
171    }
172    void LuoKursori()
173    {
174        if (onAse != true)
175        {
176            cursor = new GameObject(10, 15);
177            cursor.Image = kursorinKuva;
178            Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
179            Add(cursor);
180        }
181        else
182        {
183            LuoAseKursori();
184        }
185    }
186    void KuunteleLiiketta(AnalogState hiirenTila)
187    {
188        cursor.X = Mouse.PositionOnWorld.X;
189        cursor.Y = Mouse.PositionOnWorld.Y;
190
191        Vector hiirenLiike = hiirenTila.MouseMovement;
192    }
193    void LuoElamaLaskuri()
194    {
195        elamaLaskuri = new DoubleMeter(10);
196        elamaLaskuri.MaxValue = 10;
197        elamaLaskuri.LowerLimit += ElamaLoppui;
198
199        ProgressBar elamaPalkki = new ProgressBar(150, 20);
200        elamaPalkki.X = -Window.Width / 2 + 150;
201        elamaPalkki.Y = Window.Height / 2 - 20;
202        elamaPalkki.BarColor = Color.Red;
203        elamaPalkki.BindTo(elamaLaskuri);
204        Add(elamaPalkki);
205    }
206    void ElamaLoppui()
207    {
208        pelaaja.Destroy();
209
210        yhteys.SendObject(new KuoliPaketti());
211    }
212
213    void UusiViesti(Guid id, string viesti)
214    {
215        if (kuolleet.Contains(id))
216        {
217            return;
218        }
219
220        if (!muutPelaajat.ContainsKey(id))
221        {
222            muutPelaajat.Add(id, LuoPelaaja());
223        }
224
225        try
226        {
227            Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti);
228            muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
229            muutPelaajat[id].Velocity = new Vector(paketti.VX, paketti.VY);
230
231            muutPelaajat[id].nopeus = paketti.nopeus;
232            return;
233        }
234        catch (Exception)
235        {
236
237        }
238
239        try
240        {
241            AmmusPaketti paketti = yhteys.DeserializeFromString<AmmusPaketti>(viesti);
242            LuoAmmus(new Vector(paketti.X, paketti.Y), new Vector(paketti.VX, paketti.VY));
243            return;
244        }
245        catch (Exception)
246        {
247
248        }
249
250        try
251        {
252            KuoliPaketti paketti = yhteys.DeserializeFromString<KuoliPaketti>(viesti);
253            muutPelaajat[id].Destroy();
254            muutPelaajat.Remove(id);
255            kuolleet.Add(id);
256            return;
257        }
258        catch (Exception)
259        {
260
261        }
262
263        if (viesti.Length > 0)
264        {
265            MessageDisplay.Add(viesti);
266            TulkitseKomento(id, viesti);
267        }
268    }
269    void UusiPelaaja(Guid id)
270    {
271        MessageDisplay.Add("Uusi pelaaja yhdisti peliin.");
272        muutPelaajat.Add(id, LuoPelaaja());
273    }
274
275    void PoistaPelaaja(Guid id)
276    {
277        if (muutPelaajat.ContainsKey(id))
278        {
279            MessageDisplay.Add("Pelaaja poistui pelistä.");
280            muutPelaajat[id].Destroy();
281            muutPelaajat.Remove(id);
282        }
283    }
284    void LuoKentta(String nimi)
285    {
286        TileMap kentta = TileMap.FromLevelAsset(nimi);
287        kentta.SetTileMethod('#', LisaaTaso);
288        kentta.SetTileMethod('K', LisaaKauppaanMeno);
289        kentta.SetTileMethod('*', LisaaViisiDollaria);
290        kentta.SetTileMethod('N', LisaaPelaaja);
291        //kentta.SetTileMethod('N', Pelasta);
292        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
293        Level.CreateBorders();
294        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
295        Gravity = new Vector(0, -1000);
296    }
297
298    void Pelasta(Vector paikka, double leveys, double korkeus)
299    {
300       
301        Add(pelaaja);
302        pelaaja.Position = paikka;
303    }
304
305    void LisaaKauppaanMeno(Vector paikka, double leveys, double korkeus)
306    {
307        KauppaanMeno = PhysicsObject.CreateStaticObject(leveys, korkeus);
308        KauppaanMeno.Position = paikka;
309        KauppaanMeno.Color = Color.Black;
310        KauppaanMeno.Tag = "Kauppaanmeno";
311        Add(KauppaanMeno);
312
313        E = new GameObject(20, 20);
314        E.Image = Ekuva;
315        E.X = KauppaanMeno.X;
316        E.Y = KauppaanMeno.Y + 150;
317        Add(E);
318    }
319
320    void KauppaEPois()
321    {
322        if (Vector.Distance(pelaaja.Position, KauppaanMeno.Position) < 100)
323        {
324            onKauppaE = true;
325            E.IsVisible = true;
326        }
327        else
328        {
329            onKauppaE = false;
330            E.IsVisible = false;
331        }
332    }
333    void LisaaTaso(Vector paikka, double leveys, double korkeus)
334    {
335        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
336        taso.Position = paikka;
337        taso.Color = Color.Green;
338        taso.Tag = "taso";
339        Add(taso);
340    }
341
342    void LisaaViisiDollaria(Vector paikka, double leveys, double korkeus)
343    {
344        PhysicsObject fivedollars = PhysicsObject.CreateStaticObject(60, 30);
345        fivedollars.IgnoresCollisionResponse = true;
346        fivedollars.Position = paikka;
347        fivedollars.Image = viisidollaria;
348        fivedollars.Tag = "5dollars";
349        Add(fivedollars);
350    }
351
352    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
353    {
354        pelaaja = LuoPelaaja();
355        pelaaja.Position = paikka;
356    }
357    Pelaaja LuoPelaaja()
358    {
359        ukkelinKavely = LoadAnimation("ukkeli");
360
361        Pelaaja pelaaja = new Pelaaja(275, 225);
362        pelaaja.Mass = 4.0;
363        pelaaja.Tag = "pelaaja";
364        pelaaja.Image = pelaajanKuva;
365        AddCollisionHandler(pelaaja, "5dollars", TormaaDollareihin);
366        //pelaaja.Animation = new Animation(ukkelinKavely);
367        pelaaja.AnimWalk = new Animation(ukkelinKavely);
368        pelaaja.AnimIdle = new Animation(pelaajanKuva);
369        Add(pelaaja);
370
371        return pelaaja;
372    }
373
374    void LisaaNappaimet()
375    {
376        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
377        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
378
379        //Keyboard.Listen(Key.Left, ButtonState.Pressed, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeus);
380        //Keyboard.Listen(Key.Right, ButtonState.Pressed, Liikuta, "Liikkuu vasemmalle", pelaaja, nopeus);
381
382        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta3, "Liikkuu vasemmalle", pelaaja, -nopeus);
383        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta3, "Liikkuu vasemmalle", pelaaja, nopeus);
384
385        //Keyboard.Listen(Key.Left, ButtonState.Pressed, Liikuta2, "Liikkuu vasemmalle", pelaaja, -nopeus);
386        //Keyboard.Listen(Key.Right, ButtonState.Pressed, Liikuta2, "Liikkuu vasemmalle", pelaaja, nopeus);
387
388        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta3, "Liikkuu vasemmalle", pelaaja, 0.0);
389        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta3, "Liikkuu vasemmalle", pelaaja, 0.0);
390
391        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
392
393        Keyboard.Listen(Key.E, ButtonState.Pressed, ENapit, "Rakennuksiin meno");
394
395        Keyboard.Listen(Key.T, ButtonState.Pressed, LahetaViesti, "Helou");
396
397        Mouse.Listen(MouseButton.Left, ButtonState.Released, Ammu, "oaisd", pelaaja);
398
399        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
400
401        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta3, "Pelaaja liikkuu vasemmalle", pelaaja, -nopeus);
402        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta3, "Pelaaja liikkuu oikealle", pelaaja, nopeus);
403        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
404
405        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
406    }
407    void ENapit()
408    {
409        if (onKauppaE == true)
410        {
411            Menekauppaan();
412        }
413    }
414    void Menekauppaan()
415    {
416        ClearAll();
417        LuoKentta("kauppa");
418        LisaaNappaimet();
419        LuoKursori();
420        LuoKauppaTausta();
421        Camera.Follow(pelaaja);
422        Camera.ZoomFactor = 1.2;
423        Camera.StayInLevel = true;
424
425    }
426    void LuoKauppaTausta()
427    {
428        GameObject kauppatausta = new GameObject(ruudunKoko.X, ruudunKoko.Y / 2); //Screen.Width, Screen.Height/2
429        kauppatausta.Image = kauppaTausta;
430        Add(kauppatausta, -3);
431        Layers[-3].RelativeTransition = new Vector(0.5, 0.0);
432    }
433    void Ammu(PlatformCharacter pelaaja)
434    {
435        if (!onAse || pelaaja.IsDestroyed)
436            return;
437
438        Vector suunta = (Mouse.PositionOnWorld - pelaaja.Position).Normalize();
439        Vector nopeus = suunta * 400;
440        Vector paikka = pelaaja.Position + suunta * RUUDUN_KOKO;
441        LuoOmaAmmus(paikka, nopeus);
442
443        AmmusPaketti paketti = new AmmusPaketti();
444        paketti.X = paikka.X;
445        paketti.Y = paikka.Y;
446        paketti.VX = nopeus.X;
447        paketti.VY = nopeus.Y;
448        yhteys.SendObject(paketti);
449    }
450    void LuoAmmus(Vector paikka, Vector nopeus)
451    {
452        PhysicsObject Ammus = new PhysicsObject(10, 10);
453        Ammus.Position = paikka;
454        //Ammus.X = pelaaja.X + 50;
455        //Ammus.Y = pelaaja.Y;
456        Ammus.Velocity = nopeus;
457        Ammus.IgnoresGravity = true;
458        Ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
459        Ammus.IgnoresCollisionResponse = true;
460        //Ammus.IgnoresCollisionWith(pelaaja);
461        Add(Ammus);
462
463        AddCollisionHandler(Ammus, "pelaaja", AmmusOsuuPelaajaan);
464        AddCollisionHandler(Ammus, "taso", AmmusOsuu);
465    }
466
467    void LuoOmaAmmus(Vector paikka, Vector nopeus)
468    {
469        PhysicsObject Ammus = new PhysicsObject(10, 10);
470        Ammus.Position = paikka;
471        //Ammus.X = pelaaja.X + 50;
472        //Ammus.Y = pelaaja.Y;
473        Ammus.Velocity = nopeus;
474        Ammus.IgnoresGravity = true;
475        Ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
476        Ammus.IgnoresCollisionResponse = true;
477        //Ammus.IgnoresCollisionWith(pelaaja);
478        Add(Ammus);
479
480        //AddCollisionHandler(Ammus, "pelaaja", AmmusOsuuPelaajaan);
481        AddCollisionHandler(Ammus, "taso", AmmusOsuu);
482    }
483
484    void AmmusOsuu(PhysicsObject Ammus, PhysicsObject kohde)
485    {
486        Ammus.Destroy();
487    }
488
489    void AmmusOsuuPelaajaan(PhysicsObject Ammus, PhysicsObject kohde)
490    {
491        //if (kohde is Pelaaja)
492        if (kohde == pelaaja)
493        {
494            elamaLaskuri.Value -= 1;
495        }
496    }
497
498    void LahetaViesti()
499    {
500        InputWindow kysymysIkkuna = new InputWindow("Lähetä Viesti");
501        kysymysIkkuna.TextEntered += ProcessInput;
502        Add(kysymysIkkuna);
503    }
504    void ProcessInput(InputWindow ikkuna)
505    {
506        string vastaus = ikkuna.InputBox.Text;
507        if (vastaus != "console")
508        {
509            MessageDisplay.Add(vastaus);
510            yhteys.SendMessage(vastaus);
511        }
512        else
513        {
514            LahetaConsoleViesti();
515        }
516    }
517    void LahetaConsoleViesti()
518    {
519        InputWindow ConsoleIkkuna = new InputWindow("CMD");
520        ConsoleIkkuna.TextEntered += CmdProcessInput;
521        Add(ConsoleIkkuna);
522    }
523    void CmdProcessInput(InputWindow ikkuna)
524    {
525        TulkitseKomento(yhteys.guid, ikkuna.InputBox.Text);
526        //yhteys.SendMessage(ikkuna.InputBox.Text);
527    }
528
529    Pelaaja HaePelaaja(Guid id)
530    {
531        if (muutPelaajat.ContainsKey(id))
532        {
533            return muutPelaajat[id];
534        }
535        return pelaaja;
536    }
537
538    void TulkitseKomento(Guid id, string vastaus)
539    {
540        char[] delimiterChars = { ' ' };
541        string[] komento = vastaus.Split(delimiterChars);
542        if (vastaus == "A-j")
543        {
544            LuoAj(id);
545        }
546        if (vastaus == "AjSkin")
547        {
548            LuoAjSkin(id);
549        }
550        if (vastaus == "Ase")
551        {
552            LuoAseKursori();
553            onAse = true;
554        }
555        if (vastaus == "VisibleCursor")
556        {
557            IsMouseVisible = true;
558        }
559        if (vastaus == "UnVisibleCursor")
560        {
561            IsMouseVisible = false;
562        }
563        if (komento[0] == "Gravity")
564        {
565            if (komento.Length >= 3)
566            {
567                double x, y;
568                try
569                {
570                    x = double.Parse(komento[1]);
571                    y = double.Parse(komento[2]);
572                    Gravitymuutos(x, y);
573                }
574                catch (Exception e)
575                {
576                    // ei onnistu
577                }
578            }
579        }
580    }
581    void LuoAjSkin(Guid id)
582    {
583        HaePelaaja(id).Image = Aajii;
584    }
585    void Gravitymuutos(double x, double y)
586    {
587        Gravity = new Vector(x, y);
588    }
589
590    void LuoAj(Guid id)
591    {
592        Pelaaja pelaaja = HaePelaaja(id);
593
594        PhysicsObject Aj = new PhysicsObject(50, 50);
595        Aj.Position = pelaaja.Position;
596        Aj.Image = Aajii;
597        Add(Aj);
598    }
599
600    void Liikuta3(Pelaaja hahmo, double nopeus)
601    {
602        hahmo.Walk(nopeus);
603        hahmonopeus = nopeus;
604        PaivitaPaketti();
605    }
606
607    void PaivitaPaketti()
608    {
609        Paketti paketti = new Paketti();
610        paketti.X = pelaaja.X;
611        paketti.Y = pelaaja.Y;
612        paketti.VX = pelaaja.Velocity.X;
613        paketti.VY = pelaaja.Velocity.Y;
614        paketti.nopeus = hahmonopeus;
615        yhteys.SendObject(paketti);
616    }
617    void Hyppaa(Pelaaja hahmo, double nopeus)
618    {
619        hahmo.Jump(nopeus);
620    }
621
622    void TormaaDollareihin(PhysicsObject hahmo, PhysicsObject fivedollars)
623    {
624        MessageDisplay.Add("Yo! U got some money!");
625        fivedollars.Destroy();
626    }
627}
Note: See TracBrowser for help on using the repository browser.