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

Revision 8691, 9.1 KB checked in by npo17_7, 4 years ago (diff)

Melkein valmis, pahikset hienonnettu ja kranaatteja.

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