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

Revision 8796, 11.2 KB checked in by npo17_7, 2 years ago (diff)

Kaikki 100% valmis

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