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

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