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

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