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

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