source: 2017/24/MatiasK/SimpleGame/SimpleGame/SimpleGame/SimpleGame.cs @ 8805

Revision 8805, 11.5 KB checked in by npo17_7, 2 years ago (diff)

Hyvä minä

RevLine 
[8581]1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
[8743]9public class Astropoint : PhysicsGame
[8581]10 
11{
12    PhysicsObject pelaaja1;
13    List<Label> valikonKohdat;
[8643]14    Image olionKuva = LoadImage("Spaceship");
[8678]15    Label Teksti;
[8691]16    Timer ajastin;
[8743]17    LaserGun pelaajan1Ase;
[8805]18    //Label Name;
[8614]19
[8581]20    public override void Begin()
21    {
[8678]22        Teksti = new Label(500, 200);
23        Teksti.TextColor = Color.Blue;
[8691]24        Teksti.TextScale = new Vector(2, 2);
[8678]25        Teksti.X = 0;
26        Teksti.Y = 0;
27        Add(Teksti);
28        pelaaja1 = new PlatformCharacter(200, 100);
29        AddCollisionHandler(pelaaja1, "Vihu", VihollinenOsuuPelaajaan);
[8581]30        Add(pelaaja1);
[8643]31        pelaaja1.Image = olionKuva;
[8614]32        //Valikko();
[8743]33       
[8778]34        LuoReuna(1920, 50, 0, Level.Top + 170);
35        LuoReuna(1920, 10, 0, Level.Bottom + -150);
36        LuoReuna(95, 2020, 1010, Level.Right);
37        LuoReuna(95, 2020, -1010, Level.Left);
[8743]38        LuoPistelaskuri();
[8581]39
[8678]40        Level.Background.CreateStars();
[8581]41
[8678]42        Level.Background.CreateStars(10000);
[8581]43
[8805]44        Label tekstikentta = new Label(205.0, 20.0, "Beat the score 1056");
[8778]45        Add(tekstikentta);
[8581]46
[8778]47        tekstikentta.X = Screen.Left + 130;
48        tekstikentta.Y = Screen.Top - 150;
[8804]49
[8778]50       
51        tekstikentta.Color = Color.Gold;
52        tekstikentta.TextColor = Color.Maroon;
53        tekstikentta.BorderColor = Color.Green;
54
[8678]55        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Exit");
[8614]56
[8778]57        IsFullScreen = true;
[8678]58
59        Keyboard.Listen(Key.C, ButtonState.Pressed, ShowControlHelp, "Control help menu");
60
61        MediaPlayer.IsRepeating = true;
62
[8614]63        MultiSelectWindow alkuValikko = new MultiSelectWindow("Menu",
[8691]64"Start game", "Test flying", "Exit");
[8581]65        Add(alkuValikko);
66
[8614]67        alkuValikko.AddItemHandler(0, StartGame);
68        alkuValikko.AddItemHandler(1, BestScore);
[8581]69        alkuValikko.AddItemHandler(2, Exit);
[8717]70        alkuValikko.SetButtonColor(Color.DarkGreen);
[8581]71        alkuValikko.DefaultCancel = 3;
72
73        alkuValikko.DefaultCancel = -1;
74
[8717]75        alkuValikko.Color = Color.Emerald;
[8581]76
[8743]77        //LisaaVihollisia2();
[8717]78
[8581]79        Mouse.IsCursorVisible = true;
80
[8743]81        pelaajan1Ase = new LaserGun(50, 50);
82        pelaajan1Ase.IsVisible = false;
[8643]83
[8805]84        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Shoot", pelaajan1Ase);
[8643]85
[8691]86        MediaPlayer.IsRepeating = true;
[8643]87
[8796]88       
[8804]89       
[8691]90
91
[8643]92        //Ammusten määrä aluksi:
[8678]93        pelaajan1Ase.Ammo.Value = 100000000;
[8643]94
95        //Mitä tapahtuu kun ammus osuu johonkin?
96        pelaajan1Ase.ProjectileCollision = AmmusOsui;
97
98        pelaaja1.Add(pelaajan1Ase);
99
[8743]100        //Mouse.ListenMovement(0.0, Tahtaa, "Aim");
101
[8717]102        //Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
[8581]103
[8691]104        MediaPlayer.Play("pixel_space-G4mMoEkO8gQ_fmt43");
[8581]105
[8643]106        const double NOPEUS = 500;
[8581]107        Keyboard.Listen(Key.A, ButtonState.Down,
[8614]108          LiikutaPelaajaa, null, new Vector(-NOPEUS, 0));
[8581]109        Keyboard.Listen(Key.D, ButtonState.Down,
[8614]110          LiikutaPelaajaa, null, new Vector(NOPEUS, 0));
[8581]111        Keyboard.Listen(Key.W, ButtonState.Down,
[8691]112          LiikutaPelaajaa, null, new Vector(0, 50));
[8581]113        Keyboard.Listen(Key.S, ButtonState.Down,
[8691]114          LiikutaPelaajaa, null, new Vector(0, -50));
[8614]115        Keyboard.Listen(Key.A, ButtonState.Released,
116          LiikutaPelaajaa, null, Vector.Zero);
117        Keyboard.Listen(Key.D, ButtonState.Released,
118          LiikutaPelaajaa, null, Vector.Zero);
119        Keyboard.Listen(Key.W, ButtonState.Released,
120          LiikutaPelaajaa, null, Vector.Zero);
121        Keyboard.Listen(Key.S, ButtonState.Released,
122          LiikutaPelaajaa, null, Vector.Zero);
[8743]123        Keyboard.Listen(Key.F, ButtonState.Pressed, Pause, "Pause");
[8691]124        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, HeitaKranaatti, "Granade", pelaaja1);
[8743]125        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaAlusta, "Reset");
126        Keyboard.Listen(Key.Space, ButtonState.Pressed, Explode, "Do not press");
[8778]127       
[8678]128
[8581]129    }
130
131    void LiikutaPelaajaa(Vector vektori)
132    {
[8614]133       pelaaja1.Hit(vektori);
[8581]134    }
135
[8691]136    void AloitaAlusta()
137    {
138        ClearAll();
139        Begin();
140    }
141
142    void Explode()
143    {
144        pelaaja1.Destroy();       
145        int pMaxMaara = 200;
146        // Alustetaan räjähdysjärjestelmä
147        // Parametrit:
148        // * kuva: mitä tekstuuria räjähdyksen
149        //   hiukkasten halutaan käyttävän
150        // * pMaxMaara: räjähdyksen käyttämien
151        //   hiukkasten eli partikkeleiden maksimimäärä
152        ExplosionSystem rajahdys =
153          new ExplosionSystem(LoadImage("Boom"), pMaxMaara);
154
155        // Lisätään järjestelmä peliin
156        Add(rajahdys);
157
158        rajahdys.AddEffect(pelaaja1.X, pelaaja1.Y, 1);
159    }
160
161    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
162    {
163        rajahdyksenKohde.Destroy();
[8743]164        pisteLaskuri.AddValue(1);
165
[8691]166    }
167
[8743]168    IntMeter pisteLaskuri;
169
170    void LuoPistelaskuri()
171    {
172        pisteLaskuri = new IntMeter(0);
173
174        Label pisteNaytto = new Label();
175        pisteNaytto.X = Screen.Left + 100;
176        pisteNaytto.Y = Screen.Top - 100;
177        pisteNaytto.TextColor = Color.Black;
178        pisteNaytto.Color = Color.White;
179
180        pisteNaytto.BindTo(pisteLaskuri);
181        Add(pisteNaytto);
182    }
183
[8691]184    void HeitaKranaatti(PhysicsObject pelaaja)
185    {
186        Grenade kranu = new Grenade(4.0);
[8803]187        pelaaja.Throw(kranu, Angle.FromDegrees(0), 10000);
[8796]188        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
189       
190        kranu.Explosion.AddShockwaveHandler("Vihu", KranaattiOsui);
[8691]191    }
192
[8678]193    void VihollinenOsuuPelaajaan(PhysicsObject pelaaja1, PhysicsObject Vihu)
194    {
195        pelaaja1.Destroy();
196        Teksti.Text = "You died";
197    }
198    void LuoReuna(double leveys, double korkeus, double x, double y)
199    {
200        PhysicsObject reunapalikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        reunapalikka.X = x;
202        reunapalikka.Y = y;
203        reunapalikka.Tag = "seina";
[8796]204        reunapalikka.IgnoresExplosions = true;
[8678]205        Add(reunapalikka);
206    }
207
[8717]208   
[8581]209
[8614]210    void StartGame()
[8581]211    {
[8743]212        ajastin = new Timer();
213        ajastin.Interval = 1.5;
[8778]214        ajastin.Timeout += delegate { LisaaVihollisia(); if (ajastin.Interval > 0.1) ajastin.Interval -= 0.001; };
[8805]215             
[8743]216
217        ajastin.Timeout += LisaaVihollisia2;
[8691]218        ajastin.Start();
[8581]219    }
220
[8643]221    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
222    {
[8678]223        ammus.Destroy();
[8717]224        if (kohde.Tag.Equals("Vihu") == false) return;
[8691]225        int pMaxMaara = 200;
226        // Alustetaan räjähdysjärjestelmä
227        // Parametrit:
228        // * kuva: mitä tekstuuria räjähdyksen
229        //   hiukkasten halutaan käyttävän
230        // * pMaxMaara: räjähdyksen käyttämien
231        //   hiukkasten eli partikkeleiden maksimimäärä
232        ExplosionSystem rajahdys =
233          new ExplosionSystem(LoadImage("Boom"), pMaxMaara);
234
235        // Lisätään järjestelmä peliin
236        Add(rajahdys);
237
238        rajahdys.AddEffect(kohde.X, kohde.Y, 1);
239
[8678]240        if (kohde == null) return;
[8743]241
[8691]242       
[8743]243
[8678]244        Vihu vihu = (Vihu)kohde;
245        vihu.ElamaLaskuri.Value--;
[8743]246        if (vihu.ElamaLaskuri.Value == 0)
247        {
248            pisteLaskuri.AddValue(1); vihu.Destroy();
249        }
[8778]250        //MessageDisplay.Add("Hit Enemy");
[8643]251    }
252
253    void AmmuAseella(LaserGun ase)
254    {
[8743]255        if (IsPaused) return;
256        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
257        pelaajan1Ase.Angle = suunta.Angle;
258
[8643]259        PhysicsObject ammus = ase.Shoot();
[8678]260        ammus.Tag = "Luoti";
[8643]261        if (ammus != null)
262        {
[8678]263            ammus.Size *= 10;
[8643]264            //ammus.Image = ...
265            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
266        }
267    }
268
[8614]269    void BestScore()
[8581]270    {
[8805]271               
[8581]272    }
273
[8743]274    //void Tahtaa(AnalogState hiirenLiike)
275    //{
276    //    Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
277    //    pelaajan1Ase.Angle = suunta.Angle;
278    //}
279
[8717]280    void Valikko()
281    {
282        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
[8691]283
[8717]284        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
[8691]285
[8805]286        //Name = new Label(200.0, 50.0, "Astropoint(Beta)");
287        //Add(Name);
288
289        //Name.X = Screen.Left + 960;
290        //Name.Y = Screen.Top - 10;
291
292        //Name.Color = Color.BlueGray;
293        //Name.TextColor = Color.BloodRed;
294        //Name.BorderColor = Color.DarkGray;
295
[8717]296        Label kohta1 = new Label("Start Game");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
297        kohta1.Position = new Vector(0, 40);
298
299        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
300
301        Label kohta2 = new Label("Test flying");
302        kohta2.Position = new Vector(0, 0);
303        valikonKohdat.Add(kohta2);
304
305        Label kohta3 = new Label("Exit");
306        kohta3.Position = new Vector(0, -40);
307        valikonKohdat.Add(kohta3);
308
309        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
310        foreach (Label valikonKohta in valikonKohdat)
311        {
312            //Add(valikonKohta);
313        }
314        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, StartGame, null);
315        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, BestScore, null);
316        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
317    }
318
[8678]319    void LisaaVihollisia()
320    {
321        Vihu vihollinen = new Vihu(50, 50);
322        vihollinen.X = 900;
323        vihollinen.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
324        AddCollisionHandler(vihollinen, "Luoti", LuotiOsuuViholliseen);
325        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
326        vihollinen.Tag = "Vihu";
327        vihollinen.Brain = seuraajanAivot;
[8743]328        vihollinen.Shape = Shape.Hexagon;
[8691]329        vihollinen.Color = Color.Red;
[8678]330        Add(vihollinen);
331    }
332
[8581]333     void ValikossaLiikkuminen(AnalogState hiirenTila)
334        {
335            foreach (Label kohta in valikonKohdat)
336            {
337                if (Mouse.IsCursorOn(kohta))
338                {
[8717]339                    kohta.TextColor = Color.Charcoal;
[8581]340                }
341                else
342                {
[8717]343                    kohta.TextColor = Color.Aqua;
[8581]344                }
345
346            }
347        }
348
[8743]349    void LisaaVihollisia2()
350    {
351        Vihu vihollinen = new Vihu(50, 50);
352        vihollinen.X = -900;
353        vihollinen.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
354        AddCollisionHandler(vihollinen, "Luoti", LuotiOsuuViholliseen);
355        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
356        vihollinen.Tag = "Vihu";
357        vihollinen.Brain = seuraajanAivot;
358        vihollinen.Shape = Shape.Hexagon;
359        vihollinen.Color = Color.Red;
360        Add(vihollinen);
361    }
362
[8678]363    void LuotiOsuuViholliseen(PhysicsObject vihollinen, PhysicsObject luoti)
364    {
365
366
367    }
368
[8581]369}
[8678]370class Vihu : PhysicsObject
371{
[8805]372    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
[8678]373    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
374
375    public Vihu(double leveys, double korkeus)
376        : base(leveys, korkeus)
377    {
378        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
379    }
380}
Note: See TracBrowser for help on using the repository browser.