source: 2017/24/ViljamiM/Zombodroid/Zombodroid/Zombodroid/Zombodroid.cs @ 8802

Revision 8802, 12.2 KB checked in by npo17_18, 2 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 Zombodroid : PhysicsGame
10{
11    Viho matti;
12    SoundEffect tyhja = LoadSoundEffect("clikki");
13    SoundEffect aani = LoadSoundEffect("pyssyaani");
14    bool vasenPyssy = true;
15    List<Viho> vihut = new List<Viho>();
16    List<PhysicsObject> nakokentat = new List<PhysicsObject>();
17    Image tsompinkuva = LoadImage("zombi");
18    Image puunkuva = LoadImage("puu");
19    Image kivenkuva = LoadImage("kivi");
20    Image rinsessankuva = LoadImage("rinsessa2");
21    PhysicsObject prinsessa;
22    Image taustakuva = LoadImage("mappi2");
23    public override void Begin()
24    {
25
26        MediaPlayer.Play("mussiiikki");
27        MediaPlayer.IsRepeating = true;
28
29
30
31        Mappi();
32        AsetaOhjaimet();
33        Camera.Follow(matti);
34
35        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
36
37        IsMouseVisible = true;
38
39        AlkuValikko();
40
41
42
43    }
44    void AsetaOhjaimet()
45    {
46        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
47
48        Keyboard.Listen(Key.A, ButtonState.Down,
49   LiikutaPelaajaa, null, new Vector(-220, 0));
50        Keyboard.Listen(Key.D, ButtonState.Down,
51          LiikutaPelaajaa, null, new Vector(220, 0));
52        Keyboard.Listen(Key.W, ButtonState.Down,
53          LiikuEteen, null);
54        Keyboard.Listen(Key.S, ButtonState.Down,
55          LiikutaPelaajaa, null, new Vector(0, -220));
56
57        Keyboard.Listen(Key.A, ButtonState.Released,
58   LiikutaPelaajaa, null, Vector.Zero);
59        Keyboard.Listen(Key.D, ButtonState.Released,
60         LiikutaPelaajaa, null, Vector.Zero);
61        Keyboard.Listen(Key.W, ButtonState.Released,
62          LiikutaPelaajaa, null, Vector.Zero);
63        Keyboard.Listen(Key.S, ButtonState.Released,
64          LiikutaPelaajaa, null, Vector.Zero);
65
66        Keyboard.Listen(Key.R, ButtonState.Released, matti.LataaLipas
67         , null);
68
69        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, null);
70
71
72    }
73    void AsetaHenkilot(Vector paikka, double leveys, double korkeus)
74    {
75       
76
77        matti = new Viho(75, 75);
78        matti.Image = LoadImage("oikeeukkeli");
79        matti.Tag = "pelaaja";
80        matti.Y = paikka.Y;
81        matti.X = paikka.X;
82        matti.CollisionIgnoreGroup = 1;
83
84        Add(matti, 3);
85        matti.CanRotate = false;
86        double laserinpituus = 1000;
87        GameObject laser = new GameObject(2, laserinpituus);
88        //laser.X = matti.X;
89        laser.Y = laserinpituus / 2 + 16;
90        laser.Color = new Color(Color.Red, 40);
91        matti.Add(laser);
92        AddCollisionHandler(matti, "nakoalue", VihuNakeeMatin);
93        AddCollisionHandler(matti, "tsompi", VihuOsuuMattiin);
94       
95    }
96
97    void LiikutaPelaajaa(Vector vektori)
98    {
99        matti.Move(vektori);
100    }
101    void Tahtaa(AnalogState hiirenLiike)
102    {
103        Vector suunta = (Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize();
104        matti.Angle = suunta.Angle - Angle.RightAngle;
105    }
106    void Ammu()
107    {
108
109        if (matti.Hengissa == false) return;
110        if (matti.LippaassaPatruunaa == false)
111        {
112            tyhja.Play();
113            if (matti.LatausKesken) MessageDisplay.Add("Ladataan...");
114            else MessageDisplay.Add("tyhjä");
115
116            return;
117
118
119        }
120        aani.Play();
121
122        PhysicsObject panos = new PhysicsObject(5.0, 5.0);
123        panos.CollisionIgnoreGroup = 1;
124        Vector position;
125        if (vasenPyssy)
126        {
127             position= matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 22).RightNormal;
128            vasenPyssy = false;
129        }
130        else
131        {
132            position = matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * -22).RightNormal;
133            vasenPyssy = true;
134        }
135        panos.Position = position;
136
137        panos.IgnoresCollisionWith(matti);
138        panos.MaximumLifetime = new TimeSpan(0, 0, 2);
139        Add(panos);
140        panos.Velocity = ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 2000;
141        matti.PanosLaskuri.Value--;
142        panos.Tag = "luoti";
143    }
144
145    private void TeeRajahdys(Vector position)
146    {
147        int pMaxMaara = 50;
148        ExplosionSystem rajahdys =
149          new ExplosionSystem(LoadImage("partikkeli2"), pMaxMaara);
150        // Lisätään järjestelmä peliin
151        rajahdys.MaxScale = 20;
152        rajahdys.MinScale = 2;
153
154        rajahdys.MaxLifetime = 0.2;
155        rajahdys.MaxVelocity = 150;
156
157        Add(rajahdys);
158
159        double x = position.X;
160        double y = position.Y;
161        int pMaara = 10;
162        // "Käynnistetään" räjähdys
163        rajahdys.AddEffect(x, y, pMaara);
164    }
165
166    private void Nuotio(Vector position)
167    {
168        int pMaxMaara = 50;
169        int pMaara = 10;
170        Flame liekki = new Flame(LoadImage("suuliekki")); //, pMaxMaara, matti.Angle);
171
172        liekki.MaxScale = 15;
173        liekki.MaxLifetime = 2.0;
174        liekki.MaximumLifetime = new TimeSpan(0, 0, 8);
175        liekki.Position = position;
176       
177        Add(liekki);
178    }
179
180    void AlkuValikko()
181    {
182        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
183"Aloita peli", "Lopeta");
184        Add(alkuValikko);
185    }
186    void Mappi()
187    {
188        Level.Background.Image = LoadImage("mappi");
189        TileMap ruudut = TileMap.FromLevelAsset("mappi1");
190        ruudut.SetTileMethod('z', YksVihu);
191        ruudut.SetTileMethod('m', AsetaHenkilot);
192        ruudut.SetTileMethod('p', LuoPuu);
193        ruudut.SetTileMethod('#', LuoMohkale);
194        ruudut.SetTileMethod('k', LuoKivi);
195        ruudut.SetTileMethod('r', LuoPrinsessa);
196
197        ruudut.Execute(200, 200);
198
199
200        Level.Background.Image = taustakuva;
201        Level.Background.Size = Level.Size;
202    }
203    void LuoKivi(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject kivi = PhysicsObject.CreateStaticObject(200.0, 200.0);
206        kivi.Position = paikka;
207        kivi.Position = paikka;
208        kivi.Image = kivenkuva;
209        Add(kivi);
210        AddCollisionHandler(kivi, "luoti", LuotiOsuuEsteeseen);
211
212    }
213    void LuoMohkale(Vector paikka, double leveys, double korkeus)
214    {
215        PhysicsObject mohkale = PhysicsObject.CreateStaticObject(leveys, korkeus);
216        mohkale.Position = paikka;
217
218        Add(mohkale);
219        mohkale.IsVisible = true;
220        AddCollisionHandler(mohkale, "luoti", LuotiOsuuEsteeseen);
221
222    }
223    void LuoPuu(Vector paikka, double leveys, double korkeus)
224    {
225        PhysicsObject puu = PhysicsObject.CreateStaticObject(200.0, 200.0);
226        puu.Position = paikka;
227        puu.Image = puunkuva;
228        Add(puu);
229        AddCollisionHandler(puu, "luoti", LuotiOsuuEsteeseen);
230
231
232    }
233
234    private void LuotiOsuuEsteeseen(IPhysicsObject este, IPhysicsObject luoti)
235    {
236        TeeRajahdys(luoti.Position);
237        luoti.Destroy();
238    }
239
240    void LiikuEteen()
241    {
242        matti.Move(((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 220);
243    }
244   
245
246
247    void YksVihu(Vector paikka, double leveys, double korkeus)
248    {
249        Viho vihu = new Viho(100.0, 100.0);
250        vihu.Image = tsompinkuva;
251       
252        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(250);
253        satunnaisAivot.ChangeMovementSeconds = 3;
254        vihu.Brain = satunnaisAivot;
255        satunnaisAivot.TurnWhileMoving = true;
256        vihu.Position = paikka;
257
258        vihut.Add(vihu);
259        vihu.Tag = "tsompi";
260
261        double nakokentanpituus = 2000;
262        PhysicsObject nakokentta = new PhysicsObject(2000, nakokentanpituus);
263        nakokentta.Tag = "nakoalue";
264        //nakokentta.Y = vihu.Y + nakokentanpituus / 2 + 16;
265        nakokentta.Y = vihu.Y;
266        nakokentta.X = vihu.X;
267        nakokentta.Angle = Angle.StraightAngle;
268        nakokentta.Shape = Shape.Circle;
269        nakokentta.Color = new Color(Color.White, 0);
270        vihu.CanRotate = false;
271        nakokentta.CanRotate = true;
272        nakokentat.Add(nakokentta);
273
274
275
276        Add(vihu);
277        Add(nakokentta);
278
279        PhysicsStructure kokoVihu = new PhysicsStructure(vihu, nakokentta);
280
281        vihu.Nakokentta = nakokentta;
282
283        AddCollisionHandler(vihu, "luoti", LuotiOsuu);
284        nakokentta.IgnoresCollisionResponse = true;
285    }
286    void VihuNakeeMatin(PhysicsObject matti, PhysicsObject nakokentta)
287
288    {
289       // MessageDisplay.Add("vihunakeepelaajan");
290        int indexi = nakokentat.IndexOf(nakokentta);
291        Viho vihu = vihut[indexi];
292        FollowerBrain suraajanAivot = new FollowerBrain(matti);
293        vihu.Brain = suraajanAivot;
294        suraajanAivot.TurnWhileMoving = true;
295        suraajanAivot.Speed = 300;
296    }
297    void LuotiOsuu(PhysicsObject vihu, PhysicsObject luoti)
298    {
299        Viho v = (Viho)vihu;
300        v.ElmaLaskuri.Value--;
301        luoti.Destroy();
302        RoiskutaVerta(vihu.Position);
303        if (v.ElmaLaskuri == 0)
304            Nuotio(vihu.Position);
305    }
306    void VihuOsuuMattiin(PhysicsObject matti, PhysicsObject vihu)
307
308    {
309        Viho m = (Viho)matti;
310        m.ElmaLaskuri.Value--;
311
312        if (m.ElmaLaskuri==0) MessageDisplay.Add("Nyt kävi näin että kuolit");
313
314
315    }
316   
317
318   
319    void PelastaPrinsessa(PhysicsObject matti, PhysicsObject prinsessa )
320    {
321        ConfirmExit();
322
323    } 
324    void LuoPrinsessa(Vector paikka, double leveys, double korkeus)
325    {
326        PhysicsObject prinsessa = PhysicsObject.CreateStaticObject(100.0, 100.0);
327        prinsessa.Position = paikka;
328        AddCollisionHandler(prinsessa, "pelaaja", PelastaPrinsessa);
329        prinsessa.Image = rinsessankuva;
330       
331     
332        Add(prinsessa);
333    }
334
335    public void RoiskutaVerta(Vector paikka)
336    {
337        int xk = Convert.ToInt32(paikka.X * taustakuva.Width / Level.Right/2) + taustakuva.Height / 2;
338        int yk = Convert.ToInt32(paikka.Y * taustakuva.Height / Level.Bottom/2) + taustakuva.Width / 2;
339        const int VERENMAARA = 40;
340        const int VEREN_LEVINNEISYYS = 15;
341        for (int i = 0; i < VERENMAARA; i++)
342        {
343            taustakuva[yk+RandomGen.NextInt(-VEREN_LEVINNEISYYS, VEREN_LEVINNEISYYS), xk + RandomGen.NextInt(-VEREN_LEVINNEISYYS/2, VEREN_LEVINNEISYYS/2)] = Color.Red;
344        }
345        for (int i = 0; i < VERENMAARA; i++)
346        {
347            taustakuva[yk + RandomGen.NextInt(-VEREN_LEVINNEISYYS/2, VEREN_LEVINNEISYYS/2), xk + RandomGen.NextInt(-VEREN_LEVINNEISYYS, VEREN_LEVINNEISYYS)] = Color.Red;
348        }
349
350    }
351}
352public class Viho : PhysicsObject
353{
354    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
355    public IntMeter ElmaLaskuri { get { return elamaLaskuri; } }
356
357    private IntMeter panosLaskuri = new IntMeter(100000, 0, 100000);
358    public IntMeter PanosLaskuri { get { return panosLaskuri; } }
359    Timer lataus = new Timer();
360    public bool Hengissa { get; set; }
361    public bool LippaassaPatruunaa { get; set; }
362    public PhysicsObject Nakokentta { get; set; }
363
364    public bool LatausKesken { get; set; }
365    public Viho(double leveys, double korkeus)
366        : base(leveys, korkeus)
367    {
368        elamaLaskuri.LowerLimit += delegate
369        {
370            this.Destroy();
371            if (this.Nakokentta != null) this.Nakokentta.Destroy(); Hengissa = false;
372
373        };
374        Hengissa = true;
375        LippaassaPatruunaa = true;
376       LatausKesken = false;
377        PanosLaskuri.LowerLimit += delegate
378        {
379            LippaassaPatruunaa = false;
380            //game.MessageDisplay.Add("Ladataan...");
381           
382        };
383
384
385    }
386   public void LataaLipas()
387    {
388       LippaassaPatruunaa = false;
389      LatausKesken = true;
390       
391       lataus.Interval = 2;
392       lataus.Timeout += LipasLadattu;
393       //lataus.Start();
394    }
395 void LipasLadattu()
396    {
397        LippaassaPatruunaa = true;
398        LatausKesken = false;
399        lataus.Stop();
400        PanosLaskuri.Value = PanosLaskuri.MaxValue;
401    }
402}
Note: See TracBrowser for help on using the repository browser.