source: 2016/27/OttoK/Survivetown/Survivetown/Survivetown/Survivetown.cs @ 7952

Revision 7952, 9.8 KB checked in by otoskinn, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using System.Linq;
9
10public class Survivetown : PhysicsGame
11{
12    Image olionKuva = LoadImage("pelikissa");
13    Image taustakuva = LoadImage("kenntav3");
14    Image pelaajankuva = LoadImage("mlgnorsurebornedv2");
15    Image jonnenkuva = LoadImage("jonne");
16    Image pengunkuva = LoadImage("smokingpwenguin");
17    Image sytkarinkuva = LoadImage("sytkari");
18    Image aknkuva = LoadImage("ak47");
19    Image ammuksenkuva = LoadImage("bullet");
20    Image autonkuva = LoadImage("autonkuva2");
21    Image jouninkuva = LoadImage("jouni");
22    Image antinkuva = LoadImage("anttijussi");
23    IntMeter pingviinilaskuri = new IntMeter(0, 0, 1000000000);
24    PhysicsObject pelaaja;
25    double nopeus = 1000;
26    bool sprint = false;
27    bool Autossa = false;
28    PhysicsObject jonne;
29
30    AssaultRifle pelaajanase;
31    public override void Begin()
32    {
33        LuoKentta();
34        LisaaOhjaimet();
35        LuoJonne();
36
37        Keyboard.Listen(Key.Left, ButtonState.Down,
38        LiikutaPelaajaa, null, new Vector(-1, 0));
39        Keyboard.Listen(Key.Right, ButtonState.Down,
40        LiikutaPelaajaa, null, new Vector(1, 0));
41        Keyboard.Listen(Key.Up, ButtonState.Down,
42        LiikutaPelaajaa, null, new Vector(0,1));
43        Keyboard.Listen(Key.Down, ButtonState.Down,
44        LiikutaPelaajaa, null, new Vector(0, -1));
45        Keyboard.Listen(Key.LeftShift, ButtonState.Down, () => { sprint = true; }, "juokse");
46        Keyboard.Listen(Key.LeftShift, ButtonState.Released, () => { sprint = false; }, "");
47       
48    }
49    void LuoKentta()
50    {
51        IsFullScreen = false;
52
53        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttav2");
54        ruudut.SetTileMethod(Color.Red, LuoPelaaja);
55        ruudut.SetTileMethod(Color.Black, LuoTaso);
56        ruudut.SetTileMethod(new Color(255, 216, 0), LuoPingviini);
57        ruudut.SetTileMethod(new Color(0, 255, 0), LuoAse);
58        ruudut.SetTileMethod(new Color(0, 0, 255), LuoAuto);
59        ruudut.Execute(20, 20);
60
61        pingviinilaskuri.Value = 5;
62        pingviinilaskuri.LowerLimit += LopetaPeli;
63
64        Level.Size = new Vector(4000, 4000);
65        Level.CreateBorders();
66        Level.Background.Image = taustakuva;
67        Level.Background.FitToLevel();
68    }
69    void LisaaOhjaimet()
70    {
71        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
72        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
73        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
74        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AvaaKirjoitusIkkuna, "Avaa kirjoitusikkunan");
75        Keyboard.Listen(Key.E, ButtonState.Pressed, Kayta, null);
76        Keyboard.Listen(Key.R, ButtonState.Pressed, UlosAutosta, "Mene ulos autosta");
77    }
78    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
79    {
80        pelaaja = new PhysicsObject(80, 50);
81        pelaaja.LinearDamping = 0.9;
82        pelaaja.Image = pelaajankuva;
83        pelaaja.IgnoresExplosions = true;
84        pelaaja.CanRotate = false;
85        Add(pelaaja);
86        AddCollisionHandler(pelaaja, "ak47", OtaAse);
87        AddCollisionHandler(pelaaja, "jonne", PelaajaTormasi);
88        Camera.Follow(pelaaja);
89    }
90    void LuoTaso(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        taso.Position = paikka;
94        taso.Color = Color.Black;
95        taso.CollisionIgnoreGroup = 1;
96        Add(taso);
97    }
98    void LiikutaPelaajaa(Vector vektori)
99    {
100        if (Autossa)
101        {
102            pelaaja.Angle = vektori.Angle;
103           
104        }
105        if (sprint)
106        {
107            pelaaja.Push(vektori * 2*nopeus);
108            return;
109        }
110        pelaaja.Push(vektori*nopeus);
111        if (pelaajanase == null) return;
112        pelaajanase.Angle = pelaaja.Velocity.Angle;
113    }
114    void VaihdaNopeus()
115    {
116    }
117    void LuoPingviini(Vector paikka, double x, double y)
118    {
119        PhysicsObject pingviini = new PhysicsObject(100, 100);
120        pingviini.Shape = Shape.Circle;
121        pingviini.Color = Color.Red;
122        pingviini.Position = paikka;
123        pingviini.Mass = 100;
124        pingviini.Tag = "pingu";
125        pingviini.CanRotate = false;
126        pingviini.Image = pengunkuva;
127        Add(pingviini);
128        pingviinilaskuri.Value++;
129    }
130    void LuoJonne()
131    {
132        jonne = new PhysicsObject(250, 250);
133        jonne.Position = new Vector(0, -1500);
134        jonne.CanRotate = false;
135        jonne.Tag = "jonne";
136        jonne.IgnoresExplosions = true;
137        jonne.Image = jonnenkuva;
138        jonne.Mass = 500;
139        Add(jonne);
140    }
141    void Tupruttelia()
142    {
143        Smoke savu = new Smoke();
144        savu.Position = jonne.Position;
145        Add(savu, 1);
146        Wind = new Vector(100, 20);
147        Timer savunsiirto = new Timer();
148        savunsiirto.Interval = 0.1;
149        savunsiirto.Timeout += delegate { savu.Position = jonne.Position; };
150        savunsiirto.Start();
151    }
152    void LuoSytkari()
153    {
154        PhysicsObject sytkari = new PhysicsObject(250, 300);
155        sytkari.Image = sytkarinkuva;
156        sytkari.Position = jonne.Position;
157        Add(sytkari, 1);
158        sytkari.CanRotate = false;
159        sytkari.Mass = 10000;
160        sytkari.MaximumLifetime = TimeSpan.FromSeconds(1);
161        Tupruttelia();
162        sytkari.Destroyed += delegate ()
163        {
164            LuoRajahdys(jonne.Position);
165            jonne.Tag = "jonne";
166        };
167    }
168
169    void PelaajaTormasi(PhysicsObject pelaaja, PhysicsObject jonne)
170    {
171        jonne.Tag = "";
172        Timer.SingleShot(1.0, LuoSytkari);
173
174    }
175    void LuoRajahdys(Vector paikka)
176    {
177        Explosion rajadys = new Explosion(150);
178        rajadys.Position = paikka;
179        Add(rajadys, 1);
180    }
181    void OtaAse(PhysicsObject pelaaja, PhysicsObject ak47)
182    {
183        ak47.Destroy();
184        pelaajanase = new AssaultRifle(50, 50);
185        pelaajanase.ProjectileCollision += AmmusOsui;
186        pelaaja.Add(pelaajanase);
187    }
188    void LuoAse(Vector paekka, double x, double y)
189    {
190        PhysicsObject ak47 = new PhysicsObject(50, 100);
191        ak47.Position = paekka;
192        ak47.Image = aknkuva;
193        ak47.Mass = 100;
194        ak47.Tag = "ak47";
195        Add(ak47);
196    }
197    void AmmuAseella()
198    {
199        if (pelaajanase == null) return;
200        PhysicsObject ammus = pelaajanase.Shoot();
201
202        if (ammus != null)
203        {
204            //ammus.Size *= 3;
205            ammus.Image = ammuksenkuva;
206            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
207        }
208    }
209    void AmmusOsui(PhysicsObject ammus, PhysicsObject pingu)
210    {
211        if ((string)pingu.Tag == "pingu")
212        {
213            pingu.Destroy();
214            pingviinilaskuri.Value--;
215            ammus.Destroy();
216        }
217        else if ((string)pingu.Tag == "auto")
218        {
219            pingu.Destroy();
220            ammus.Destroy();
221        }
222       
223    }
224    void LuoAuto(Vector paikka, double x, double y)
225    {
226        Automobile auto = new Automobile(250, 100);
227        auto.Color = Color.Yellow;
228        auto.Position = paikka;
229        auto.Image = autonkuva;
230        auto.Mass = 350;
231        auto.Tag = "auto";
232        Add(auto);
233    }
234    void MeneAutoon(PhysicsObject pelaaja, PhysicsObject auto)
235    {
236        pelaaja.Image = autonkuva;
237        pelaaja.Position = auto.Position;
238        pelaaja.Size = auto.Size;
239        auto.Destroy();
240        pelaaja.LinearDamping = 0.98;
241
242        Autossa = true;
243    }
244    void Kayta()
245    {
246
247        List<GameObject> autot = GetObjectsWithTag("auto");
248        double lahinEtaisyys = autot.Min(a => Vector.Distance(a.Position, pelaaja.Position));
249        GameObject lahinAuto = autot.Find(a => Vector.Distance(a.Position, pelaaja.Position) == lahinEtaisyys);
250
251
252        if (lahinAuto != null && Vector.Distance(pelaaja.Position, lahinAuto.Position) < 100)
253        {
254            PhysicsObject auto = lahinAuto as PhysicsObject;
255            MeneAutoon(pelaaja, auto);
256        }
257
258    }
259    void UlosAutosta()
260    {
261        if (Autossa == true)
262        {
263            pelaaja.Image = pelaajankuva;
264            pelaaja.Size = new Vector(80, 50);
265            LuoAuto(pelaaja.Position + new Vector(0, -72), 0, 0);
266            pelaaja.LinearDamping = 0.9;
267            Autossa = false;
268           
269        }
270    }
271    void AvaaKirjoitusIkkuna()
272    {
273        InputWindow kysymysIkkuna = new InputWindow("Kirjoita  koodi");
274        kysymysIkkuna.TextEntered += ProcessInput;
275        Add(kysymysIkkuna);
276    }
277    void ProcessInput(InputWindow ikkuna)
278    {
279        string vastaus = ikkuna.InputBox.Text;
280        if (vastaus == "superspeed")
281        {
282            nopeus = 2500;
283        }
284        else if (vastaus == "normalspeed")
285        {
286            nopeus = 1000;
287        }
288        else if (vastaus == "createcar")
289        {
290            LuoAuto(pelaaja.Position, 100, -72);
291
292        }
293        else if (vastaus == "jouni")
294        {
295            LuoJouni(pelaaja.Position, 0, -500);
296        }
297        else if (vastaus== "anttijussi")
298        {
299            LuoAnttijussi(pelaaja.Position, 0,0);
300        }
301    }
302    void LuoJouni(Vector paikka, double x, double y)
303    {
304        PhysicsObject jouni = new PhysicsObject(95, 133);
305        jouni.Image = jouninkuva;
306        Add(jouni);   
307    }
308    void LuoAnttijussi(Vector paikka,double x, double y)
309    {
310        PhysicsObject anttijussi = new PhysicsObject(184, 257);
311        anttijussi.Image = antinkuva;
312    }
313    void LopetaPeli()
314    {
315        Exit();
316    }
317}
Note: See TracBrowser for help on using the repository browser.