source: 2017/24/MatiasK/Astropoint/Astropoint/Astropoint/Astropoint.cs @ 8808

Revision 8808, 11.3 KB checked in by npo17_7, 2 years ago (diff)

All good

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    PhysicsObject pelaaja1;
12    List<Label> valikonKohdat;
13    Image olionKuva = LoadImage("Spaceship");
14    Label Teksti;
15    Timer ajastin;
16    LaserGun pelaajan1Ase;
17    //Label Name;
18
19
20    public override void Begin()
21    {
22        Teksti = new Label(500, 200);
23        Teksti.TextColor = Color.Blue;
24        Teksti.TextScale = new Vector(2, 2);
25        Teksti.X = 0;
26        Teksti.Y = 0;
27        Add(Teksti);
28        pelaaja1 = new PlatformCharacter(200, 100);
29        AddCollisionHandler(pelaaja1, "Vihu", VihollinenOsuuPelaajaan);
30        Add(pelaaja1);
31        pelaaja1.Image = olionKuva;
32        //Valikko();
33
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);
38        LuoPistelaskuri();
39
40        Level.Background.CreateStars();
41
42        Level.Background.CreateStars(10000);
43
44        Label tekstikentta = new Label(205.0, 20.0, "Beat the score 1056");
45        Add(tekstikentta);
46
47        tekstikentta.X = Screen.Left + 130;
48        tekstikentta.Y = Screen.Top - 150;
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        //Ammusten määrä aluksi:
93        pelaajan1Ase.Ammo.Value = 100000000;
94
95        //Mitä tapahtuu kun ammus osuu johonkin?
96        pelaajan1Ase.ProjectileCollision = AmmusOsui;
97
98        pelaaja1.Add(pelaajan1Ase);
99
100        //Mouse.ListenMovement(0.0, Tahtaa, "Aim");
101
102        //Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
103
104        MediaPlayer.Play("pixel_space-G4mMoEkO8gQ_fmt43");
105
106        const double NOPEUS = 500;
107        Keyboard.Listen(Key.A, ButtonState.Down,
108          LiikutaPelaajaa, null, new Vector(-NOPEUS, 0));
109        Keyboard.Listen(Key.D, ButtonState.Down,
110          LiikutaPelaajaa, null, new Vector(NOPEUS, 0));
111        Keyboard.Listen(Key.W, ButtonState.Down,
112          LiikutaPelaajaa, null, new Vector(0, 50));
113        Keyboard.Listen(Key.S, ButtonState.Down,
114          LiikutaPelaajaa, null, new Vector(0, -50));
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);
123        Keyboard.Listen(Key.F, ButtonState.Pressed, Pause, "Pause");
124        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, HeitaKranaatti, "Granade", pelaaja1);
125        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaAlusta, "Reset");
126        Keyboard.Listen(Key.Space, ButtonState.Pressed, Explode, "Do not press");
127
128
129    }
130
131    void LiikutaPelaajaa(Vector vektori)
132    {
133        pelaaja1.Hit(vektori);
134    }
135
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();
164        pisteLaskuri.AddValue(1);
165
166    }
167
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
184    void HeitaKranaatti(PhysicsObject pelaaja)
185    {
186        Grenade kranu = new Grenade(4.0);
187        pelaaja.Throw(kranu, Angle.FromDegrees(0), 10000);
188        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
189
190        kranu.Explosion.AddShockwaveHandler("Vihu", KranaattiOsui);
191    }
192
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";
204        reunapalikka.IgnoresExplosions = true;
205        Add(reunapalikka);
206    }
207
208
209
210    void StartGame()
211    {
212        ajastin = new Timer();
213        ajastin.Interval = 1.5;
214        ajastin.Timeout += delegate { LisaaVihollisia(); if (ajastin.Interval > 0.1) ajastin.Interval -= 0.001; };
215
216
217        ajastin.Timeout += LisaaVihollisia2;
218        ajastin.Start();
219    }
220
221    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
222    {
223        ammus.Destroy();
224        if (kohde.Tag.Equals("Vihu") == false) return;
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
240        if (kohde == null) return;
241
242
243
244        Vihu vihu = (Vihu)kohde;
245        vihu.ElamaLaskuri.Value--;
246        if (vihu.ElamaLaskuri.Value == 0)
247        {
248            pisteLaskuri.AddValue(1); vihu.Destroy();
249        }
250        //MessageDisplay.Add("Hit Enemy");
251    }
252
253    void AmmuAseella(LaserGun ase)
254    {
255        if (IsPaused) return;
256        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
257        pelaajan1Ase.Angle = suunta.Angle;
258
259        PhysicsObject ammus = ase.Shoot();
260        ammus.Tag = "Luoti";
261        if (ammus != null)
262        {
263            ammus.Size *= 10;
264            //ammus.Image = ...
265            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
266        }
267    }
268
269    void BestScore()
270    {
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        //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
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(10, 0, 10);
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.