source: 2017/30/OlliL/Bomb helicopter/Bomb helicopter/Bomb_helicopter/Bomb_helicopter.cs @ 9216

Revision 9216, 11.4 KB checked in by npo17_56, 2 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 Bomb_helicopter : PhysicsGame
10{
11    Vector nopeusYlos = new Vector(0, 300);
12    Vector nopeusAlas = new Vector(0, -300);
13    Vector nopeusOikea = new Vector(600, 0);
14    Vector nopeusVasen = new Vector(-600, 0);
15
16    Image taustaKuva = LoadImage("Kentta2");
17    private Image[] ropelinPyoriminen = LoadImages("ropeli1", "ropeli2");
18    PhysicsObject helikopteri;
19    Image laukaisin = LoadImage("laukaisin");
20    PhysicsObject laukaisija;
21    Image laukaisinrikki = LoadImage("laukaisinrikki");
22    PhysicsObject ohjus;
23    Image Ohjus = LoadImage("ohjuspieni");
24    IntMeter pisteLaskuri;
25    bool saakoHeittaaKranaatin = true;
26    DoubleMeter ampumislaskuri;
27    IntMeter laukaisijoitaTuhottuLaskuri;
28    ScoreList topLista = new ScoreList(10, true, double.MaxValue);
29    PhysicsObject oikeaReuna;
30    Timer aikalaskuri;
31    SoundEffect ohjusAani = LoadSoundEffect("Ohjusääni");
32
33
34    public override void Begin()
35    {
36        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
37        TaustaMusa();
38        AlkuValikko();
39
40    }
41
42    void TaustaMusa()
43    {
44       
45        MediaPlayer.Play("Taustamusa");
46        MediaPlayer.IsRepeating = true;
47        MediaPlayer.Volume = 0.3;
48    }
49
50
51    void AlkuValikko()
52    {
53        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
54"Aloita peli", "Parhaat pisteet", "Lopeta");
55        Add(alkuValikko);
56
57        alkuValikko.AddItemHandler(0, Aloitus);
58        alkuValikko.AddItemHandler(1, PisteLista);
59        alkuValikko.AddItemHandler(2, Exit);
60    }
61
62    void PisteLista()
63    {
64        HighScoreWindow topIkkuna = new HighScoreWindow(
65                              "Parhaat pisteet",
66                              topLista);
67        topIkkuna.Closed += delegate { AlkuValikko(); };
68        Add(topIkkuna);
69
70    }
71    void Aloitus()
72    {
73        ClearAll();
74        IsPaused = false;
75        Camera.StayInLevel = true;
76        LaukaisijoitaTuhottuLaskuri();
77        LuoHelikopteri(-2500, 0.0);
78        Camera.ZoomToLevel();
79        Camera.Zoom(0.5);
80        Camera.Follow(helikopteri);
81        AsetaOhjaimet();
82        Laukaisija(-100, -450);
83        Laukaisija(-900, -450);
84        Laukaisija(500, -450);
85        Laukaisija(1400, -450);
86
87        LuoPistelaskuri();
88        LuoAmpumisLaskuri();
89        Level.Width = Window.Width * 3;
90        Level.Height = Window.Height;
91        Level.CreateBorders();
92
93        oikeaReuna = Level.CreateRightBorder();
94        oikeaReuna.Tag = "oikeaReuna";
95
96        Gravity = new Vector(0.0, -800.0);
97
98        Level.Background.Image = taustaKuva;
99        Level.Background.FitToLevel();
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101    }
102
103    void PelaajaKuoli()
104    {
105        IsPaused = true;
106        helikopteri.Destroy();
107
108        PisteLista();
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        aikalaskuri = new Timer();
125        aikalaskuri.Interval = 1.0;
126        aikalaskuri.Timeout += delegate { pisteLaskuri.AddValue(1); };
127        aikalaskuri.Start();
128    }
129
130    void LuoAmpumisLaskuri()
131    {
132        ampumislaskuri = new DoubleMeter(2);
133        ampumislaskuri.MaxValue = ampumislaskuri.Value;
134        ampumislaskuri.AddOverTime(-2.0, 2.0);
135        ampumislaskuri.LowerLimit += delegate { saakoHeittaaKranaatin = true; };
136
137        ProgressBar elamaPalkki = new ProgressBar(150, 20);
138        elamaPalkki.X = 0.0;
139        elamaPalkki.Y = helikopteri.Height *0.7;
140        elamaPalkki.BindTo(ampumislaskuri);
141        elamaPalkki.BarColor = Color.DarkGreen;
142
143        helikopteri.Add(elamaPalkki);
144    }
145
146    void LaukaisijoitaTuhottuLaskuri()
147    {
148        laukaisijoitaTuhottuLaskuri = new IntMeter(0);
149        laukaisijoitaTuhottuLaskuri.MaxValue = 0;
150
151        Label pisteNaytto = new Label();
152        pisteNaytto.X = Screen.Left + 100;
153        pisteNaytto.Y = Screen.Top - 150;
154        pisteNaytto.TextColor = Color.Black;
155        pisteNaytto.Color = Color.White;
156
157        pisteNaytto.BindTo(laukaisijoitaTuhottuLaskuri);
158        Add(pisteNaytto);
159        laukaisijoitaTuhottuLaskuri.UpperLimit += KaikkiLaukaisijatTuhottu;
160    }
161
162    void KaikkiLaukaisijatTuhottu()
163    {
164        MessageDisplay.Add("Voit nyt mennä kentän oikeaan päähän!");
165
166    }
167
168   
169    void AsetaOhjaimet()
170    {
171        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Kopteri ylös", helikopteri, nopeusYlos);
172        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, helikopteri, Vector.Zero);
173        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Kopteri ylös", helikopteri, nopeusAlas);
174        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, helikopteri, Vector.Zero);
175        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Kopteri ylös", helikopteri, nopeusOikea);
176        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, helikopteri, Vector.Zero);
177        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Kopteri ylös", helikopteri, nopeusVasen);
178        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, helikopteri, Vector.Zero);
179
180        Keyboard.Listen(Key.Space, ButtonState.Pressed, HeitaKranaatti, "Pelaaja 1: Heitä kranaatti", helikopteri);
181    }
182
183
184
185    void AsetaNopeus(PhysicsObject helikopteri, Vector nopeus)
186    {
187        if (helikopteri.Y >= Level.Top - 50 && nopeus.Y >0) helikopteri.Velocity = new Vector(helikopteri.Velocity.X, 0);
188        else helikopteri.Velocity = nopeus;
189    }
190
191    void LuoHelikopteri(double x, double y)
192    {
193        helikopteri = new PhysicsObject(510, 133);
194        helikopteri.X = x;
195        helikopteri.Y = y;
196        ropelinPyoriminen = LoadImages("Helikopteri10", "Helikopteri11");
197        helikopteri.Animation = new Animation(ropelinPyoriminen);
198        helikopteri.Animation.Start();
199        helikopteri.CanRotate = false;
200        helikopteri.IgnoresGravity = true;
201        AddCollisionHandler(helikopteri, HelikopteriTormaa);
202        helikopteri.IgnoresCollisionResponse = true;
203        //helikopteri.Tag("kopteri");
204        Add(helikopteri);
205
206        AddCollisionHandler(helikopteri, "ohjus", OhjusTormaa);
207        AddCollisionHandler(helikopteri, "oikeaReuna", TormaaMaaliin);
208        // AddCollisionHandler(helikopteri, ohjus, OhjusTormaa);
209    }
210
211    void TormaaMaaliin(PhysicsObject tormaaja, PhysicsObject kohde)
212    {
213        if (laukaisijoitaTuhottuLaskuri.Value == laukaisijoitaTuhottuLaskuri.MaxValue)
214        {
215            aikalaskuri.Stop();
216            //topLista.EnterAndShow(pisteLaskuri.Value);
217            //topLista.HighScoreWindow.Closed += AlkuValikko;
218            HighScoreWindow topIkkuna = new HighScoreWindow(
219                             "Parhaat pisteet",
220                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
221                             topLista, pisteLaskuri.Value);
222            topIkkuna.Closed += TallennaPisteet;
223            Add(topIkkuna);
224            topIkkuna.Right = Screen.Right - 10;
225        }
226    }
227
228    void TallennaPisteet(Window sender)
229    {
230        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
231        AlkuValikko();
232    }
233
234    void HelikopteriTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
235    {
236        tormaaja.Velocity = new Vector(tormaaja.Velocity.X, 0);
237    }
238    void HeitaKranaatti(PhysicsObject helikopteri)
239    {
240
241        if (saakoHeittaaKranaatin == false)
242        {
243            return;
244        }
245        Grenade kranu = new Grenade(3.0);
246        kranu.Position = new Vector (helikopteri.X, helikopteri.Y -20);
247        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
248        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
249        Add(kranu);
250        saakoHeittaaKranaatin = false;
251
252        //Timer.SingleShot(2.0, delegate { saakoHeittaaKranaatin = true; });
253        ampumislaskuri.Value = ampumislaskuri.MaxValue;
254        ampumislaskuri.AddOverTime(-ampumislaskuri.Value, ampumislaskuri.MaxValue);
255    }
256
257    void Laukaisija(double x, double y)
258    {
259        Vihu laukaisija = new Vihu(60.0, 60.0);
260        laukaisija.X = x;
261        laukaisija.Y = y;
262        laukaisija.Width = 100.0;
263        laukaisija.Height = 100.0;
264        laukaisija.Image = laukaisin;
265        laukaisija.Tag = ("vihollinen");
266        Add(laukaisija);
267        laukaisija.MakeStatic();
268
269
270
271        laukaisija.LaukaisuAjastin = new Timer();
272        laukaisija.LaukaisuAjastin.Interval = 2;
273        laukaisija.LaukaisuAjastin.Timeout += delegate { AmmuOhjus(laukaisija); } ;
274        laukaisija.LaukaisuAjastin.Start();
275
276        laukaisijoitaTuhottuLaskuri.MaxValue++;
277    }
278
279//    void PelaaUudelleen()
280//    {
281//        MultiSelectWindow pelaaUudelleenValikko = new MultiSelectWindow("Game Over", "Pelaa Uudelleen",
282//"Lopeta");
283//        Add(pelaaUudelleenValikko);
284
285//        pelaaUudelleenValikko.AddItemHandler(0, Aloitus);
286//        pelaaUudelleenValikko.AddItemHandler(1, Exit);
287//    }
288
289
290    void KranaattiOsui(IPhysicsObject laukaisija, Vector v)
291    {
292        if (laukaisija.Tag == "vihollinen")
293        {
294            // Vaihtaa laukaisijan tilalle rikkinäisen ja pysäyttää, ettei se enään ammu.
295            laukaisija.Image = laukaisinrikki;
296            if ((laukaisija as Vihu).Rikkinainen == false)
297            {
298                laukaisijoitaTuhottuLaskuri.Value++;
299            }
300            (laukaisija as Vihu).Riko();
301           
302           
303           
304        }
305    }
306
307   void AmmuOhjus(PhysicsObject laukaisija)
308    {
309        PhysicsObject ohjus = new PhysicsObject(40.0, 60.0);
310       
311        ohjus.Image = Ohjus;
312        ohjus.Position = laukaisija.Position;
313        Add(ohjus);
314        ohjus.Tag = "ohjus";
315        ohjusAani.Play();
316
317
318        Vector suunta = (ohjus.Position - helikopteri.Position).Normalize();
319        ohjus.Angle = suunta.Angle+Angle.FromDegrees(90);
320        ohjus.MaximumLifetime = TimeSpan.FromSeconds(6);
321        ohjus.MoveTo(helikopteri.Position, 600);
322        //ohjus.Hit(Vector.FromLengthAndAngle(2000, ohjus.Angle));
323
324    }
325
326    void OhjusTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
327    {
328        //tormaaja.Velocity = new Vector(tormaaja.Velocity.X, 0);
329        kohde.Destroy();
330        tormaaja.Destroy();
331        MessageDisplay.Add("Game Over");
332        Explosion rajahdys = new Explosion(200);
333        rajahdys.Position = helikopteri.Position;
334        Add(rajahdys);
335        Timer.SingleShot(1, PelaajaKuoli);
336       
337        //AlkuValikko(null);
338        //PelaaUudelleen();
339    }
340}
341public class Vihu : PhysicsObject
342{
343    public Timer LaukaisuAjastin;
344    public bool Rikkinainen = false;
345    public Vihu(double leveys, double korkeus)
346        : base(leveys, korkeus)
347    {
348       
349    }
350
351    public void Riko()
352    {
353        LaukaisuAjastin.Stop();
354        Rikkinainen = true;
355    }
356
357}
Note: See TracBrowser for help on using the repository browser.