source: 2014/27/PekkaR/D2x-2d/D2x-2d/D2x-2d/D2x_2d.cs @ 5241

Revision 5241, 4.1 KB checked in by pealrist, 7 years ago (diff)
Line 
1#define DEBUG
2
3using System;
4using System.Collections.Generic;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class D2x_2d : PhysicsGame
12{
13    public class Shieldable : PhysicsObject
14    {
15        protected int shield;
16
17        public Shieldable() : base(20, 20)
18        {
19
20        }
21
22        public int getShield()
23        {
24            return shield;
25        }
26
27        public void setShield(int t)
28        {
29            if (t > 0) shield = t;
30            else Destroy();
31        }
32    }
33
34    public class Pelaaja : Shieldable
35    {
36        private int energy = 100;
37
38        public Pelaaja()
39        {
40            shield = 100;
41            Tag = "pelaaja";
42        }
43
44        private void Ammu()
45        {
46            if (energy > 0)
47            {
48                Ammus a = new Ammus(1);
49                energy--;
50                Add(a);
51            } 
52        }
53    }
54
55    public class Vihollinen : Shieldable
56    {
57        private int deal;
58
59        public Vihollinen(int d)
60        {
61            deal = d;
62            Tag = "vihollinen";
63        }
64
65        private void Ammu()
66        {
67            Ammus a = new Ammus(deal);
68            Add(a);
69        }
70    }
71
72    public class Ammus : PhysicsObject
73    {
74        public Ammus(int deal): base(10, 3)
75        {
76            Tag = "ammus";
77        }
78    }
79
80    private Pelaaja pelaaja;
81
82    private bool playeradded = false;
83
84    public override void Begin()
85    {
86        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Exit the game");
87        NaytaValikko();
88    }
89
90    private void NaytaValikko()
91    {
92        MultiSelectWindow alkuValikko = new MultiSelectWindow("", "Start game", "Exit");
93        alkuValikko.AddItemHandler(0, AloitaPeli);
94        alkuValikko.AddItemHandler(1, ConfirmExit);
95        alkuValikko.DefaultCancel = 1;
96        Add(alkuValikko);
97    }
98
99    private void AloitaPeli()
100    {
101        InputWindow kysymysIkkuna = new InputWindow("Enter the level name");
102        kysymysIkkuna.TextEntered += ProcessInput;
103        Add(kysymysIkkuna);
104    }
105
106    private void ProcessInput(InputWindow ikkuna)
107    {
108#if DEBUG
109        MessageDisplay.Add(ikkuna.InputBox.Text);
110#endif
111        try
112        {
113            TileMap ruudut = TileMap.FromLevelAsset("kentta1");
114            ruudut.SetTileMethod('P', LuoPelaaja);
115            ruudut.SetTileMethod('V', LuoVihollinen);
116            ruudut.SetTileMethod('|', LuoPystySeina);
117            ruudut.SetTileMethod('-', LuoVaakaSeina);
118            ruudut.Execute(20, 20);
119        }
120        catch(Exception e)
121        {
122            MessageDisplay.Add(e.StackTrace);
123        }
124    }
125
126    private void LuoVihollinen(Vector paikka, double leveys, double korkeus)
127    {
128        Vihollinen vih = new Vihollinen(1);
129        vih.Width = leveys;
130        vih.Height = korkeus;
131        vih.Position = paikka;
132        vih.Tag = "vihollinen";
133        vih.setShield(100);
134        Add(vih);
135    }
136
137    private void LuoPystySeina(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        seina.Position = paikka;
141        Add(seina);
142    }
143
144    private void LuoVaakaSeina(Vector paikka, double leveys, double korkeus)
145    {
146        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
147        seina.Position = paikka;
148        Add(seina);
149    }
150
151    private void LuoPelaaja(Vector paikka, double leveys, double korkeus)
152    {
153        if (playeradded) throw new Exception("Too many players");
154        pelaaja = new Pelaaja();
155        pelaaja.Width = leveys;
156        pelaaja.Height = korkeus;
157        pelaaja.Position = paikka;
158        pelaaja.setShield(100);
159        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja, "ammus", Osuma);
160        Add(pelaaja);
161        playeradded = true;
162
163    }
164
165    private void Osuma(Pelaaja pelaaja, PhysicsObject kohde)
166    {
167        pelaaja.setShield(pelaaja.getShield() - 1);
168        kohde.Destroy();
169    }
170}
Note: See TracBrowser for help on using the repository browser.