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

Revision 8778, 11.1 KB checked in by npo17_7, 3 years ago (diff)

Kaikki valmista

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