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

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