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

Revision 9182, 11.0 KB checked in by npo17_56, 2 years ago (diff)

Pistetaulukko toimimaan.

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