source: 2015/26/RasmusP/DungeonClasher/DungeonClasher/DungeonClasher/DungeonClasher.cs @ 6343

Revision 6343, 8.4 KB checked in by rapelton, 6 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
9class mob : PhysicsObject
10{
11    private IntMeter elamaLaskuri = new IntMeter(25 ,0, 25);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public mob(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19    public int Elamat { get; set; }
20    public int Kilpi { get; set; }
21
22}
23
24
25
26public class DungeonClasher : PhysicsGame
27{
28    Image tiiliskivi = LoadImage("Tiiliskivi");
29    Image miekkaKuva = LoadImage("Miekka");
30    Image taustaKuva = LoadImage("TaustaKuva");
31    Image tyrmaSeina = LoadImage("DunegonWall");
32
33    PlatformCharacter pelaaja;
34    PhysicsObject miekka;
35   
36   
37   
38   
39
40    private IntMeter elamaLaskuri = new IntMeter(20, 0, 20);
41
42
43    int kenttaNro = 1;
44
45    bool miekkaEsille = false;
46    int vihujenMaara = 0;
47
48    public override void Begin()
49    {
50        SmoothTextures = false;
51
52        MultiSelectWindow alkuvaliko = new MultiSelectWindow("DungeonClasher", "Aloita peli", "Lopeta");
53        alkuvaliko.AddItemHandler(0, AloitaPeli);
54        alkuvaliko.AddItemHandler(1, Exit);
55
56        Add(alkuvaliko);
57
58     
59
60
61        //SeuraavaKentta();
62
63       
64    }
65    void AloitaPeli()
66    {
67
68    LuoKentta();
69    }
70
71    void SeuraavaKentta()
72{
73    ClearAll();
74    if (kenttaNro > 6)
75    { MessageDisplay.Add("voitit pelin"); }
76    else { LuoKentta(); }
77 
78   
79}
80    void LuoKentta()
81    {
82        miekkaEsille = false;
83
84        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kenttaNro );
85
86        ruudut.SetTileMethod('=', LuoHirvio);
87        ruudut.SetTileMethod('*', LisaaLattia);
88        ruudut.SetTileMethod('P', LuoPelaaja);
89        ruudut.SetTileMethod('B', LuoBossi);
90        ruudut.SetTileMethod('k', LisaaKallio);
91        ruudut.SetTileMethod('D', LuoTyrmanSeina);
92
93        ruudut.Execute(40, 40);
94
95        Gravity = new Vector(0.0, -1000);
96
97        Level.CreateBorders(false);
98
99       
100        asetaNappaimet();
101
102        Mouse.IsCursorVisible = true;
103
104        Camera.ZoomToLevel();
105    }
106
107    void asetaNappaimet()
108    {
109
110        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
111        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-500, 0));
112        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaaja, null, new Vector());
113        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(500, 0));
114        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaaja, null, new Vector());
115        Keyboard.Listen(Key.A, ButtonState.Pressed, IskeMiekalla, null);
116     
117
118    }
119    void LiikutaPelaajaa(Vector vektori)
120    {
121        pelaaja.Walk(vektori.X);
122    }
123
124    void LuoTyrmanSeina(Vector paikka, double korkeus, double leveys)
125{
126   
127
128    GameObject seina = new GameObject(200, 200);
129    seina.Image = tyrmaSeina;
130   
131    Add(seina, -2);
132
133    seina.Position = paikka;
134    seina.Y = lattia.Y + lattia.Height / 2;
135   
136   
137
138
139}
140    void PysaytaPelaaja(Vector vektori)
141    {
142        pelaaja.Velocity = new Vector(0, 0);
143    }
144
145    void LuoHirvio(Vector paikka, double leveys, double korkeus)
146    {
147        //mob Hirvio = RandomGen.SelectOne(orc, darkKnight, giant);
148        mob Hirvio = new mob(20, 20);
149        int arvonta = RandomGen.NextInt(3);
150
151        if (arvonta == 1)
152        {
153            //orc
154            Hirvio = new mob(80.0, 80.0);
155
156            Hirvio.Elamat = 3;
157            Hirvio.Shape = Shape.Rectangle;
158            Hirvio.Color = Color.Yellow;
159            Hirvio.Mass = 1000;
160            Hirvio.MaxVelocity = 0;
161            Hirvio.MaxAngularVelocity = 0;
162            Hirvio.Tag = "Enimy";
163
164
165        }
166        else if (arvonta == 2)
167        {
168            //darkKnight
169            Hirvio = new mob(128, 128);
170            Hirvio.Elamat = 3;
171            Hirvio.Shape = Shape.Rectangle;
172            Hirvio.Color = Color.Black;
173            Hirvio.Mass = 1000;
174            Hirvio.MaxVelocity = 0;
175            Hirvio.MaxAngularVelocity = 0;
176            Hirvio.Tag = "Enimy";
177        }
178        else
179        {
180            //giant
181            Hirvio = new mob(150, 200);
182            Hirvio.Elamat = 3;
183            Hirvio.Shape = Shape.Rectangle;
184            Hirvio.Color = Color.Blue;
185            Hirvio.Mass = 1000;
186            Hirvio.MaxVelocity = 0;
187            Hirvio.MaxAngularVelocity = 0;
188            Hirvio.Tag = "Enimy";
189
190        }
191
192        Hirvio.ElamaLaskuri.LowerLimit += delegate 
193        { 
194            vihujenMaara--;
195            if (vihujenMaara == 0)
196            { kenttaNro++; SeuraavaKentta(); }
197        };
198       
199        Hirvio.Position = paikka;
200        Hirvio.Y -= 20 - Hirvio.Height * 0.5;
201        Add(Hirvio);
202        vihujenMaara++;
203
204
205
206    }
207    void LisaaLattia(Vector paikka, Double leveys, Double korkeus)
208    {
209        PhysicsObject lattia = PhysicsObject.CreateStaticObject(leveys, korkeus);
210        lattia.Position = paikka;
211        lattia.Color = Color.Brown;
212        lattia.Image = tiiliskivi;
213        Add(lattia);
214
215
216    }
217
218    void LisaaKallio(Vector paikka, Double leveys, Double korkeus)
219    {
220        PhysicsObject kallio = PhysicsObject.CreateStaticObject(leveys, korkeus);
221        kallio.Position = paikka;
222        kallio.Color = Color.HotPink;
223        Add(kallio);
224    }
225
226    void LuoBossi(Vector paikka, Double leveys, double korkeus)
227    {
228        mob Boss = new mob(150, 150);
229        Boss.Position = paikka;
230        Boss.Elamat = 75;
231        Boss.Shape = Shape.Rectangle;
232        Boss.Color = Color.Pink;
233        Boss.Y -= 20 - Boss.Height * 0.5;
234       
235        Boss.MaxAngularVelocity = 0;
236        Boss.MaxVelocity = 1000;
237
238        Boss.Tag = "Boss";
239        Boss.Tag = "Enimy";
240
241
242        Add(Boss);
243
244       
245
246        FollowerBrain seuraajaAivo = new FollowerBrain(pelaaja);
247        seuraajaAivo.Speed = 100;
248
249        Boss.Brain = seuraajaAivo;
250        seuraajaAivo.StopWhenTargetClose = true;
251        seuraajaAivo.Active = true;
252
253       
254     
255   
256}
257    void LuoPelaaja(Vector paikka, Double leveys, Double korkeus)
258    {
259        pelaaja = new PlatformCharacter(40, 120);
260        pelaaja.Position = paikka;
261        pelaaja.Y -= 20 - pelaaja.Height * 0.5;
262        //pelaaja.Elamat = 3;
263        pelaaja.Color = Color.Black;
264
265        elamaLaskuri.LowerLimit += delegate { pelaaja.Destroy(); };
266
267        ProgressBar elamaPalkki = new ProgressBar(150, 20);
268        elamaPalkki.X = Screen.Left + 150;
269        elamaPalkki.Y = Screen.Top - 20;
270        elamaPalkki.BindTo(elamaLaskuri);
271        Add(elamaPalkki);
272
273        Add(pelaaja, 1);
274
275        pelaaja.MaxAngularVelocity = 0;
276        pelaaja.MaxVelocity = 500;
277
278
279        AddCollisionHandler(pelaaja, "Enimy", PelaajaOsui);
280        AddCollisionHandler(pelaaja, "Boss", PelaajaOsuiBossiin);
281
282    }
283    void PelaajaOsui(PhysicsObject pelaaja, PhysicsObject kohde)
284    {
285        elamaLaskuri.Value -= RandomGen.SelectOne(1, 2, 3, 4);
286
287    }
288    void PelaajaOsuiBossiin(PhysicsObject pelaaja, PhysicsObject kohdde)
289    {
290        elamaLaskuri.Value -= RandomGen.SelectOne(2, 3, 5, 7, 9);
291   
292    }
293
294    void IskeMiekalla()
295    {
296        if (!miekkaEsille)
297        {
298            miekkaEsille = true;
299            miekka = new PhysicsObject(70, 64);
300            miekka.X = pelaaja.X + pelaaja.Width / 2;
301            miekka.Image = miekkaKuva;
302            miekka.IgnoresCollisionResponse = true;
303            miekka.IgnoresGravity = true;
304            miekka.Y = pelaaja.Y;
305            Add(miekka);
306            Timer.SingleShot(1, delegate { miekka.Destroy(); miekkaEsille = false; });
307
308            AddCollisionHandler(miekka, "Enimy", vahingoitaVihollista);
309
310            Timer MiekanLiikutus = new Timer();
311            MiekanLiikutus.Interval = 0.01;
312            MiekanLiikutus.Timeout += delegate { miekka.Position = pelaaja.Position + pelaaja.FacingDirection.GetVector() * 33; };
313            MiekanLiikutus.Start();
314
315
316           
317
318           
319        }
320    }
321    void vahingoitaVihollista(PhysicsObject miekka, PhysicsObject vihollinen)
322    {
323        mob vihu = vihollinen as mob;
324        int pudotus = RandomGen.NextInt(10);
325        vihu.ElamaLaskuri.Value -= pudotus;
326    }
327}
Note: See TracBrowser for help on using the repository browser.