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

Revision 9192, 11.3 KB checked in by npo17_56, 6 years ago (diff)

Taustamusa peliin.

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