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

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

Taustamusa peliin.

RevLine 
[9081]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{
[9101]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);
[9081]15
[9101]16    Image taustaKuva = LoadImage("Kentta2");
17    private Image[] ropelinPyoriminen = LoadImages("ropeli1", "ropeli2");
[9081]18    PhysicsObject helikopteri;
[9116]19    Image laukaisin = LoadImage("laukaisin");
20    PhysicsObject laukaisija;
[9122]21    Image laukaisinrikki = LoadImage("laukaisinrikki");
22    PhysicsObject ohjus;
23    Image Ohjus = LoadImage("ohjuspieni");
[9148]24    IntMeter pisteLaskuri;
[9154]25    bool saakoHeittaaKranaatin = true;
26    DoubleMeter ampumislaskuri;
27    IntMeter laukaisijoitaTuhottuLaskuri;
[9182]28    ScoreList topLista = new ScoreList(10, true, double.MaxValue);
[9165]29    PhysicsObject oikeaReuna;
[9192]30    Timer aikalaskuri;
31   
32 
33    public override void Begin()
34    {
35        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
36        TaustaMusa();
37        AlkuValikko();
[9101]38
[9192]39    }
[9116]40
[9192]41    void TaustaMusa()
[9081]42    {
[9148]43       
[9192]44        MediaPlayer.Play("Taustamusa");
45        MediaPlayer.IsRepeating = true;
46        MediaPlayer.Volume = 0.3;
[9148]47    }
48
[9192]49
50    void AlkuValikko()
[9165]51    {
52        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
53"Aloita peli", "Parhaat pisteet", "Lopeta");
54        Add(alkuValikko);
55
56        alkuValikko.AddItemHandler(0, Aloitus);
[9182]57        alkuValikko.AddItemHandler(1, PisteLista);
[9165]58        alkuValikko.AddItemHandler(2, Exit);
59    }
60
[9182]61    void PisteLista()
62    {
63        HighScoreWindow topIkkuna = new HighScoreWindow(
64                              "Parhaat pisteet",
65                              topLista);
[9192]66        topIkkuna.Closed += delegate { AlkuValikko(); };
[9182]67        Add(topIkkuna);
68
69    }
[9148]70    void Aloitus()
71    {
72        ClearAll();
[9165]73        IsPaused = false;
74        Camera.StayInLevel = true;
75        LaukaisijoitaTuhottuLaskuri();
[9154]76        LuoHelikopteri(-2500, 0.0);
[9101]77        Camera.ZoomToLevel();
[9165]78        Camera.Zoom(0.5);
79        Camera.Follow(helikopteri);
[9081]80        AsetaOhjaimet();
[9122]81        Laukaisija(-100, -450);
[9116]82        Laukaisija(-900, -450);
[9122]83        Laukaisija(500, -450);
84        Laukaisija(1400, -450);
[9081]85
[9165]86        LuoPistelaskuri();
87        LuoAmpumisLaskuri();
88        Level.Width = Window.Width * 3;
89        Level.Height = Window.Height;
90        Level.CreateBorders();
[9122]91
[9165]92        oikeaReuna = Level.CreateRightBorder();
93        oikeaReuna.Tag = "oikeaReuna";
94
[9116]95        Gravity = new Vector(0.0, -800.0);
96
[9101]97        Level.Background.Image = taustaKuva;
98        Level.Background.FitToLevel();
[9081]99        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
100    }
101
[9165]102    void PelaajaKuoli()
103    {
104        IsPaused = true;
105        helikopteri.Destroy();
[9182]106
107        PisteLista();
[9165]108    }
109
[9148]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);
[9165]122
[9192]123        aikalaskuri = new Timer();
[9165]124        aikalaskuri.Interval = 1.0;
125        aikalaskuri.Timeout += delegate { pisteLaskuri.AddValue(1); };
126        aikalaskuri.Start();
[9148]127    }
128
[9154]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!");
[9165]164
[9154]165    }
[9165]166
167   
[9081]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);
[9116]178
179        Keyboard.Listen(Key.Space, ButtonState.Pressed, HeitaKranaatti, "Pelaaja 1: Heitä kranaatti", helikopteri);
[9081]180    }
181
[9116]182
[9148]183
[9081]184    void AsetaNopeus(PhysicsObject helikopteri, Vector nopeus)
185    {
[9116]186        if (helikopteri.Y >= Level.Top - 50 && nopeus.Y >0) helikopteri.Velocity = new Vector(helikopteri.Velocity.X, 0);
187        else helikopteri.Velocity = nopeus;
[9081]188    }
189
[9116]190    void LuoHelikopteri(double x, double y)
[9081]191    {
[9101]192        helikopteri = new PhysicsObject(510, 133);
[9116]193        helikopteri.X = x;
194        helikopteri.Y = y;
[9101]195        ropelinPyoriminen = LoadImages("Helikopteri10", "Helikopteri11");
196        helikopteri.Animation = new Animation(ropelinPyoriminen);
197        helikopteri.Animation.Start();
[9116]198        helikopteri.CanRotate = false;
199        helikopteri.IgnoresGravity = true;
200        AddCollisionHandler(helikopteri, HelikopteriTormaa);
201        helikopteri.IgnoresCollisionResponse = true;
[9165]202        //helikopteri.Tag("kopteri");
[9081]203        Add(helikopteri);
[9116]204
[9126]205        AddCollisionHandler(helikopteri, "ohjus", OhjusTormaa);
[9165]206        AddCollisionHandler(helikopteri, "oikeaReuna", TormaaMaaliin);
[9126]207        // AddCollisionHandler(helikopteri, ohjus, OhjusTormaa);
[9081]208    }
[9116]209
[9165]210    void TormaaMaaliin(PhysicsObject tormaaja, PhysicsObject kohde)
211    {
[9192]212        if (laukaisijoitaTuhottuLaskuri.Value == laukaisijoitaTuhottuLaskuri.MaxValue)
[9165]213        {
[9192]214            aikalaskuri.Stop();
[9182]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);
[9192]223            topIkkuna.Right = Screen.Right - 10;
[9165]224        }
225    }
226
[9182]227    void TallennaPisteet(Window sender)
228    {
229        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
[9192]230        AlkuValikko();
[9182]231    }
232
[9116]233    void HelikopteriTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
234    {
235        tormaaja.Velocity = new Vector(tormaaja.Velocity.X, 0);
236    }
237    void HeitaKranaatti(PhysicsObject helikopteri)
238    {
[9154]239
240        if (saakoHeittaaKranaatin == false)
241        {
242            return;
243        }
[9116]244        Grenade kranu = new Grenade(3.0);
245        kranu.Position = new Vector (helikopteri.X, helikopteri.Y -20);
[9122]246        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
247        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
[9116]248        Add(kranu);
[9154]249        saakoHeittaaKranaatin = false;
250
251        //Timer.SingleShot(2.0, delegate { saakoHeittaaKranaatin = true; });
252        ampumislaskuri.Value = ampumislaskuri.MaxValue;
253        ampumislaskuri.AddOverTime(-ampumislaskuri.Value, ampumislaskuri.MaxValue);
[9116]254    }
255
256    void Laukaisija(double x, double y)
257    {
[9148]258        Vihu laukaisija = new Vihu(60.0, 60.0);
[9116]259        laukaisija.X = x;
260        laukaisija.Y = y;
261        laukaisija.Width = 100.0;
262        laukaisija.Height = 100.0;
263        laukaisija.Image = laukaisin;
[9122]264        laukaisija.Tag = ("vihollinen");
[9116]265        Add(laukaisija);
266        laukaisija.MakeStatic();
[9122]267
268
[9148]269
270        laukaisija.LaukaisuAjastin = new Timer();
271        laukaisija.LaukaisuAjastin.Interval = 2;
272        laukaisija.LaukaisuAjastin.Timeout += delegate { AmmuOhjus(laukaisija); } ;
273        laukaisija.LaukaisuAjastin.Start();
274
[9154]275        laukaisijoitaTuhottuLaskuri.MaxValue++;
[9116]276    }
[9122]277
[9165]278//    void PelaaUudelleen()
279//    {
280//        MultiSelectWindow pelaaUudelleenValikko = new MultiSelectWindow("Game Over", "Pelaa Uudelleen",
281//"Lopeta");
282//        Add(pelaaUudelleenValikko);
[9122]283
[9165]284//        pelaaUudelleenValikko.AddItemHandler(0, Aloitus);
285//        pelaaUudelleenValikko.AddItemHandler(1, Exit);
286//    }
[9148]287
288
[9122]289    void KranaattiOsui(IPhysicsObject laukaisija, Vector v)
290    {
[9148]291        if (laukaisija.Tag == "vihollinen")
292        {
[9154]293            // Vaihtaa laukaisijan tilalle rikkinäisen ja pysäyttää, ettei se enään ammu.
[9148]294            laukaisija.Image = laukaisinrikki;
[9154]295            if ((laukaisija as Vihu).Rikkinainen == false)
296            {
297                laukaisijoitaTuhottuLaskuri.Value++;
298            }
299            (laukaisija as Vihu).Riko();
300           
301           
302           
[9148]303        }
[9122]304    }
305
306   void AmmuOhjus(PhysicsObject laukaisija)
307    {
308        PhysicsObject ohjus = new PhysicsObject(40.0, 60.0);
[9126]309       
[9122]310        ohjus.Image = Ohjus;
311        ohjus.Position = laukaisija.Position;
312        Add(ohjus);
[9126]313        ohjus.Tag = "ohjus";
314       
[9122]315
[9126]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));
[9122]321
322    }
[9126]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);
[9165]333        Timer.SingleShot(1, PelaajaKuoli);
334       
335        //AlkuValikko(null);
336        //PelaaUudelleen();
[9126]337    }
[9081]338}
[9154]339public class Vihu : PhysicsObject
[9148]340{
341    public Timer LaukaisuAjastin;
[9154]342    public bool Rikkinainen = false;
[9148]343    public Vihu(double leveys, double korkeus)
344        : base(leveys, korkeus)
345    {
346       
347    }
[9154]348
349    public void Riko()
350    {
351        LaukaisuAjastin.Stop();
352        Rikkinainen = true;
353    }
354
[9148]355}
Note: See TracBrowser for help on using the repository browser.