source: 2014/24/EemeliK/DigToChina/DigToChina/DigToChina/DigToChina.cs @ 5029

Revision 5029, 16.0 KB checked in by taeekotr, 6 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
9class Kivi : PhysicsObject
10{
11    private IntMeter elamaLaskuri;
12    public  IntMeter ElamaLaskuri
13    { 
14        get { return elamaLaskuri; }
15    }
16
17    public int Kesto
18    {
19        get { return elamaLaskuri.Value; }
20        set { elamaLaskuri.Value = value; }
21    }
22
23
24    public Kivi(double leveys, double korkeus, int elamat)
25        : base(leveys, korkeus)
26    {
27        elamaLaskuri = new IntMeter(elamat, 0, int.MaxValue);
28        elamaLaskuri.LowerLimit += delegate {
29            this.Destroy();
30            DigToChina.Peli.pisteLaskuri.Value += (int)this.Data[1];
31            if ((String)this.Data[2] == "uraani")
32            {
33                DigToChina.Peli.uraania.Value++;
34            }
35            DigToChina.Peli.kentta.TuhoaSeina(this.PosInLevel.X, this.PosInLevel.Y);
36        };
37
38    }
39
40}
41
42
43public class DigToChina : PhysicsGame
44{
45    public Kentta kentta;
46    public static DigToChina Peli;
47
48    PhysicsObject tyyppi;
49
50    AssaultRifle tyyppiAse;
51    Cannon tyyppiTykki;
52
53    int kenttaNro = 1;
54    IntMeter kranaatteja = new IntMeter(0);
55    IntMeter ydinpommeja = new IntMeter(0);
56    public IntMeter uraania = new IntMeter(0);
57
58    public IntMeter pisteLaskuri;
59    Label pisteNaytto;
60
61    Image iron = LoadImage("Ironii");
62    Image ironi = LoadImage("Ironiii");
63    Image ironii = LoadImage("Ironiiii");
64    Image ironiii = LoadImage("Ironiiiii");
65    Image CopperBrown = LoadImage("CopperBrown");
66    Image CopperGray = LoadImage("CopperGray");
67    Image CopperDarkGray = LoadImage("CopperDarkGrey");
68    Image CopperBlack = LoadImage("CopperBlack");
69    Image GoldGray = LoadImage("GoldGray");
70    Image GoldDarkGrey = LoadImage("GoldDarkGrey");
71    Image GoldBlack = LoadImage("GoldBlack");
72    Image DiamondGray = LoadImage("DiamondGray");
73    Image DiamondDarkGray = LoadImage("DiamondDarkGray");
74    Image DiamondBlack = LoadImage("DiamondBlack");
75    Image BedRock = LoadImage("säknyrokki");
76    Image Uraani = LoadImage("Uraani");
77
78
79
80    public override void Begin()
81    {
82        Peli = this;
83        SeuraavaKentta();
84
85        LuoKentta();
86        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
87        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta PEli?");
88
89
90        //Image iron = LoadImage("Iron");
91
92        Gravity = new Vector(0.0, -800.0);
93        Keyboard.Listen(Key.G, ButtonState.Pressed, PainovoimaMuutos, null, new Vector(0, 800));
94        Keyboard.Listen(Key.T, ButtonState.Pressed, PainovoimaMuutos, null, new Vector(0, -800));
95        Camera.ZoomFactor = 1.75;
96        Add(fysOlioita);
97
98        Keyboard.Listen(Key.Q, ButtonState.Pressed, CheatIkkuna, null);
99        Keyboard.Listen(Key.E, ButtonState.Pressed, KauppaIkkuna, null);
100        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti");
101        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LaukaiseYdinpommi, null);
102
103        MediaPlayer.Play("taustamusiikki");
104        MediaPlayer.IsRepeating = true;
105    }
106
107    void KauppaIkkuna()
108    {
109        MultiSelectWindow valikko = new MultiSelectWindow("Kauppa", "Kranaatti", "Ydinpommi", "Lopeta");
110        //valikko.ItemSelected += PainettiinNappia;
111        valikko.AddItemHandler(0, EnabloiKranaatti);
112        valikko.AddItemHandler(1, EnabloiYdinpommi);
113        Add(valikko);
114    }
115
116    void EnabloiKranaatti()
117    {
118        const int KRANAATIN_HINTA = 15;
119
120        if (pisteLaskuri.Value >= KRANAATIN_HINTA)
121        {
122            kranaatteja.Value++;
123            pisteLaskuri.Value -= KRANAATIN_HINTA;
124        }
125    }
126
127    void EnabloiYdinpommi()
128    {
129        const int YDINPOMMIN_HINTA_URAANEINA = 50;
130
131        if (uraania.Value >= YDINPOMMIN_HINTA_URAANEINA)
132        {
133            ydinpommeja.Value++;
134            uraania.Value -= YDINPOMMIN_HINTA_URAANEINA;
135        }
136    }
137
138    void HeitaKranaatti()
139    {
140        if (kranaatteja.Value <= 0) return;
141
142        Grenade g = new Grenade(10);
143        g.Position = tyyppi.Position;
144        g.CollisionIgnoreGroup = 2;
145        g.Explosion.Force = 1;
146        g.Explosion.Speed = 1000;
147        Add(g);
148        g.Hit(Vector.FromLengthAndAngle(1000, Angle.RightAngle));
149        g.Explosion.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector shokki) { RajahdysOsui(kohde, shokki, 5); };
150        kranaatteja.Value--;
151    }
152
153    void LaukaiseYdinpommi()
154    {
155        if (ydinpommeja.Value <= 0) return;
156
157        Grenade g = new Grenade(10);
158        g.Position = tyyppi.Position;
159        g.CollisionIgnoreGroup = 2;
160        g.Explosion.Force = 1;
161        g.Explosion.Speed = 1000;
162        g.Explosion.MaxRadius = 1000;
163        Add(g);
164        g.Hit(Vector.FromLengthAndAngle(1000, Angle.RightAngle));
165        g.Explosion.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector shokki) { RajahdysOsui(kohde, shokki, Int32.MaxValue); };
166        ydinpommeja.Value--;
167    }
168
169    void RajahdysOsui(IPhysicsObject kohde, Vector shokki, int damage)
170    {
171        Kivi k = kohde as Kivi;
172
173        if (k != null)
174            k.ElamaLaskuri.Value -= damage;
175    }
176
177    void CheatIkkuna()
178    {
179        MultiSelectWindow valikko = new MultiSelectWindow("Cheat Valikko", "Pickaxe", "Tykki", "Ydinpommi", "Takaisin");
180        valikko.ItemSelected += PainettiinValikonNappia;
181        Add(valikko);
182    }
183
184    void PainettiinValikonNappia(int valinta)
185    {
186        switch (valinta)
187        {
188            case 0:
189                tyyppiAse.FireRate = 2000000000000000000;
190                tyyppiAse.MaxAmmoLifetime = TimeSpan.FromSeconds(0.5);
191                break;
192            case 1:
193                tyyppiTykki = new Cannon(50, 10);
194                tyyppiTykki.InfiniteAmmo = true;
195                tyyppiTykki.ProjectileCollision = AmmusOsui;
196                tyyppiTykki.IsVisible = true;
197                tyyppi.Add(tyyppiTykki);
198
199                tyyppiAse.Destroy();
200
201                Keyboard.Listen(Key.Down, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(0.0, -1.0));
202                Keyboard.Listen(Key.Right, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(1.0, 0.0));
203                Keyboard.Listen(Key.Left, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(-1.0, 0.0));
204                Keyboard.Listen(Key.Up, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(0.0, 1.0));
205                break;
206            case 2:
207                ydinpommeja.Value += Int32.MaxValue;
208                break;
209            case 3:
210                break;
211        }
212    }
213
214    void LiikutaPelaajaa(PhysicsObject tyyppi, Vector vektori)
215    {
216        tyyppi.Push(vektori);
217    }
218    void LuoKentta()
219    {
220        TileMap ruudut = TileMap.FromLevelAsset("kentta");
221        kentta = new Kentta(ruudut.ColumnCount, ruudut.RowCount, "valeseina");
222
223        ruudut.SetTileMethod('#', LuoPalikka, Color.Brown, 0);
224        ruudut.SetTileMethod<Color, Image, int, int, string>('b', LuoValeSeina, Color.Brown, null, 1, 0, "");
225        ruudut.SetTileMethod<Color, Image, int, int, string>('v', LuoValeSeina, Color.Gray, null, 2, 0, "");
226        ruudut.SetTileMethod<Color, Image, int, int, string>('o', LuoValeSeina, Color.DarkGray, null, 3, 0, "");
227        ruudut.SetTileMethod<Color, Image, int, int, string>('t', LuoValeSeina, Color.Black, null, 5, 0, "");
228        ruudut.SetTileMethod('i', LuoValeSeina, Color.HotPink, iron, 3, 2, "");
229        ruudut.SetTileMethod('q', LuoValeSeina, Color.Red, ironi, 3, 2, "");
230        ruudut.SetTileMethod('e', LuoValeSeina, Color.Gold, ironii, 3, 2, "");
231        ruudut.SetTileMethod('p', LuoValeSeina, Color.Blue, GoldBlack, 3, 2, "");
232        ruudut.SetTileMethod('u', LuoValeSeina, Color.Azure, CopperBrown, 2, 1, "");
233        ruudut.SetTileMethod('y', LuoValeSeina, Color.Rose, CopperGray, 2, 1, "");
234        ruudut.SetTileMethod('x', LuoValeSeina, Color.SpringGreen, CopperDarkGray, 2, 1, "");
235        ruudut.SetTileMethod('0', LuoValeSeina, Color.YellowGreen, CopperBlack, 2, 1, "");
236        ruudut.SetTileMethod('a', LuoValeSeina, Color.Olive, GoldGray, 2, 3, "");
237        ruudut.SetTileMethod('s', LuoValeSeina, Color.JungleGreen, GoldDarkGrey, 2, 3, "");
238        ruudut.SetTileMethod('2', LuoValeSeina, Color.JungleGreen, BedRock, 30000000, 200, "");
239        // timantit.....Gray, DarkGray ja Black
240        ruudut.SetTileMethod('d', LuoValeSeina, Color.Emerald, DiamondGray, 4, 5, "");
241        ruudut.SetTileMethod('m', LuoValeSeina, Color.PaintDotNetMagenta, DiamondDarkGray, 4, 5, "");
242        ruudut.SetTileMethod('n', LuoValeSeina, Color.Transparent, DiamondBlack, 4, 5, "");
243        ruudut.SetTileMethod('5', LuoValeSeina, Color.Transparent, Uraani, 4, 5, "uraani");
244        ruudut.SetTileMethod('=', LuoPalikka, Color.Gray, 0);
245        ruudut.SetTileMethod('P', LuoPelaaja);
246        ruudut.Execute(30, 30);
247
248        pisteLaskuri = new IntMeter(0);
249        pisteNaytto = new Label();
250        pisteNaytto.BindTo(pisteLaskuri);
251        pisteNaytto.Title = "Pisteitä";
252        pisteNaytto.Position = new Vector(Screen.Left + 120, Screen.Top - 30);
253        Add(pisteNaytto);
254
255        Label kranaattiNaytto = new Label();
256        kranaattiNaytto.BindTo(kranaatteja);
257        kranaattiNaytto.Title = "Kranaatteja";
258        kranaattiNaytto.Position = new Vector(pisteNaytto.X, pisteNaytto.Y - 40);
259        Add(kranaattiNaytto);
260
261        Label uraaniNaytto = new Label();
262        uraaniNaytto.BindTo(uraania);
263        uraaniNaytto.Title = "Uraania";
264        uraaniNaytto.Position = new Vector(kranaattiNaytto.X, kranaattiNaytto.Y - 40);
265        Add(uraaniNaytto);
266    }
267    void LuoPalikka(Vector paikka, double leveys, double korkeus, IntPoint posInLevel, Color vari, int pisteet)
268    {
269        Kivi palikka = new Kivi(leveys, korkeus, 1);
270        palikka.MakeStatic();
271        palikka.PosInLevel = posInLevel;
272        palikka.Position = paikka;
273        palikka.Color = vari;
274        palikka.Data = new List<object>();
275        palikka.Data.Add(1); // koska pisteet pitää saada indeksiin 1
276        palikka.Data.Add(pisteet);
277        palikka.Data.Add("");
278        palikka.CollisionIgnoreGroup = 1;
279        kentta.LisaaSeina(posInLevel.X, posInLevel.Y, palikka);
280        Add(palikka);
281    }
282    void LuoPelaaja(Vector paikka, double leveys, double korkeus, IntPoint posInLevel)
283    {
284        tyyppi = new PhysicsObject(20, 20);
285        tyyppi.CollisionIgnoreGroup = 2;
286        Image TyyppiKuva = LoadImage("Tyyppi");
287        tyyppi.Image = TyyppiKuva;
288        tyyppi.CanRotate = false;
289        Add(tyyppi);
290
291        tyyppiAse = new AssaultRifle(35, 35);
292        tyyppiAse.InfiniteAmmo = true;
293        tyyppiAse.ProjectileCollision = AmmusOsui;
294        tyyppiAse.IsVisible = true;
295        tyyppiAse.AttackSound = null;
296        tyyppiAse.MaxAmmoLifetime = TimeSpan.FromMilliseconds(100);
297        Image aseKuva = LoadImage("Pickaxe");
298        tyyppiAse.Image = aseKuva;
299        tyyppi.Add(tyyppiAse);
300
301        Keyboard.Listen(Key.Down, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(0.0, -1.0));
302        Keyboard.Listen(Key.Right, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(1.0, 0.0));
303        Keyboard.Listen(Key.Left, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(-1.0, 0.0));
304        Keyboard.Listen(Key.Up, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(0.0, 1.0));
305
306        Camera.Follow(tyyppi);
307
308        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(-1000, 0));
309        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(1000, 0));
310        Keyboard.Listen(Key.Up, ButtonState.Pressed, LiikutaPelaajaa, null, tyyppi, new Vector(0, 1000));
311        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(0, -1000));
312    }
313
314    void AmmuAseella(AssaultRifle ase, Vector suunta)
315    {
316        ase.Angle = suunta.Angle;
317        PhysicsObject ammus = ase.Shoot();
318        if (ammus == null) return;
319        ammus.CollisionIgnoreGroup = 2;
320        ammus.IsVisible = false;
321    }
322
323    void AmmuTykilla(Cannon tykki, Vector suunta)
324    {
325        tykki.Angle = suunta.Angle;
326        PhysicsObject ammus = tykki.Shoot();
327        if (ammus == null) return;
328        ammus.IsVisible = true;
329        ammus.Size = new Vector(1000, 1000);
330
331        ammus.MaximumLifetime = TimeSpan.FromMilliseconds(1000);
332    }
333
334    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
335    {
336        if (kohde is Kivi)
337            ((Kivi)kohde).ElamaLaskuri.Value--;
338        else kohde.Destroy();
339    }
340
341    void LuoValeSeina(Vector paikka, double leveys, double korkeus, IntPoint posInLevel, Color vari, Image kuva, int kesto, int pisteet, string nimi)
342    {
343        GameObject valeseina = new GameObject(leveys, korkeus);
344        if(kuva != null) valeseina.Image = kuva;
345        valeseina.Position = paikka;
346        valeseina.Color = vari;
347        valeseina.PosInLevel = posInLevel;
348        valeseina.Tag = "valeseina";
349        valeseina.Data = new List<object>();
350        valeseina.Data.Add(kesto);
351        valeseina.Data.Add(pisteet);
352        valeseina.Data.Add(nimi);
353        kentta.LisaaSeina(posInLevel.X, posInLevel.Y, valeseina);
354        /*
355        if (vari == Color.HotPink)
356        {
357            valeseina.Image = iron;
358        }
359        if (vari == Color.Red)
360        {
361            valeseina.Image = ironi;
362        }
363        if (vari == Color.Gold)
364        {
365            valeseina.Image = ironii;
366        }
367        if (vari == Color.Blue)
368        {
369            valeseina.Image = ironiii;
370        }
371        if (vari == Color.Azure)
372        {
373            valeseina.Image = CopperBrown;
374        }
375        if (vari == Color.Rose)
376        {
377            valeseina.Image = CopperGray;
378        }
379        if (vari == Color.SpringGreen)
380        {
381            valeseina.Image = CopperDarkGray;
382        }
383        if (vari == Color.YellowGreen)
384        {
385            valeseina.Image = CopperBlack;
386        }
387        if (vari == Color.Olive)
388        {
389            valeseina.Image = GoldGray;
390        }
391        if (vari == Color.JungleGreen)
392        {
393            valeseina.Image = GoldDarkGrey;
394        }
395        if (vari == Color.Emerald)
396        {
397            valeseina.Image = DiamondGray;
398        }
399        if (vari == Color.PaintDotNetMagenta)
400        {
401            valeseina.Image = DiamondDarkGray;
402        }
403        if (vari == Color.Transparent)
404        {
405            valeseina.Image = DiamondBlack;
406        }
407         * */
408        Add(valeseina);
409    }
410
411    void PainovoimaMuutos(Vector painovoima)
412    {
413        Gravity = painovoima;
414    }
415    void SeuraavaKentta()
416    {
417        ClearAll();
418
419        if (kenttaNro == 1) LuoKentta("kentta");
420        else if (kenttaNro == 2) LuoKentta("kentta2");
421
422
423    }
424    void LuoKentta(string kentta)
425    {
426        TileMap ruudut = TileMap.FromLevelAsset(kentta);
427    }
428    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
429    {
430        kenttaNro++;
431        SeuraavaKentta();
432    }
433    void tormasipiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
434    {
435        SeuraavaKentta();
436    }
437
438    Label fysOlioita = new Label();
439
440    protected override void Update(Time time)
441    {
442        List<GameObject> fysiikkaoliot = GetObjects(x => x is PhysicsObject);
443        fysOlioita.Text = fysiikkaoliot.Count.ToString();
444
445        for (int i = 0; i < fysiikkaoliot.Count; i++)
446        {
447            PhysicsObject o = (PhysicsObject)fysiikkaoliot[i];
448
449            if (OnkoRuudulla(o.Position))
450                o.Body.IsCollidable = false;
451            else o.Body.IsCollidable = true;
452        }
453        base.Update(time);
454    }
455
456    bool OnkoRuudulla(Vector piste)
457    {
458        if (piste.X > Screen.Left && piste.X < Screen.Right)
459        {
460            if (piste.Y > Screen.Top && piste.Y < Screen.Bottom) return true;
461        }
462        return false;
463    }
464}
Note: See TracBrowser for help on using the repository browser.