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

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