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

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