source: 2010/27/akrauhan/Wooden Warfare/Peli.cs @ 1228

Revision 1228, 11.1 KB checked in by akrauhan, 10 years ago (diff)

Peli valmis, kai.

Line 
1//Akseli Rauhansalo
2
3using System;
4using Jypeli;
5using Jypeli.Widgets;
6using Physics2DDotNet.Ignorers;
7using Jypeli.Assets;
8using Jypeli.Effects;
9using System.Collections.Generic;
10
11public class Peli : PhysicsGame
12{
13    PhysicsObject varsijousi;
14    PhysicsObject kuormaauto;
15    LaserGun pyssy;
16    const int ruudunLeveys = 50;
17    const int ruudunKorkeus = 50;
18    IntMeter pisteLaskuri;
19    IntMeter Energiamittari;
20    ExplosionSystem rajahdys;
21    PhysicsObject PistePalikka;
22    PhysicsObject RandomPalikka;
23   
24    Timer pomminPudotusAjastin;
25    ObjectIgnorer ignorer = new ObjectIgnorer();
26
27
28    protected override void Begin()
29    {   
30        LuoKentta();
31        pomminPudotusAjastin = new Timer();       
32        KaynnistaPomminpudotusAjastin();
33        Ohjaimet();
34       
35        LataaRajahdykset();
36        LuoAikaLaskuri();
37        LuoPisteLaskuri();
38        LuoEnergia();
39       
40       
41    }
42    private void LataaRajahdykset()
43    {
44        Image expl = LoadImage("Red");
45        rajahdys = new ExplosionSystem(expl, 1000);
46        Add(rajahdys);
47    }
48
49    void KaynnistaPomminpudotusAjastin()
50    {
51        pomminPudotusAjastin.Interval = 2;
52        pomminPudotusAjastin.Trigger += Pommeja;
53        Add(pomminPudotusAjastin);
54        pomminPudotusAjastin.Start();
55    }
56
57    void NopeutaPommienPutoamista()
58    {
59        pomminPudotusAjastin.Interval /= 2;
60    }
61
62    void Pommeja(Timer ajastin)
63    {
64        Add(LuoPommi(20, 40, new Vector(0, -200), "pommi", "heikko"));
65        Add(LuoPommi(30, 50, new Vector(0, -100), "pommi2","normaali"));
66        Add(LuoPommi(50, 70, new Vector(0, -50), "pommi3", "vahva"));
67    }
68
69   
70
71   
72
73    void LuoKentta()
74    {
75        varsijousi = new PhysicsObject(100, 70);
76        varsijousi.CollisionIgnorer = ignorer;
77        varsijousi.Shape = Shapes.Rectangle;
78        varsijousi.X = 0;
79        varsijousi.Y = -200;
80        varsijousi.IgnoresCollisionResponse = true;
81        varsijousi.Image = LoadImage("uusjouus");
82       
83        Add(varsijousi);
84        pyssy = new LaserGun(20, 5);
85        pyssy.AttackSound = null; 
86        varsijousi.Add(pyssy);
87        kuormaauto = new PhysicsObject(200.0, 100.0);
88        kuormaauto.X = -550.0;
89        kuormaauto.Y = -250.0;
90        kuormaauto.Image = LoadImage("Rekka");
91        Add(kuormaauto);
92        PathFollowerBrain tietaseuraavatAivot = new PathFollowerBrain();
93        kuormaauto.Brain = tietaseuraavatAivot;
94        List<Vector> polku = new List<Vector>();
95        polku.Add(new Vector(-800.0, -250.0));
96        polku.Add(new Vector(0.0, -250.0));
97        polku.Add(new Vector(800.0, -250.0));
98        polku.Add(new Vector(0.0, -250.0));
99        tietaseuraavatAivot.Path = polku;
100        tietaseuraavatAivot.Speed = 150;
101        kuormaauto.IgnoresCollisionResponse = true;
102        TileMap ruudut = TileMap.FromFile("kenttä");
103        ruudut['-'] = LuoPalikKaksi;
104        ruudut['='] = LuoPalikka;
105        PistePalikka = new PhysicsObject(30, 30);
106        PistePalikka.X = -800.0;
107        PistePalikka.Y = -250.0;
108        RandomPalikka = new PhysicsObject(30, 30);
109        RandomPalikka.X = 799.0;
110        RandomPalikka.Y = -250.0;
111        Add(RandomPalikka);
112        Add(PistePalikka);
113        ruudut.Insert(40.0, 40.0);
114        Level.Background.Image = LoadImage("Winter");
115        Level.Background.FitToLevel();
116       
117        AddCollisionHandler(kuormaauto, KasitteleTormays4);
118        AddCollisionHandler(kuormaauto, KasittelePomminTormays);
119        AddCollisionHandler(kuormaauto, KasittelePomminTormays2);
120        AddCollisionHandler(kuormaauto, KasittelePomminTormays3);
121        AddCollisionHandler(kuormaauto, KasitteleTormays5);
122       
123        Camera.ZoomToLevel();
124
125       
126       
127
128    }
129    void KasitteleTormays5(PhysicsObject kuormaauto, PhysicsObject kohde6)
130    {
131        if (kohde6 == RandomPalikka)
132        {
133            kuormaauto.Image = LoadImage("Rekka2");
134        }
135    }
136
137    void KasittelePomminTormays(PhysicsObject kuormaauto, PhysicsObject kohde2)
138    {
139        if (kohde2.Tag.ToString() == "heikko")
140        {
141            Energiamittari.Value -= 10;
142        }
143     
144    }
145
146    void KasittelePomminTormays2(PhysicsObject kuormaauto, PhysicsObject kohde3)
147    {
148        if (kohde3.Tag.ToString() == "normaali")
149        {
150            Energiamittari.Value -= 30;
151        }
152    }
153
154    void KasittelePomminTormays3(PhysicsObject kuormaauto, PhysicsObject kohde4)
155    {
156        if (kohde4.Tag.ToString() == "vahva")
157        {
158            Energiamittari.Value -= 50;
159        }
160    }
161
162    void KasitteleTormays4(PhysicsObject kuormaauto, PhysicsObject kohde)
163    {
164        if (kohde == PistePalikka)
165        {
166            pisteLaskuri.Value += 100;
167            kuormaauto.Image = LoadImage("rekka");
168        }
169    }
170
171    void Ohjaimet()
172    {
173        Keyboard.Listen(Key.Up, ButtonState.Down, LiikuEteen, "Liiku eteenpäin");
174        Keyboard.Listen(Key.Up, ButtonState.Up, Pysahdy, "Pysayta");
175        Keyboard.Listen(Key.Down, ButtonState.Pressed, LiikuTaakse, "Liiku taaksepäin");
176        Keyboard.Listen(Key.Down, ButtonState.Released, Pysahdy, "Pysayta");
177        Keyboard.Listen(Key.Left, ButtonState.Down, KaannyMyotapaivaan, "Käänny Oikealle");
178        Keyboard.Listen(Key.Left, ButtonState.Released, Pysahdy2, "Pysayta");
179        Keyboard.Listen(Key.Right, ButtonState.Down, KaannyVastapaivaan, "Käänny Vasemmalle");
180        Keyboard.Listen(Key.Right, ButtonState.Released, Pysahdy2, "Käänny Vasemmalle");
181        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Käytä asetta");
182        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu Pelistä");
183        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitAlusta, "Aloita alusta.");
184
185    }
186
187    void Ammu()
188    {
189        PhysicsObject ammus = pyssy.Shoot();
190        if (ammus != null)
191        {
192            ammus.Color = Color.Brown;
193            ammus.Width *= 4;
194            ammus.Height *= 4;
195            ammus.CollisionIgnorer = new ObjectIgnorer();
196            ammus.Image = LoadImage("nuoli");
197            Image[] ampuminen = LoadImages("uusjouus", "uusjouus2", "uusjouus3");
198            varsijousi.Animation = new Animation(ampuminen);
199            varsijousi.Animation.Start(1);
200           
201        }
202    }
203
204    void LiikuEteen()
205    {
206        Vector suunta = Vector.FromLengthAndAngle(1.0, varsijousi.Angle);
207        varsijousi.Velocity = suunta * 100;         
208       
209    }
210    void LiikuTaakse()
211    {
212        Vector suunta = Vector.FromLengthAndAngle(1.0, varsijousi.Angle);
213        varsijousi.Velocity = suunta * -100;
214
215    }
216
217    void Pysahdy()
218    {
219        varsijousi.Stop();
220    }
221    void KaannyMyotapaivaan()
222    {
223        varsijousi.Angle += Angle.Degrees(5);
224
225    }
226    void KaannyVastapaivaan()
227    {
228        varsijousi.Angle += Angle.Degrees(-5);
229    }
230
231
232    void Pysahdy2()
233    {
234    }
235
236
237    PhysicsObject LuoPalikKaksi()
238    {
239        PhysicsObject palikka2 = PhysicsObject.CreateStaticObject(100.0, 50.0);
240        palikka2.Shape = Shapes.Rectangle;
241        palikka2.Color = Color.Brown;
242        return palikka2;
243    }
244    PhysicsObject LuoPalikka()
245    {
246        PhysicsObject palikka = PhysicsObject.CreateStaticObject(100.0, 50.0);
247        palikka.Shape = Shapes.Rectangle;
248        palikka.Color = Color.White;
249        return palikka;
250
251    }
252
253    PhysicsObject LuoPommi(double leveys, double korkeus, Vector tippumisvoima, String kuva, String vahvuus)
254    {
255        PhysicsObject pommi = new PhysicsObject(leveys, korkeus);
256        pommi.CollisionIgnorer = ignorer;
257        AddCollisionHandler(pommi, KasitteleTormays);
258        pommi.Image = LoadImage(kuva);
259        double x = RandomGen.NextDouble(Level.Left, Level.Right);
260        double y = 600.0;
261        pommi.X = x;
262        pommi.Y = y;
263        pommi.Hit(tippumisvoima);
264        pommi.Tag = vahvuus;
265        return pommi;
266    }
267
268
269
270    void Rajayta(double x, double y)
271    {
272        rajahdys.AddEffect(x, y, 30);
273    }
274
275
276    void KasitteleTormays(PhysicsObject heikkopommi, PhysicsObject kohde)
277    {
278        Rajayta(heikkopommi.X, heikkopommi.Y);
279        heikkopommi.Destroy();
280    }
281
282
283
284    void KasitteleTormays2(PhysicsObject normaalipommi, PhysicsObject kohde)
285    {
286        normaalipommi.Destroy();
287        Explosion rajahdys = new Explosion(70);
288        rajahdys.Position = normaalipommi.Position;
289        Add(rajahdys);
290    }
291
292   
293    void KasitteleTormays3(PhysicsObject vahvapommi, PhysicsObject kohde)
294    {
295        vahvapommi.Destroy();
296        Explosion rajahdys = new Explosion(100);
297        rajahdys.Position = vahvapommi.Position;
298        Add(rajahdys);
299    }
300
301    Timer aikaLaskuri;
302
303    void LuoAikaLaskuri()
304    {
305        aikaLaskuri = new Timer();
306        Add(aikaLaskuri);
307        aikaLaskuri.Start();
308
309        Label aikaNaytto = new Label("Aikaa kulunut:");
310        aikaNaytto.TextColor = Color.Red;
311        aikaNaytto.DecimalPlaces = 1;
312        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
313        aikaNaytto.X = 400;
314        aikaNaytto.Y = 400;
315
316        Add(aikaNaytto);
317    }
318
319   
320
321    void LuoPisteLaskuri()
322    {
323        pisteLaskuri = new IntMeter(0);
324
325        Label pisteNaytto = new Label();
326        pisteNaytto.X = Screen.Left + 100;
327        pisteNaytto.Y = Screen.Top - 100;
328        pisteNaytto.TextColor = Color.Red;
329
330        pisteNaytto.BindTo(pisteLaskuri);
331        Add(pisteNaytto);
332
333        Label pisteTeksti = new Label("Pisteitä:   ");
334        pisteTeksti.X = Screen.Left + 50;
335        pisteTeksti.Y = Screen.Top - 100;
336        pisteTeksti.TextColor = Color.Red;
337        Add(pisteTeksti);
338
339        if (pisteLaskuri.Value >= 200)
340        {
341            NopeutaPommienPutoamista();
342        }
343        if (pisteLaskuri.Value >= 400)
344        {
345            NopeutaPommienPutoamista();
346        }
347        if (pisteLaskuri.Value >= 700)
348        {
349            NopeutaPommienPutoamista();
350        }
351    }
352    void LuoEnergia()
353    {
354        Energiamittari = new IntMeter(100);
355        Energiamittari.MinValue = 0;
356        Energiamittari.LowerLimit += RekkaTuhoutuu;
357
358        Label EnergiaNaytto = new Label();
359        EnergiaNaytto.X = 0.0;
360        EnergiaNaytto.Y = Screen.Bottom + 100;
361        EnergiaNaytto.TextColor = Color.Green;
362       
363
364        EnergiaNaytto.BindTo(Energiamittari);
365        Add(EnergiaNaytto);
366
367
368    }
369    void RekkaTuhoutuu(int arvo)
370    {
371        MessageDisplay.TextColor = Color.Red;
372        MessageDisplay.Add("Tuhouduit. Paina ENTER aloittaaksesi alusta.");
373        pomminPudotusAjastin.Stop();
374        Explosion rajahdys = new Explosion(300);
375        rajahdys.Position = kuormaauto.Position;
376        kuormaauto.Destroy();
377        aikaLaskuri.Stop();
378        Add(rajahdys);
379
380    }
381
382    void AloitAlusta()
383    {
384        ClearAll();
385        LuoKentta();
386        pomminPudotusAjastin = new Timer();       
387        KaynnistaPomminpudotusAjastin();
388        Ohjaimet();
389           
390        LataaRajahdykset();
391        LuoAikaLaskuri();
392        LuoPisteLaskuri();
393        LuoEnergia();
394
395    }
396
397   
398
399   
400}
401
Note: See TracBrowser for help on using the repository browser.