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

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