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

Revision 8743, 10.7 KB checked in by npo17_7, 2 years ago (diff)

Iha just valmis ehkä vähä vaikee mut hyvä

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