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

Revision 8703, 7.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 Aani = LoadSoundEffect("pyssyaani");
13    bool vasenPyssy = true;
14    List<Viho> vihut = new List<Viho>();
15    List<PhysicsObject> nakokentat = new List<PhysicsObject>();
16    Image tsompinkuva = LoadImage("zombi");
17    Image puunkuva = LoadImage("puu");
18    Image kivenkuva = LoadImage("kivi");
19    public override void Begin()
20    {
21        AsetaOhjaimet();
22     
23
24        Mappi();
25
26        Camera.Follow(matti);
27
28        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
29
30        IsMouseVisible = true;
31
32        AlkuValikko();
33
34        Level.Background.Image = LoadImage("mappi2");
35        Level.Background.Size *= 30;
36
37    }
38    void AsetaOhjaimet()
39    {
40        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
41
42        Keyboard.Listen(Key.A, ButtonState.Down,
43   LiikutaPelaajaa, null, new Vector(-220, 0));
44        Keyboard.Listen(Key.D, ButtonState.Down,
45          LiikutaPelaajaa, null, new Vector(220, 0));
46        Keyboard.Listen(Key.W, ButtonState.Down,
47          LiikuEteen, null);
48        Keyboard.Listen(Key.S, ButtonState.Down,
49          LiikutaPelaajaa, null, new Vector(0, -220));
50
51        Keyboard.Listen(Key.A, ButtonState.Released,
52   LiikutaPelaajaa, null, Vector.Zero);
53        Keyboard.Listen(Key.D, ButtonState.Released,
54         LiikutaPelaajaa, null, Vector.Zero);
55        Keyboard.Listen(Key.W, ButtonState.Released,
56          LiikutaPelaajaa, null, Vector.Zero);
57        Keyboard.Listen(Key.S, ButtonState.Released,
58          LiikutaPelaajaa, null, Vector.Zero);
59
60        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, null);
61
62
63    }
64    void AsetaHenkilot(Vector paikka, double leveys, double korkeus)
65    {
66        matti = new Viho(75, 75);
67        matti.Image = LoadImage("oikeeukkeli");
68        matti.Tag = "pelaaja";
69        matti.Position = paikka;
70        matti.CollisionIgnoreGroup = 1;
71
72        Add(matti, 3);
73        matti.CanRotate = false;
74        double laserinpituus = 1000;
75        GameObject laser = new GameObject(2, laserinpituus);
76        laser.Y = matti.Y + laserinpituus / 2 + 16;
77        laser.Color = new Color(Color.Red, 30);
78        matti.Add(laser);
79        AddCollisionHandler(matti, "nakoalue", VihuNakeeMatin);
80        AddCollisionHandler(matti, "tsompi", VihuOsuuMattiin);
81    }
82
83    void LiikutaPelaajaa(Vector vektori)
84    {
85        matti.Move(vektori);
86    }
87    void Tahtaa(AnalogState hiirenLiike)
88    {
89        Vector suunta = (Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize();
90        matti.Angle = suunta.Angle - Angle.RightAngle;
91    }
92    void Ammu()
93    {
94       
95        if (matti.Hengissa == false) return;
96        Aani.Play();
97        PhysicsObject panos = new PhysicsObject(5.0, 5.0);
98        panos.CollisionIgnoreGroup = 1;
99        if (vasenPyssy)
100        {
101            panos.Position = matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 22).RightNormal;
102            vasenPyssy = false;
103        }
104        else
105        {
106            panos.Position = matti.Position + ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 32 + (((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * -22).RightNormal;
107            vasenPyssy = true;
108        }
109        panos.IgnoresCollisionWith(matti);
110        panos.MaximumLifetime = new TimeSpan(0, 0, 2);
111        Add(panos);
112        panos.Velocity = ((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 2000;
113
114
115
116
117        panos.Tag = "luoti";
118
119    }
120    void AlkuValikko()
121    {
122        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
123"Aloita peli", "Lopeta");
124        Add(alkuValikko);
125    }
126    void Mappi()
127    {
128        Level.Background.Image = LoadImage("mappi");
129        TileMap ruudut = TileMap.FromLevelAsset("mappi1");
130        ruudut.SetTileMethod('z', YksVihu);
131        ruudut.SetTileMethod('m', AsetaHenkilot);
132        ruudut.SetTileMethod('p', LuoPuu);
133        ruudut.SetTileMethod('#', LuoMohkale);
134        ruudut.SetTileMethod('k', LuoKivi);
135
136        ruudut.Execute(200, 200);
137
138
139
140    }
141    void LuoKivi(Vector paikka, double leveys, double korkeus)
142    {
143        PhysicsObject Kivi = PhysicsObject.CreateStaticObject(200.0, 200.0);
144        Kivi.Position = paikka;
145        Kivi.Position = paikka;
146        Kivi.Image = kivenkuva;
147        Add(Kivi);
148    }
149    void LuoMohkale(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject Mohkale = PhysicsObject.CreateStaticObject(leveys, korkeus);
152        Mohkale.Position = paikka;
153
154        Add(Mohkale);
155        Mohkale.IsVisible = true;
156    }
157    void LuoPuu(Vector paikka, double leveys, double korkeus)
158    {
159        PhysicsObject puu = PhysicsObject.CreateStaticObject(200.0, 200.0);
160        puu.Position = paikka;
161        puu.Image = puunkuva;
162        Add(puu);
163    }
164    void LiikuEteen()
165    {
166        matti.Move(((Mouse.PositionOnWorld - matti.AbsolutePosition).Normalize()) * 220);
167    }
168    void YksVihu(Vector paikka, double leveys, double korkeus)
169    {
170        Viho vihu = new Viho(100.0, 100.0);
171        vihu.Image = tsompinkuva;
172        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(250);
173        satunnaisAivot.ChangeMovementSeconds = 3;
174        vihu.Brain = satunnaisAivot;
175        satunnaisAivot.TurnWhileMoving = true;
176        vihu.Position = paikka;
177
178        vihut.Add(vihu);
179        vihu.Tag = "tsompi";
180
181        double nakokentanpituus = 1500;
182        PhysicsObject nakokentta = new PhysicsObject(1500, nakokentanpituus);
183        nakokentta.Tag = "nakoalue";
184        //nakokentta.Y = vihu.Y + nakokentanpituus / 2 + 16;
185        nakokentta.Y = vihu.Y;
186        nakokentta.X = vihu.X;
187        nakokentta.Angle = Angle.StraightAngle;
188        nakokentta.Shape = Shape.Circle;
189        nakokentta.Color = new Color(Color.White, 50);
190        vihu.CanRotate = false;
191        nakokentta.CanRotate = true;
192        nakokentat.Add(nakokentta);
193
194
195
196        Add(vihu);
197        Add(nakokentta);
198
199        PhysicsStructure kokoVihu = new PhysicsStructure(vihu, nakokentta);
200
201        vihu.Nakokentta = nakokentta;
202
203        AddCollisionHandler(vihu, "luoti", LuotiOsuu);
204        nakokentta.IgnoresCollisionResponse = true;
205    }
206    void VihuNakeeMatin(PhysicsObject matti, PhysicsObject nakokentta)
207
208    {
209        MessageDisplay.Add("vihunakeepelaajan");
210        int indexi = nakokentat.IndexOf(nakokentta);
211        Viho vihu = vihut[indexi];
212        FollowerBrain suraajanAivot = new FollowerBrain(matti);
213        vihu.Brain = suraajanAivot;
214        suraajanAivot.TurnWhileMoving = true;
215        suraajanAivot.Speed = 300;
216    }
217    void LuotiOsuu(PhysicsObject vihu, PhysicsObject luoti)
218    {
219        Viho v = (Viho)vihu;
220        v.ElmaLaskuri.Value--;
221        luoti.Destroy();
222
223    }
224    void VihuOsuuMattiin(PhysicsObject matti, PhysicsObject vihu)
225
226    {
227        Viho m = (Viho)matti;
228        m.ElmaLaskuri.Value--;
229
230    }
231}
232class Viho : PhysicsObject
233{
234    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
235    public IntMeter ElmaLaskuri { get { return elamaLaskuri; } }
236
237    public bool Hengissa { get; set; }
238
239    public PhysicsObject Nakokentta { get; set; }
240
241    public Viho(double leveys, double korkeus)
242        : base(leveys, korkeus)
243    {
244        elamaLaskuri.LowerLimit += delegate
245        {
246            this.Destroy();
247            if (this.Nakokentta != null) this.Nakokentta.Destroy(); Hengissa = false;
248        };
249        Hengissa = true;
250
251
252    }
253
254}
Note: See TracBrowser for help on using the repository browser.