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

Revision 9165, 10.2 KB checked in by npo17_56, 3 years ago (diff)

Oikeareuna, Pistetaulukko

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