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

Revision 7432, 10.0 KB checked in by nilamijy, 5 years ago (diff)

valmis

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