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

Revision 8792, 10.7 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("rinsessa");
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            return;
115        }
116        aani.Play();
117       
118        PhysicsObject panos = new PhysicsObject(5.0, 5.0);
119        panos.CollisionIgnoreGroup = 1;
120        if (vasenPyssy)
121        {
122            panos.Position = matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 22).RightNormal;
123            vasenPyssy = false;
124        }
125        else
126        {
127            panos.Position = matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * -22).RightNormal;
128            vasenPyssy = true;
129        }
130        panos.IgnoresCollisionWith(matti);
131        panos.MaximumLifetime = new TimeSpan(0, 0, 2);
132        Add(panos);
133        panos.Velocity = ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 2000;
134        matti.PanosLaskuri.Value--;
135
136
137
138        panos.Tag = "luoti";
139
140    }
141    void AlkuValikko()
142    {
143        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
144"Aloita peli", "Lopeta");
145        Add(alkuValikko);
146    }
147    void Mappi()
148    {
149        Level.Background.Image = LoadImage("mappi");
150        TileMap ruudut = TileMap.FromLevelAsset("mappi1");
151        ruudut.SetTileMethod('z', YksVihu);
152        ruudut.SetTileMethod('m', AsetaHenkilot);
153        ruudut.SetTileMethod('p', LuoPuu);
154        ruudut.SetTileMethod('#', LuoMohkale);
155        ruudut.SetTileMethod('k', LuoKivi);
156        ruudut.SetTileMethod('r', LuoPrinsessa);
157
158        ruudut.Execute(200, 200);
159
160
161        Level.Background.Image = taustakuva;
162        Level.Background.Size = Level.Size;
163    }
164    void LuoKivi(Vector paikka, double leveys, double korkeus)
165    {
166        PhysicsObject Kivi = PhysicsObject.CreateStaticObject(200.0, 200.0);
167        Kivi.Position = paikka;
168        Kivi.Position = paikka;
169        Kivi.Image = kivenkuva;
170        Add(Kivi);
171    }
172    void LuoMohkale(Vector paikka, double leveys, double korkeus)
173    {
174        PhysicsObject Mohkale = PhysicsObject.CreateStaticObject(leveys, korkeus);
175        Mohkale.Position = paikka;
176
177        Add(Mohkale);
178        Mohkale.IsVisible = true;
179    }
180    void LuoPuu(Vector paikka, double leveys, double korkeus)
181    {
182        PhysicsObject puu = PhysicsObject.CreateStaticObject(200.0, 200.0);
183        puu.Position = paikka;
184        puu.Image = puunkuva;
185        Add(puu);
186    }
187    void LiikuEteen()
188    {
189        matti.Move(((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 220);
190    }
191    void YksVihu(Vector paikka, double leveys, double korkeus)
192    {
193        Viho vihu = new Viho(100.0, 100.0);
194        vihu.Image = tsompinkuva;
195       
196        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(250);
197        satunnaisAivot.ChangeMovementSeconds = 3;
198        vihu.Brain = satunnaisAivot;
199        satunnaisAivot.TurnWhileMoving = true;
200        vihu.Position = paikka;
201
202        vihut.Add(vihu);
203        vihu.Tag = "tsompi";
204
205        double nakokentanpituus = 2000;
206        PhysicsObject nakokentta = new PhysicsObject(2000, nakokentanpituus);
207        nakokentta.Tag = "nakoalue";
208        //nakokentta.Y = vihu.Y + nakokentanpituus / 2 + 16;
209        nakokentta.Y = vihu.Y;
210        nakokentta.X = vihu.X;
211        nakokentta.Angle = Angle.StraightAngle;
212        nakokentta.Shape = Shape.Circle;
213        nakokentta.Color = new Color(Color.White, 0);
214        vihu.CanRotate = false;
215        nakokentta.CanRotate = true;
216        nakokentat.Add(nakokentta);
217
218
219
220        Add(vihu);
221        Add(nakokentta);
222
223        PhysicsStructure kokoVihu = new PhysicsStructure(vihu, nakokentta);
224
225        vihu.Nakokentta = nakokentta;
226
227        AddCollisionHandler(vihu, "luoti", LuotiOsuu);
228        nakokentta.IgnoresCollisionResponse = true;
229    }
230    void VihuNakeeMatin(PhysicsObject matti, PhysicsObject nakokentta)
231
232    {
233       // MessageDisplay.Add("vihunakeepelaajan");
234        int indexi = nakokentat.IndexOf(nakokentta);
235        Viho vihu = vihut[indexi];
236        FollowerBrain suraajanAivot = new FollowerBrain(matti);
237        vihu.Brain = suraajanAivot;
238        suraajanAivot.TurnWhileMoving = true;
239        suraajanAivot.Speed = 300;
240    }
241    void LuotiOsuu(PhysicsObject vihu, PhysicsObject luoti)
242    {
243        Viho v = (Viho)vihu;
244        v.ElmaLaskuri.Value--;
245        luoti.Destroy();
246        RoiskutaVerta(vihu.Position);
247    }
248    void VihuOsuuMattiin(PhysicsObject matti, PhysicsObject vihu)
249
250    {
251        Viho m = (Viho)matti;
252        m.ElmaLaskuri.Value--;
253
254    }
255    void PelastaPrinsessa(PhysicsObject matti, PhysicsObject prinsessa )
256    {
257        ConfirmExit();
258
259    } 
260    void LuoPrinsessa(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject prinsessa = PhysicsObject.CreateStaticObject(100.0, 100.0);
263        prinsessa.Position = paikka;
264        AddCollisionHandler(prinsessa, "pelaaja", PelastaPrinsessa);
265        prinsessa.Image = rinsessankuva;
266       
267     
268        Add(prinsessa);
269    }
270
271    public void RoiskutaVerta(Vector paikka)
272    {
273        int xk = Convert.ToInt32(paikka.X * taustakuva.Width / Level.Right/2) + taustakuva.Height / 2;
274        int yk = Convert.ToInt32(paikka.Y * taustakuva.Height / Level.Bottom/2) + taustakuva.Width / 2;
275        const int VERENMAARA = 40;
276        const int VEREN_LEVINNEISYYS = 15;
277        for (int i = 0; i < VERENMAARA; i++)
278        {
279            taustakuva[yk+RandomGen.NextInt(-VEREN_LEVINNEISYYS, VEREN_LEVINNEISYYS), xk + RandomGen.NextInt(-VEREN_LEVINNEISYYS/2, VEREN_LEVINNEISYYS/2)] = Color.Red;
280        }
281        for (int i = 0; i < VERENMAARA; i++)
282        {
283            taustakuva[yk + RandomGen.NextInt(-VEREN_LEVINNEISYYS/2, VEREN_LEVINNEISYYS/2), xk + RandomGen.NextInt(-VEREN_LEVINNEISYYS, VEREN_LEVINNEISYYS)] = Color.Red;
284        }
285
286    }
287}
288public class Viho : PhysicsObject
289{
290    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
291    public IntMeter ElmaLaskuri { get { return elamaLaskuri; } }
292
293    private IntMeter panosLaskuri = new IntMeter(100000, 0, 100000);
294    public IntMeter PanosLaskuri { get { return panosLaskuri; } }
295    Timer lataus = new Timer();
296    public bool Hengissa { get; set; }
297    public bool LippaassaPatruunaa { get; set; }
298    public PhysicsObject Nakokentta { get; set; }
299
300    public bool LatausKesken { get; set; }
301    public Viho(double leveys, double korkeus)
302        : base(leveys, korkeus)
303    {
304        elamaLaskuri.LowerLimit += delegate
305        {
306            this.Destroy();
307            if (this.Nakokentta != null) this.Nakokentta.Destroy(); Hengissa = false;
308        };
309        Hengissa = true;
310        LippaassaPatruunaa = true;
311       LatausKesken = false;
312        PanosLaskuri.LowerLimit += delegate
313        {
314            LippaassaPatruunaa = false;
315            //game.MessageDisplay.Add("Ladataan...");
316           
317        };
318
319
320    }
321   public void LataaLipas()
322    {
323       LippaassaPatruunaa = false;
324      LatausKesken = true;
325       
326       lataus.Interval = 2;
327       lataus.Timeout += LipasLadattu;
328       //lataus.Start();
329    }
330 void LipasLadattu()
331    {
332        LippaassaPatruunaa = true;
333        LatausKesken = false;
334        lataus.Stop();
335        PanosLaskuri.Value = PanosLaskuri.MaxValue;
336    }
337}
Note: See TracBrowser for help on using the repository browser.