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

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