source: 2017/31/RoniM/New folder/New folder/Bossfloors/Bossfloors/Bossfloors/Bossfloors.cs @ 9388

Revision 9388, 16.1 KB checked in by npo17_71, 23 months 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 Pelaaja : PhysicsObject
10{
11    private IntMeter pisteLaskuri = new IntMeter(0);
12    private IntMeter pisteLaskuri2 = new IntMeter(0);
13    public IntMeter PisteLaskuri { get { return pisteLaskuri; } }
14
15    public AssaultRifle Ase;
16
17    public Pelaaja(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20    }
21}
22
23public class Bossfloors : PhysicsGame
24{
25
26    Image kpelaaja1 = LoadImage("kpelaaja1");
27    //Image bpelaaja2 = LoadImage("kpelaaja2");
28    //Image bpelaaja3 = LoadImage("kpelaaja3");
29    //Image bpelaaja4 = LoadImage("kpelaaja4");
30    Image Points = LoadImage("Points");
31    Image vihu5 = LoadImage("vihu");
32    Image zzombi = LoadImage("zzombi");
33    Timer vihuajastin;
34    Pelaaja pelaaja1;
35    //Pelaaja pelaaja2;
36    //Pelaaja pelaaja3;
37    //Pelaaja pelaaja4;
38    //IntMeter pisteLaskuri;
39    List<Vector> zombispawnit = new List<Vector>();
40    const int RUUDUN_KOKO = 30;
41    int kenttaNro = 1;
42    public int Elamat { get; set; }
43    public bool OnHidas { get; set; }
44    public int KenganNumero { get; set; }
45    public int Rahat { get; set; }
46    public Vector RespausKoordinaatit { get; set; }
47    const double NOPEUS = 800;
48    const double pyoriminenNopeus = 4.0;
49    IntMeter pisteLaskuri;
50
51
52    public override void Begin()
53    {
54        //LuoKentta("kentta");
55
56        LataaKentta();
57
58    }
59
60    class Rakennus : PhysicsObject
61    {
62        private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
63        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
64
65        public Rakennus(double leveys, double korkeus)
66            : base(leveys, korkeus)
67        {
68            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
69        }
70
71    }
72    void LataaKentta()
73    {
74      //  ClearAll();
75
76        if (kenttaNro == 1) LuoKentta("kentta");
77        else if (kenttaNro == 2) LuoKentta("dungeon 1");
78        else if (kenttaNro == 3) LuoKentta("boss 1");
79        else if (kenttaNro > 3)
80        {
81            Exit();
82            return;
83        }
84       
85        //LuoPistelaskuri();
86        // LuoPistelaskuri2();
87        //luoelamalaskuri2();
88       
89        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(-1000, 0));
90        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(1000, 0));
91        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, 1000));
92        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, -1000));
93        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null, pelaaja1);
94
95        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
96        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
97
98        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(-1000, 0));
99        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(1000, 0));
100        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, 1000));
101        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, -1000));
102        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, null, pelaaja1);
103
104    }
105    Pelaaja Luopelaaja(Vector paikka, double leveys, double korkeus, Vector paikka2)
106    {
107        Pelaaja pelaaja1 = new Pelaaja(27, 27);
108        pelaaja1.Position = paikka;
109        pelaaja1.LinearDamping = 0.9;
110        Elamat = 3;
111        OnHidas = false;
112        KenganNumero = 42;
113        Rahat = 1000;
114        RespausKoordinaatit = Vector.Zero;
115        Vector pelaajanSuunta = Vector.FromLengthAndAngle(pyoriminenNopeus, pelaaja1.Angle);
116        pelaaja1.Push(pelaajanSuunta);
117        pelaaja1.CanRotate = false;
118        pelaaja1.Tag = "pelaaja";
119        pelaaja1.CollisionIgnoreGroup = 1;
120        AddCollisionHandler(pelaaja1, "vihollinen", pelaajaosui);
121        AddCollisionHandler(pelaaja1, "rakennus", TormasiMaaliin);
122       
123       
124     //   
125         
126        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
127       //
128      // 
129
130        pelaaja1.Ase = new AssaultRifle(0, 0);
131        pelaaja1.Ase.ProjectileCollision = AmmusOsui;
132
133        pelaaja1.Ase.CanHitOwner = false;
134     
135        pelaaja1.Ase.Ammo.MaxValue = 100;
136
137        Timer aikaLaskuri = new Timer();
138        aikaLaskuri.Interval = 0.3333;
139        aikaLaskuri.Timeout += delegate
140        {
141            pelaaja1.Ase.Ammo.Value += 1;
142        };
143        aikaLaskuri.Start();
144
145        pelaaja1.Ase.Power.DefaultValue = 80;
146        pelaaja1.Ase.FireRate = 50;
147        pelaaja1.Add(pelaaja1.Ase);
148       
149        Add(pelaaja1);
150        return pelaaja1;
151
152
153    }
154
155    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject dungeon)
156    {
157        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
158        kenttaNro++;
159        LataaKentta();
160    }
161
162   
163    void Tahtaa(AnalogState hiirenLiike)
164    {
165        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.Ase.AbsolutePosition).Normalize();
166        pelaaja1.Ase.Angle = suunta.Angle;
167        Mouse.IsCursorVisible = true;
168    }
169
170   
171
172    void AmmuAseella(Pelaaja pelaaja)
173    {
174        if (pelaaja.IsDestroyed) return;
175
176      //  pelaaja.Ase.AbsoluteAngle = pelaaja.Velocity.Angle;
177        PhysicsObject ammus = pelaaja.Ase.Shoot();
178
179        if (ammus != null)
180        {
181           
182            //ammus.Image = ...
183            ammus.Color = (Color.Gold);
184               
185            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.1);
186        }
187    }
188
189 
190    void luoelamalaskuri()
191    {
192        //elamaLaskuri = new DoubleMeter(10);
193        //elamaLaskuri.MaxValue = 10;
194        //    elamaLaskuri.LowerLimit += ElamaLoppui;
195
196
197        ProgressBar elamalaskuri = new ProgressBar(150, 20);
198        elamalaskuri.X = Screen.Left + 150;
199        elamalaskuri.BindTo(pelaaja1.Ase.Ammo);
200        elamalaskuri.Y = Screen.Top - 20;
201        elamalaskuri.Color = Color.Transparent;
202
203        //Palkin väri:
204        elamalaskuri.BarColor = Color.Red;
205
206        //Reunan väri:
207        elamalaskuri.BorderColor = Color.Black;
208     
209        Add(elamalaskuri);
210    }
211    void LuoPistelaskuri()
212    {
213        pisteLaskuri = new IntMeter(0);
214
215        Label pisteNaytto = new Label(150, 20);
216        pisteNaytto.IntFormatString = "Pisteitä: {0:D3}";
217        pisteNaytto.X = Screen.Left + 150;
218        pisteNaytto.BindTo(pelaaja1.Ase.Ammo);
219        pisteNaytto.Y = Screen.Top - 20;
220        pisteNaytto.TextColor = Color.Black;
221        //  pisteNaytto.Color = Color.White;
222
223       
224        Add(pisteNaytto, 1);
225    }
226    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
227    {
228        ammus.Destroy();
229
230        if (kohde.Tag.Equals("zombi") || kohde.Tag.Equals("monster"))
231        {
232            kohde.Destroy();
233            ((Pelaaja)pelaaja1).PisteLaskuri.Value += 5;
234
235        }
236    }
237
238    void LiikutaPelaajaa(PhysicsObject pelaaja, Vector vektori)
239    {
240        pelaaja.Push(vektori);
241    }
242
243
244    void LuoKentta(string nimi)
245    {
246        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(nimi);
247        ruudut.SetTileMethod(Color.FromHexCode("FF006E"), LuoPelaaja1);
248        //ruudut.SetTileMethod(Color.FromHexCode("0019FF"), LuoPelaaja2);
249        //// ruudut.SetTileMethod(Color.Yellow, LuoTahti);
250        //ruudut.SetTileMethod(Color.FromHexCode("00FF4C"), LuoPelaaja3);
251        //ruudut.SetTileMethod(Color.FromHexCode("D86800"), LuoPelaaja4);
252        ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoSeina);
253        ruudut.SetTileMethod(Color.FromHexCode("FA00FF"), LuoSyotava);
254       
255        ruudut.SetTileMethod(Color.FromHexCode("AD77FF"), luomonster);
256        ruudut.SetTileMethod(Color.FromHexCode("#FFB60000"), LisaaVihollisSpawn);
257        ruudut.SetTileMethod(Color.FromHexCode("FF6A00"), dungeon);
258        ruudut.SetTileMethod(Color.FromHexCode("FFFFFF"), safezone);
259        Level.Background.Color = Color.Gray;
260       // ruudut.Optimize(Color.Black);
261        ruudut.Execute(30, 30);
262        Camera.ZoomFactor = 2.45;
263        Camera.Follow(pelaaja1);
264    }
265
266    //void SeuraavaKentta(PhysicsObject pelaaja, PhysicsObject maali)
267    //{
268    //    kenttaNro++;
269    //    LataaKentta();
270    //}
271
272   
273    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
274    {
275        pelaaja1 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Left + 400, Screen.Top - 500));
276        pelaaja1.Image = kpelaaja1;
277        LuoPistelaskuri();
278        luoelamalaskuri();
279        zombispawn();
280    }
281
282    //void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
283    //{
284    //    pelaaja2 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Right - 400, Screen.Top - 500));
285    //    pelaaja2.Image = bpelaaja2;
286
287    //}
288    //void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
289    //{
290    //    pelaaja3 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Left + 400, Screen.Bottom + 500));
291    //    pelaaja3.Image = bpelaaja3;
292    //}
293    //void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
294    //{
295    //    pelaaja4 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Right - 400, Screen.Bottom + 500));
296    //    pelaaja4.Image = bpelaaja4;
297    //}
298    void LuoSeina(Vector paikka, double leveys, double korkeus)
299    {
300        PhysicsObject seina = new PhysicsObject(30, 30);
301
302        seina.Position = paikka;
303        seina.MakeStatic();
304        seina.Color = Color.Black;
305        seina.Tag = "seina";
306
307
308        Add(seina);
309    }
310    void LuoSyotava(Vector paikka, double leveys, double korkeus)
311    {
312        Timer aikaLaskuri = new Timer();
313        aikaLaskuri.Interval = 10;
314        aikaLaskuri.Timeout += delegate
315        {
316            const int RUUDUN_KOKO = 40;
317
318            PhysicsObject syotava = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
319
320            syotava.Position = paikka;
321            syotava.Tag = "vihollinen";
322            syotava.Image = Points;
323
324
325            syotava.Color = Color.Blue;
326            LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
327            labyrinttiAivot.Speed = 200.0;
328            labyrinttiAivot.LabyrinthWallTag = "seina";
329            syotava.LifetimeLeft = TimeSpan.FromSeconds(100.0);
330
331            syotava.Brain = labyrinttiAivot;
332            Add(syotava);
333        };
334        aikaLaskuri.Start();
335    }
336
337
338    void pelaajaosui(PhysicsObject pelaaja1, PhysicsObject kohde)
339    {
340        if (kohde.Tag.Equals("vihollinen"))
341        {
342            kohde.Destroy();
343
344            ((Pelaaja)pelaaja1).PisteLaskuri.Value += 10;
345
346        }
347    }
348   
349    //Label LuoPistelaskuri2(Pelaaja pelaaja, Vector paikka)
350    //{
351    //    Label pisteNaytto2 = new Label(pelaaja.PisteLaskuri2);
352    //    pisteNaytto2.TextColor = Color.Yellow;
353    //    pisteNaytto2.Color = Color.Black;
354    //    pisteNaytto2.Title = "Pisteet2";
355    //    pisteNaytto2.Position = paikka;
356    //    Add(pisteNaytto2);
357    //    return pisteNaytto2;
358    //}
359
360    //MessageDisplay.Add("Pelaaja 1 hävisi pelin.");
361
362    void luomonster(Vector paikka, double leveys, double korkeus)
363    {
364        Timer aikaLaskuri = new Timer();
365        aikaLaskuri.Interval = 7;
366        aikaLaskuri.Timeout += delegate
367        {
368            PhysicsObject monster = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
369
370            monster.Position = paikka;
371            monster.Tag = "monster";
372            monster.Image = vihu5;
373            monster.Color = Color.Red;
374           LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
375            labyrinttiAivot.Speed = 150.0;
376            monster.LifetimeLeft = TimeSpan.FromSeconds(20.0);
377            AddCollisionHandler(monster, "pelaaja", pelaajaosui2);
378            labyrinttiAivot.LabyrinthWallTag = "seina";
379            monster.Brain = labyrinttiAivot;
380            Add(monster);
381        };
382        aikaLaskuri.Start();
383        //const int RUUDUN_KOKO = 40;
384    }
385    void pelaajaosui2(PhysicsObject monster, PhysicsObject kohde)
386    {
387        if (kohde.Tag.Equals("pelaaja"))
388        {
389            kohde.Destroy();
390
391
392            ((Pelaaja)kohde).PisteLaskuri.Value -= 1 / 100;
393
394        }
395    }
396
397    void luozombi(Vector paikka, double leveys, double korkeus)
398    {
399     
400            PhysicsObject zombi = new PhysicsObject(17, 17);
401           
402            zombi.Position = paikka;
403            zombi.Tag = "zombi";
404
405            FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
406            RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
407            seuraajanAivot.Speed = 30;                 // Millä nopeudella kohdetta seurataan
408            seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
409            seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
410            seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
411            seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
412
413            ;
414            satunnaisAivot.ChangeMovementSeconds = 5;
415            zombi.Image = zzombi;
416            zombi.LifetimeLeft = TimeSpan.FromSeconds(20.0);
417            AddCollisionHandler(zombi, "pelaaja", pelaajaosui2);
418            satunnaisAivot.WanderRadius = 200;
419            //seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
420            zombi.Brain = satunnaisAivot;
421            zombi.Brain = seuraajanAivot;
422            Add(zombi, +1);
423     
424
425
426    }
427    void LisaaVihollisSpawn(Vector paikka, double leveys, double korkeus)
428    {
429        zombispawnit.Add(paikka);
430    }
431    void zombispawn()
432    {
433
434        //1.0 3.0
435
436        vihuajastin = new Timer();
437        vihuajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
438        vihuajastin.Timeout += delegate
439        {
440            Vector arvottupaikka = zombispawnit[RandomGen.NextInt(zombispawnit.Count - 1)];
441            luozombi(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
442
443        };
444        vihuajastin.Start();
445
446    }
447    //  void mitaTapahtuuKunOllaanLahella()
448    //  {
449    //      zombi.Color = Color.Red;
450    //  }
451
452    void dungeon(Vector paikka, double leveys, double korkeus)
453    {
454        Rakennus rakennus = new Rakennus(leveys, korkeus);
455        rakennus.Position = paikka;
456        rakennus.MakeStatic();
457        rakennus.Color = Color.Brown;
458        rakennus.CollisionIgnoreGroup = 2;
459        rakennus.Tag = "rakennus";
460        Add(rakennus);
461
462
463
464    }
465
466    void luovihu(Vector paikka, double leveys, double korkeus)
467    {
468        PhysicsObject vihu = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
469
470        vihu.Position = paikka;
471        vihu.Tag = "vihu";
472    }
473
474    void safezone(Vector paikka, double leveys, double korkeus)
475    {
476        PhysicsObject rakennus1 = new PhysicsObject(leveys, korkeus);
477        rakennus1.Position = paikka;
478        rakennus1.MakeStatic();
479        rakennus1.CollisionIgnoreGroup = 1;
480        rakennus1.Color = Color.White;
481        rakennus1.Tag = "rakennus1";
482        Add(rakennus1);
483
484    }
485    //void luoelamalaskuri2()
486    //{
487    //    //elamaLaskuri = new DoubleMeter(10);
488    //    //elamaLaskuri.MaxValue = 10;
489    //    //    elamaLaskuri.LowerLimit += ElamaLoppui;
490
491
492    //    ProgressBar elamalaskuri2 = new ProgressBar(150, 20);
493    //    elamalaskuri2.X = Screen.Left + 150;
494    //    elamalaskuri2.Y = Screen.Top - 40;
495    //    elamalaskuri2.Color = Color.Transparent;
496
497    //    //Palkin väri:
498    //    elamalaskuri2.BarColor = Color.Red;
499
500    //    //Reunan väri:
501    //    elamalaskuri2.BorderColor = Color.Black;
502    //    elamalaskuri2.BindTo(pisteNaytto2);
503    //    Add(elamalaskuri2);
504    //}
505
506}
507
508
509
510
511
512
Note: See TracBrowser for help on using the repository browser.