source: 2016/24/NikoJ/ArrowRUN/ArrowRUN/ArrowRUN/ArrowRUN.cs @ 8180

Revision 8180, 13.9 KB checked in by nilamijy, 5 years ago (diff)

ääni

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10
11// http://www.bfxr.net/
12
13
14public class ArrowRUN : PhysicsGame
15{
16    const double NOPEUS = 800;
17    const double hyppyNopeus = 750;
18    const int RUUDUN_KOKO = 40;
19    const double pyoriminenNopeus = 2.0;
20    PhysicsObject Vihollinen;
21    Image item2 = LoadImage("item2");
22    PhysicsObject pelaaja1;
23    Image[] pelaajankuvat = LoadImages("taivaansininen", "keltainen", "viininpunainen", "sininen", "ruskea", "pinkki", "liila", "punen", "Untitled");
24    Image tahtiKuva = LoadImage("tahti");
25    Image Laserkuva = LoadImage("laser");
26    Image plasmakuva = LoadImage("plasma");
27    Image YdinPommikuva = LoadImage("ydinPommi");
28   
29
30    List<Vector> spawnit = new List<Vector>();
31    List<Vector> vihuspawnit = new List<Vector>();
32
33    IntMeter pisteLaskuri;
34
35    string nykyinenAse = "perus";
36
37    Weapon pelaajan1Ase;
38
39
40    EasyHighScore topLista = new EasyHighScore();
41
42
43    public override void Begin()
44    {
45        // Gravity = new Vector(0, -1000);
46
47        ClearAll();
48
49        LuoKentta();
50        LisaaNappaimet();
51
52        MultiSelectWindow alkuValikko = new MultiSelectWindow("arrowRUN",
53  "start", "top score", "exit");
54
55
56       
57        alkuValikko.Color = Color.Mint;
58
59        alkuValikko.AddItemHandler(0, AloitaPeli);
60        alkuValikko.AddItemHandler(1, ParhaatPisteet);
61        alkuValikko.AddItemHandler(2, Exit);
62        Add(alkuValikko);
63
64    }
65
66    void aloitapelaaminen()
67    {
68
69        LuoPistelaskuri();
70
71
72        Camera.Follow(pelaaja1);
73        Camera.ZoomFactor = 1.2;
74        Camera.StayInLevel = true;
75        esinespawn();
76        vihollisspawn();
77    }
78
79    void ParhaatPisteet()
80
81    {
82
83        topLista.Show();
84        topLista.HighScoreWindow.Closed += delegate (Window a) { Begin(); };
85
86    }
87
88    void AloitaPeli()
89
90    {
91        aloitapelaaminen();
92    }
93
94
95    void LuoKentta()
96    {
97        TileMap kentta = TileMap.FromLevelAsset("kentta1");
98        kentta.SetTileMethod('.', LisaaSpawn);
99        kentta.SetTileMethod('o', LisaaTaso);
100        kentta.SetTileMethod('i', LisaaTahti);
101        kentta.SetTileMethod('N', LisaaPelaaja);
102        kentta.SetTileMethod('v', LisaaVihollisSpawn);
103        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
104        Level.CreateBorders();
105        Level.Background.Color = Color.White;
106
107    }
108
109
110
111    void LuoPistelaskuri()
112    {
113        pisteLaskuri = new IntMeter(0);
114
115        Label pisteNaytto = new Label();
116        pisteNaytto.X = Screen.Left + 100;
117        pisteNaytto.Y = Screen.Top - 100;
118        pisteNaytto.TextColor = Color.Black;
119        pisteNaytto.Color = Color.White;
120
121        pisteNaytto.BindTo(pisteLaskuri);
122        Add(pisteNaytto);
123    }
124
125    void LisaaTaso(Vector paikka, double leveys, double korkeus)
126    {
127        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
128        taso.Position = paikka;
129        taso.Color = Color.Black;
130        taso.Tag = "seina";
131        Add(taso);
132
133    }
134
135    void LisaaTahti(Vector paikka, double leveys, double korkeus)
136    {
137        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
138        tahti.IgnoresCollisionResponse = true;
139        tahti.Position = paikka;
140        tahti.Image = tahtiKuva;
141        tahti.Tag = "tahti";
142        Add(tahti);
143    }
144
145    void LisaaItem2(Vector paikka, double leveys, double korkeus)
146    {
147        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
148        tahti.IgnoresCollisionResponse = true;
149        tahti.Position = paikka;
150        tahti.Image = item2;
151        tahti.Tag = "item2";
152        Add(tahti);
153    }
154
155    void LisaaLaser(Vector paikka, double leveys, double korkeus)
156    {
157        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
158        tahti.IgnoresCollisionResponse = true;
159        tahti.Position = paikka;
160        tahti.Image = Laserkuva;
161        tahti.Tag = "laser";
162        Add(tahti);
163    }
164
165    void LisaaItem4(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
168        tahti.IgnoresCollisionResponse = true;
169        tahti.Position = paikka;
170        tahti.Image = plasmakuva;
171        tahti.Tag = "item4";
172        Add(tahti);
173    }
174
175
176    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
177    {
178        pelaaja1 = new PhysicsObject(leveys, korkeus);
179        pelaaja1.Position = paikka;
180        pelaaja1.Mass = 4.0;
181        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
182        AddCollisionHandler(pelaaja1, "item2", TormaaItem2);
183        AddCollisionHandler(pelaaja1, "laser", TormaaLaser);
184        AddCollisionHandler(pelaaja1, "item4", TormaaItem4);
185        AddCollisionHandler(pelaaja1, "ydinPommi", TormaaydinPommi);
186        Image arvottukuva = RandomGen.SelectOne<Image>(pelaajankuvat);
187        //pelaaja1.Color = vari;
188        pelaaja1.CanRotate = false;
189        pelaaja1.Image = arvottukuva;
190        pelaaja1.LinearDamping = 0.975;
191
192        AddCollisionHandler(pelaaja1, "Vihollinen", TormaaViholliseen);
193
194
195        pelaajan1Ase = new AssaultRifle(0, 001);
196        pelaajan1Ase.FireRate = 0.5;
197        pelaajan1Ase.ProjectileCollision = AmmusOsui;
198        pelaaja1.Add(pelaajan1Ase);
199
200        Add(pelaaja1);
201    }
202
203    void LisaaNappaimet()
204    {
205        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
206        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
207
208        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, pyoriminenNopeus);
209        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, NOPEUS);
210        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -NOPEUS);
211        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, -pyoriminenNopeus);
212
213        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
214
215        /*Keyboard.Listen(Key.Right, ButtonState.Released, () => pelaaja1.Stop(), null);
216        Keyboard.Listen(Key.Left, ButtonState.Released, () => pelaaja1.Stop(), null);
217        Keyboard.Listen(Key.Down, ButtonState.Released, () => pelaaja1.Stop(), null);
218        Keyboard.Listen(Key.Up, ButtonState.Released, () => pelaaja1.Stop(), null);*/
219        //Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
220
221    }
222
223    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
224
225    {
226        Vihollinen = new PhysicsObject(40.0, 40.0, Shape.Diamond);
227
228        Vihollinen.Color = Color.Red;
229
230        const int RUUDUN_KOKO = 40;
231
232        Vihollinen.Position = paikka;
233
234        PhysicsObject LisaaVihollinen = new PhysicsObject(RUUDUN_KOKO / 2, RUUDUN_KOKO / 2);
235        Add(Vihollinen);
236
237        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
238        labyrinttiAivot.Speed = 200.0;
239        labyrinttiAivot.LabyrinthWallTag = "seina";
240
241        Vihollinen.Brain = labyrinttiAivot;
242
243        Vihollinen.Tag = "Vihollinen";
244
245        Add(Vihollinen);
246
247
248    }
249
250
251    void Liikuta(PhysicsObject hahmo, double nopeus)
252    {
253        Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle);
254        hahmo.Push(pelaajanSuunta);
255        //hahmo.Push(suunta);
256        // hahmo.Angle = suunta.Angle;
257    }
258    //void Liikuta2(PhysicsObject hahmo)
259
260    void Kaanna(PhysicsObject hahmo, double suunta)
261    {
262        hahmo.Angle += Angle.FromDegrees(suunta);
263    }
264
265   
266    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
267    {
268        nykyinenAse = "tahti";
269
270        MessageDisplay.Add("you pick spesialitem");
271       
272        pisteLaskuri.Value += 10;
273
274        tahti.Destroy();
275
276    }
277
278    void TormaaItem2(PhysicsObject hahmo, PhysicsObject Item2)
279    {
280        MessageDisplay.Add("you pick spesialitem");
281        nykyinenAse = "item2";
282        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
283        pisteLaskuri.Value += 10;
284        Item2.Destroy();
285
286    }
287
288    void TormaaLaser(PhysicsObject hahmo, PhysicsObject Item2)
289    {
290        nykyinenAse = "laser";
291        MessageDisplay.Add("you pick spesialitem");
292        pisteLaskuri.Value += 10;
293        Item2.Destroy();
294    }
295
296    void TormaaItem4(PhysicsObject hahmo, PhysicsObject Item4)
297    {
298        MessageDisplay.Add("you pick spesialitem");
299        nykyinenAse = "item4";
300        //Timer.SingleShot(30, delegate () { nykyinenAse = "perus"; });
301        pisteLaskuri.Value += 10;
302        Item4.Destroy();
303
304    }
305
306    void TormaaydinPommi(PhysicsObject hahmo, PhysicsObject ydinPommi)
307    {
308        MessageDisplay.Add("you pick superitem");
309        nykyinenAse = "ydinPommi";
310        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
311        pisteLaskuri.Value += 1000;
312        ydinPommi.Destroy();
313
314    }
315
316    void LisaaSpawn(Vector paikka, double leveys, double korkeus)
317    {
318        spawnit.Add(paikka);
319    }
320    void esinespawn()
321    {
322
323        // 5.0 30.0
324        Timer ajastin = new Timer();
325        ajastin.Interval = RandomGen.NextDouble(5.0, 30.0);
326        ajastin.Timeout += delegate
327        {
328            Vector arvottupaikka = spawnit[RandomGen.NextInt(spawnit.Count - 1)];
329
330            int luku = RandomGen.NextInt(0, 101);
331
332            if (luku < 25)
333            {
334                LisaaTahti(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
335            }
336            else if (luku < 50)
337            {
338                LisaaItem2(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
339            }
340            else if (luku < 75)
341            {
342                LisaaLaser(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
343            }
344            else if (luku < 100)
345            {
346                LisaaItem4(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
347            }
348
349            else if (luku < 101)
350            {
351                LisaaYdinPommi(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
352            }
353        };
354        ajastin.Start();
355
356    }
357
358    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
359    {
360        if (kohde.Tag.Equals("Vihollinen"))
361        {
362            if (!ammus.Tag.Equals("plasma"))
363            ammus.Destroy();
364            kohde.Destroy();
365
366            pisteLaskuri.Value += 100;
367        }
368    }
369
370    void AmmuAseella()
371    {
372        if (nykyinenAse == "tahti")
373        {
374            HeitaKranaatti(pelaaja1, 250);
375            nykyinenAse = "perus";
376            return;
377        }
378
379        if (nykyinenAse == "ydinPommi")
380        {
381            HeitaKranaatti(pelaaja1, 3000);
382            nykyinenAse = "perus";
383            return;
384        }
385
386        Vector ammuksenKoko = new Vector(10, 10);
387        Color ammuksenVari = Color.Gray;
388        pelaajan1Ase.FireRate = 1;
389
390        if (nykyinenAse == "item2")
391        {
392            pelaajan1Ase.FireRate = 50;
393        }
394
395        if (nykyinenAse == "item4")
396        {
397            pelaajan1Ase.FireRate = 50;
398            ammuksenVari = Color.DarkGreen;
399            ammuksenKoko = new Vector(100,100);
400
401        }
402
403        if (nykyinenAse == "laser")
404        {
405            ammuksenVari = Color.Red;
406            pelaajan1Ase.FireRate = 100;
407            ammuksenKoko = new Vector(40,2);
408            Timer.SingleShot(1, delegate () { nykyinenAse = "perus"; });
409        }
410
411
412
413
414
415        PhysicsObject ammus = pelaajan1Ase.Shoot();
416        if (ammus != null)
417        {
418            ammus.Size = ammuksenKoko;
419            ammus.Image = null;
420            ammus.Shape = Shape.Circle;
421            ammus.Color = ammuksenVari;
422
423            ammus.MaximumLifetime = TimeSpan.FromSeconds(3.0);
424
425            if (nykyinenAse == "item4")
426            {
427                ammus.MaximumLifetime = TimeSpan.FromSeconds(30.0);
428                ammus.IgnoresCollisionResponse = true;
429                ammus.Image = plasmakuva;
430                ammus.MaxVelocity = 100;
431                ammus.Tag = "plasma";
432                nykyinenAse = "perus";
433            }
434        }
435    }
436
437    void LisaaVihollisSpawn(Vector paikka, double leveys, double korkeus)
438    {
439        vihuspawnit.Add(paikka);
440    }
441
442    //void TormaaViholliseen(PhysicsObject ammus, PhysicsObject Sihollinen)
443
444    void vihollisspawn()
445    {
446
447        //1.0 3.0
448        Timer ajastin = new Timer();
449        ajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
450        ajastin.Timeout += delegate
451        {
452            Vector arvottupaikka = vihuspawnit[RandomGen.NextInt(vihuspawnit.Count - 1)];
453            LisaaVihollinen(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
454
455        };
456        ajastin.Start();
457
458    }
459
460    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject tahti)
461
462    {
463        hahmo.Destroy();
464        topLista.EnterAndShow(pisteLaskuri.Value);
465        topLista.HighScoreWindow.Closed += delegate (Window a) { Begin(); };
466        // Timer.SingleShot(3.0,Begin);
467
468
469    }
470
471    void HeitaKranaatti(PhysicsObject pelaaja, double radius)
472    {
473        Grenade kranaatti = new Grenade(4.0);
474        kranaatti.Explosion.MaxRadius = radius;
475        pelaaja.Throw(kranaatti, Angle.FromDegrees(30), 30000);
476        kranaatti.Explosion.AddShockwaveHandler("Vihollinen", KranaattiOsui);
477
478        Keyboard.Clear();
479        LisaaNappaimet();
480    }
481
482    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
483    {
484
485        rajahdyksenKohde.Destroy();
486        pisteLaskuri.Value += 100;
487    }
488
489    void LisaaYdinPommi(Vector paikka, double leveys, double korkeus)
490
491    {
492        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
493        pommi.IgnoresCollisionResponse = true;
494        pommi.Position = paikka;
495        pommi.Image = YdinPommikuva;
496        pommi.Tag = "ydinPommi";
497        Add(pommi);
498    }
499
500
501}
Note: See TracBrowser for help on using the repository browser.