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

Revision 8804, 11.4 KB checked in by npo17_7, 2 years ago (diff)

Vähän vaikeampi ja jne kaikkee kivaa

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