source: 2013/30/RikoV/PerusPeli4/PerusPeli3/PerusPeli3/PerusPeli3.cs @ 4706

Revision 4706, 11.5 KB checked in by rikvalko, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class PerusPeli3 : PhysicsGame
10{
11    Image pelaajanKuva = LoadImage("kuva2");
12    Image taustakuva = LoadImage("bg");
13    Image granade = LoadImage("granade");
14    Image vihollisenkuva = LoadImage("poliisi2");
15    Image medkit = LoadImage("medkits");
16    Image ruoho = LoadImage("grass");
17    Image server = LoadImage("server");
18    Pyssymies pelaaja;
19    //Image taustakuva = LoadImage("kentta1");
20    Image muurinKuva = LoadImage("muuri");
21    IntMeter pisteLaskuri = new IntMeter(0);
22    EasyHighScore topLista = new EasyHighScore();
23
24    SoundEffect ak47 = LoadSoundEffect("ak-47");
25
26    int granaatti = 0;
27    int vihollislaskuri = 0;
28    int kenttänumero = 1;
29
30    public override void Begin()
31
32    {
33        alkuvalikko();
34        MediaPlayer.Play("");
35        IsFullScreen = true;
36    }
37
38    void aloitapeli()
39    {
40        ClearAll();
41        Mouse.IsCursorVisible = true;
42        //Level.BackgroundColor
43
44        Luokentta();
45        LuoPistelaskuri();
46        Camera.Follow(pelaaja);
47
48        Keyboard.Listen(Key.Escape, ButtonState.Pressed, pausevalikko, "Lopeta peli");
49
50        Keyboard.Listen(Key.Up, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, 80));
51        Keyboard.Listen(Key.Down, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, -80));
52        Keyboard.Listen(Key.Left, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(-80, 0));
53        Keyboard.Listen(Key.Right, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(80, 0));
54
55        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
56        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "Ammu aseella.", pelaaja.Ase);
57        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, heitagranaatti, "Heitä Granaatti.");
58    }
59
60    void seuraavakentta()
61    {
62        kenttänumero++;
63        aloitapeli();
64    }
65
66    void pausevalikko()
67    {
68        Pause();
69        MultiSelectWindow pausevalikko = new MultiSelectWindow("taukovalikko", "Jatka peliä", "lopeta");
70        Add(pausevalikko);
71        pausevalikko.AddItemHandler(0, Pause);
72        pausevalikko.AddItemHandler(1, alkuvalikko);
73           
74    }
75
76    void alkuvalikko()
77    {
78        ClearAll();
79        IsPaused = false;
80        Level.BackgroundColor = Color.Black;
81        Level.Background.Image = taustakuva;
82        Level.Background.FitToLevel();
83        MultiSelectWindow alkuValikko = new MultiSelectWindow("Alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
84        alkuValikko.DefaultCancel = 2;
85        alkuValikko.Color = Color.Transparent;
86        alkuValikko.SelectionColor = Color.Red;
87        Add(alkuValikko);
88
89        pisteLaskuri.Value = 0;
90        kenttänumero = 1;
91       
92        alkuValikko.AddItemHandler(0, aloitapeli);
93        alkuValikko.AddItemHandler(1, ParhaatPisteet);
94        alkuValikko.AddItemHandler(2, Exit);
95    }
96
97    void ParhaatPisteet()
98    {
99        topLista.Show();
100        topLista.HighScoreWindow.Closed += delegate(Window w) { alkuvalikko(); };
101    }
102
103    void LuoPistelaskuri()
104    {
105        Label pisteNaytto = new Label();
106        pisteNaytto.X = Screen.Left + 100;
107        pisteNaytto.Y = Screen.Top - 100;
108        pisteNaytto.TextColor = Color.Black;
109        pisteNaytto.Color = Color.White;
110
111        pisteNaytto.BindTo(pisteLaskuri);
112        Add(pisteNaytto);
113    }
114
115    void KuunteleLiiketta(AnalogState hiirenTila)
116    {
117        pelaaja.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
118    }
119
120    void Liikutapelaajaa(PhysicsObject pelaaja, Vector suunta)
121    {
122        pelaaja.Hit(suunta);
123    }
124
125    void Luokentta()
126    {
127
128        vihollislaskuri = 0;
129       
130        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta"+kenttänumero);
131        //ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta6");
132
133
134        ruudut.SetTileMethod(Color.Black, LuoTaso);
135        ruudut.SetTileMethod("4CFF00", LuoPelaaja);
136        ruudut.SetTileMethod("FF0000", luovihollinen);
137        ruudut.SetTileMethod("0094FF", luoserver);
138        ruudut.SetTileMethod("FFD800", luohplisaaja);
139        ruudut.SetTileMethod("FF00DC", luogranaatti);
140        ruudut.Execute(60, 60);
141        Level.Background.Image = ruoho;
142        Level.Background.TileToLevel();
143
144
145        LuoElamaLaskuri();
146    }
147
148    void LuoElamaLaskuri()
149    {
150        ProgressBar elamaPalkki = new ProgressBar(150, 20);
151        elamaPalkki.X = Screen.Left + 150;
152        elamaPalkki.Y = Screen.Top - 20;
153        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
154        Add(elamaPalkki);
155    }
156
157    void ElamaLoppui()
158    {
159        MessageDisplay.Add("Elämät loppuivat, voi voi.");
160    }
161
162    void luovihollinen(Vector paikka, double levelys, double korkeus)
163    {
164        Pyssymies vihollinen = new Pyssymies(levelys, korkeus, 1);
165        vihollinen.Shape = Shape.Circle;
166        vihollinen.Position = paikka;
167        vihollinen.Image = vihollisenkuva;
168        vihollinen.LinearDamping = 0.8;
169        vihollinen.Tag = "vihollinen";
170        vihollinen.ElamaLaskuri.LowerLimit += delegate { vihollinenkuoli(vihollinen); };
171        Add(vihollinen);
172        vihollinen.Ase.ProjectileCollision = vihollisenAmmusOsui;
173
174        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
175        seuraajanAivot.Speed = 300;     
176        seuraajanAivot.DistanceFar = 600;
177        seuraajanAivot.DistanceClose = 200;
178        seuraajanAivot.StopWhenTargetClose = true;
179        seuraajanAivot.TurnWhileMoving = true;
180
181
182
183        vihollinen.Brain = seuraajanAivot;
184
185        Timer ajastin = new Timer();
186        ajastin.Interval = 1.0;
187        ajastin.Timeout += delegate {
188            if (!vihollinen.IsDestroyed)
189                vihollinen.Ase.Shoot();
190        };
191        ajastin.Start();
192
193        vihollislaskuri++;
194    }
195
196    void LuoPelaaja(Vector paikka, double levelys, double korkeus)
197    {
198        pelaaja = new Pyssymies(levelys, korkeus, 3);
199        pelaaja.Shape = Shape.Circle;
200        pelaaja.Position = paikka;
201        pelaaja.Image = pelaajanKuva;
202        pelaaja.LinearDamping = 0.8;
203        pelaaja.Tag = "pelaaja";
204        Add(pelaaja);
205        pelaaja.Ase.AttackSound = ak47;
206        pelaaja.Ase.ProjectileCollision = pelaajanAmmusOsui;
207        pelaaja.ElamaLaskuri.LowerLimit += pelaajakuoli;
208
209        AddCollisionHandler(pelaaja, "medkit", osuumedkit);
210        AddCollisionHandler(pelaaja, "granade", osuugranaatti);
211
212    }
213
214    void vihollinenkuoli(Pyssymies vihollinen)
215    {
216        vihollislaskuri--;
217
218        Explosion rajahdys = new Explosion(50);
219        rajahdys.Position = vihollinen.Position;
220        Add(rajahdys);
221
222        if (vihollislaskuri == 0)
223        {
224           
225        }
226    }
227
228    void pelaajakuoli()
229    {
230        Label teksti = new Label("Game Over");
231        Add(teksti);
232        teksti.TextColor = Color.Red;
233        //Timer.SingleShot(3, alkuvalikko);
234        topLista.EnterAndShow(pisteLaskuri.Value);
235        topLista.HighScoreWindow.Closed += delegate(Window w) { alkuvalikko(); };
236    }
237
238    void osuumedkit(PhysicsObject pelaajaolio, PhysicsObject kohde)
239    {
240        kohde.Destroy();
241        pelaaja.ElamaLaskuri.Value += 2;
242
243    }
244
245    void osuugranaatti(PhysicsObject pelaajaolio, PhysicsObject kohde)
246    {
247        kohde.Destroy();
248        granaatti += 1;
249    }
250
251    void vihollisenAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
252    {
253        ammus.Destroy();
254        if (kohde is Pyssymies && kohde.Tag=="pelaaja")
255        {
256            ((Pyssymies)kohde).ElamaLaskuri.Value--;
257        }
258    }
259
260    void pelaajanAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
261    {
262        ammus.Destroy();
263        if (kohde is Pyssymies && kohde.Tag == "vihollinen")
264        {
265            ((Pyssymies)kohde).ElamaLaskuri.Value--;
266            pisteLaskuri.Value += 1;
267        }
268        if (kohde.Tag == "server")
269        {
270            kohde.Destroy();
271            Explosion rajahdys = new Explosion(2500);
272            rajahdys.Position = kohde.Position;
273            Add(rajahdys);
274            Timer.SingleShot(2, seuraavakentta);
275        }
276    }
277
278    void LuoTaso(Vector paikka, double leveys, double korkeus)
279    {
280        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
281        taso.Position = paikka;
282        taso.Image = muurinKuva;
283        taso.CollisionIgnoreGroup = 1;
284        taso.Color = Color.Brown;
285        Add(taso);
286    }
287
288    void luohplisaaja(Vector paikka, double leveys, double korkeus)
289    {
290        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
291        taso.Position = paikka;
292        taso.Image = medkit;
293        taso.CollisionIgnoreGroup = 1;
294        taso.Tag = "medkit";
295        taso.IgnoresCollisionResponse = false;
296        Add(taso);
297    }
298
299    void luogranaatti(Vector paikka, double leveys, double korkeus)
300    {
301        PhysicsObject taso = PhysicsObject.CreateStaticObject(20, 20);
302        taso.Position = paikka;
303        taso.Image = granade;
304        taso.CollisionIgnoreGroup = 1;
305        taso.Tag = "granade";
306        taso.IgnoresCollisionResponse = false;
307        Add(taso);
308    }
309
310    void luoserver(Vector paikka, double leveys, double korkeus)
311    {
312        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
313        taso.Position = paikka;
314        taso.Image = server;
315        taso.CollisionIgnoreGroup = 1;
316        taso.Color = Color.Brown;
317        taso.Tag = "server";
318        Add(taso);
319    }
320
321    void heitagranaatti()
322    {
323        if (granaatti > 0)
324        {
325            granaatti--;
326            PhysicsObject granaattiolio = new PhysicsObject(20, 20, Shape.Circle);
327            Add(granaattiolio);
328            granaattiolio.Image = granade;
329            granaattiolio.Position = pelaaja.Position;
330            granaattiolio.LinearDamping = 0.98;
331            granaattiolio.Hit(pelaaja.Angle.GetVector() * 500);
332            granaattiolio.LifetimeLeft = TimeSpan.FromSeconds(2);
333            granaattiolio.Destroyed += delegate
334            {
335                Explosion rajahdys = new Explosion(150);
336                rajahdys.Position = granaattiolio.Position;
337                rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta)
338                {
339                    if (kohde is Pyssymies)
340                    {
341                        ((Pyssymies)kohde).ElamaLaskuri.Value--;
342                    }
343                };
344                Add(rajahdys);
345            };
346        }
347    }
348
349
350    void Ammu(AssaultRifle ase)
351    {
352        PhysicsObject ammus = ase.Shoot();
353
354        if (ammus != null)
355        {
356            //ammus.Size *= 50000000000000;
357            //ammus.Image = ...
358            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
359        }
360
361
362    }
363}
364
365class Pyssymies : PhysicsObject
366{
367    private IntMeter elamaLaskuri;
368    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
369
370    public AssaultRifle Ase;
371
372
373    public Pyssymies(double leveys, double korkeus, int elamat)
374        : base(leveys, korkeus)
375    {
376        elamaLaskuri = new IntMeter(elamat, 0, elamat);
377        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
378
379        Ase = new AssaultRifle(30, 10);
380        Ase.Ammo.Value = 1000;
381        Ase.IsVisible = false;
382        Add(Ase);
383
384}
385
386    }
Note: See TracBrowser for help on using the repository browser.