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

Revision 4965, 10.9 KB checked in by taeekotr, 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            DigToChina.Peli.kentta.TuhoaSeina(this.PosInLevel.X, this.PosInLevel.Y);
32        };
33
34    }
35
36}
37
38
39public class DigToChina : PhysicsGame
40{
41    public Kentta kentta;
42    public static DigToChina Peli;
43
44    PhysicsObject tyyppi;
45
46    AssaultRifle tyyppiAse;
47    Cannon tyyppiTykki;
48
49    int kenttaNro = 1;
50
51    public IntMeter pisteLaskuri;
52    Label pisteNaytto;
53
54    Image iron = LoadImage("Ironii");
55    Image ironi = LoadImage("Ironiii");
56    Image ironii = LoadImage("Ironiiii");
57    Image ironiii = LoadImage("Ironiiiii");
58    Image CopperBrown = LoadImage("CopperBrown");
59    Image CopperGray = LoadImage("CopperGray");
60    Image CopperDarkGray = LoadImage("CopperDarkGrey");
61    Image CopperBlack = LoadImage("CopperBlack");
62    Image GoldGray = LoadImage("GoldGray");
63    Image GoldDarkGrey = LoadImage("GoldDarkGrey");
64
65    public override void Begin()
66    {
67        Peli = this;
68        SeuraavaKentta();
69
70        LuoKentta();
71        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
72        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta PEli?");
73
74
75        //Image iron = LoadImage("Iron");
76
77        Gravity = new Vector(0.0, -800.0);
78        Keyboard.Listen(Key.G, ButtonState.Pressed, PainovoimaMuutos, null, new Vector(0, 800));
79        Keyboard.Listen(Key.T, ButtonState.Pressed, PainovoimaMuutos, null, new Vector(0, -800));
80        Camera.ZoomFactor = 1.75;
81        Add(fysOlioita);
82
83        Keyboard.Listen(Key.Q, ButtonState.Pressed, KauppaIkkuna, null);
84
85       
86    }
87
88    void KauppaIkkuna()
89    {
90        MultiSelectWindow valikko = new MultiSelectWindow("Cheat Valikko","Pickaxe", "Lopeta");
91        valikko.ItemSelected += PainettiinValikonNappia;
92        Add(valikko);
93    }
94
95    void PainettiinValikonNappia(int valinta)
96    {
97        switch (valinta)
98        {
99            case 0:
100                tyyppiAse.FireRate = 2000000000000000000;
101               
102                break;
103            case 1:
104                tyyppiTykki = new Cannon(50, 10);
105                tyyppiTykki.InfiniteAmmo = true;
106                tyyppiTykki.ProjectileCollision = AmmusOsui;
107                tyyppiTykki.IsVisible = true;
108                tyyppi.Add(tyyppiTykki);
109
110
111
112                tyyppiAse.Destroy();
113
114                Keyboard.Listen(Key.Down, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(0.0, -1.0));
115                Keyboard.Listen(Key.Right, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(1.0, 0.0));
116                Keyboard.Listen(Key.Left, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(-1.0, 0.0));
117                Keyboard.Listen(Key.Up, ButtonState.Down, AmmuTykilla, "Ammu", tyyppiTykki, new Vector(0.0, 1.0));
118
119
120
121                break;
122
123        }
124    }
125
126    void LiikutaPelaajaa(PhysicsObject tyyppi, Vector vektori)
127    {
128        tyyppi.Push(vektori);
129    }
130    void LuoKentta()
131    {
132        TileMap ruudut = TileMap.FromLevelAsset("kentta");
133        kentta = new Kentta(ruudut.ColumnCount, ruudut.RowCount, "valeseina");
134
135        ruudut.SetTileMethod('#', LuoPalikka, Color.Brown, 0);
136        ruudut.SetTileMethod('b', LuoValeSeina, Color.Brown, 1, 0);
137        ruudut.SetTileMethod('v', LuoValeSeina, Color.Gray, 2, 0);
138        ruudut.SetTileMethod('o', LuoValeSeina, Color.DarkGray, 3, 0);
139        ruudut.SetTileMethod('i', LuoValeSeina, Color.HotPink, 3, 2);
140        ruudut.SetTileMethod('q', LuoValeSeina, Color.Red, 3, 2);
141        ruudut.SetTileMethod('e', LuoValeSeina, Color.Gold, 3, 2);
142        ruudut.SetTileMethod('t', LuoValeSeina, Color.Black, 5, 2);
143        ruudut.SetTileMethod('p', LuoValeSeina, Color.Blue, 3, 2);
144        ruudut.SetTileMethod('u', LuoValeSeina, Color.Azure, 2, 1);
145        ruudut.SetTileMethod('y', LuoValeSeina, Color.Rose, 2, 1);
146        ruudut.SetTileMethod('x', LuoValeSeina, Color.SpringGreen, 2, 1);
147        ruudut.SetTileMethod('0', LuoValeSeina, Color.YellowGreen, 2, 1);
148        ruudut.SetTileMethod('a', LuoValeSeina, Color.Olive, 2, 3);
149        ruudut.SetTileMethod('s', LuoValeSeina, Color.JungleGreen, 2, 3);
150        ruudut.SetTileMethod('=', LuoPalikka, Color.Gray, 0);
151        ruudut.SetTileMethod('P', LuoPelaaja);
152        ruudut.Execute(30, 30);
153
154        pisteLaskuri = new IntMeter(0);
155        pisteNaytto = new Label();
156        pisteNaytto.BindTo(pisteLaskuri);
157        pisteNaytto.Title = "Pisteitä";
158        pisteNaytto.Position = new Vector(Screen.Left + 120, Screen.Top - 30);
159        Add(pisteNaytto);
160    }
161    void LuoPalikka(Vector paikka, double leveys, double korkeus, IntPoint posInLevel, Color vari, int pisteet)
162    {
163        Kivi palikka = new Kivi(leveys, korkeus, 1);
164        palikka.MakeStatic();
165        palikka.PosInLevel = posInLevel;
166        palikka.Position = paikka;
167        palikka.Color = vari;
168        palikka.Data = new List<object>();
169        palikka.Data.Add(1); // koska pisteet pitää saada indeksiin 1
170        palikka.Data.Add(pisteet);
171        palikka.CollisionIgnoreGroup = 1;
172        kentta.LisaaSeina(posInLevel.X, posInLevel.Y, palikka);
173        Add(palikka);
174    }
175    void LuoPelaaja(Vector paikka, double leveys, double korkeus, IntPoint posInLevel)
176    {
177        tyyppi = new PhysicsObject(20, 20);
178        Image TyyppiKuva = LoadImage("Tyyppi");
179        tyyppi.Image = TyyppiKuva;
180        tyyppi.CanRotate = false;
181        Add(tyyppi);
182
183        tyyppiAse = new AssaultRifle(30, 10);
184        tyyppiAse.InfiniteAmmo = true;
185        tyyppiAse.ProjectileCollision = AmmusOsui;
186        tyyppiAse.IsVisible = true;
187        tyyppi.Add(tyyppiAse);
188
189        Keyboard.Listen(Key.Down, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(0.0, -1.0));
190        Keyboard.Listen(Key.Right, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(1.0, 0.0));
191        Keyboard.Listen(Key.Left, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(-1.0, 0.0));
192        Keyboard.Listen(Key.Up, ButtonState.Down, AmmuAseella, "Ammu", tyyppiAse, new Vector(0.0, 1.0));
193
194
195
196
197        Camera.Follow(tyyppi);
198
199        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(-1000, 0));
200        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(1000, 0));
201        Keyboard.Listen(Key.Up, ButtonState.Pressed, LiikutaPelaajaa, null, tyyppi, new Vector(0, 1000));
202        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, tyyppi, new Vector(0, -1000));
203
204    }
205
206
207    void AmmuAseella(AssaultRifle ase, Vector suunta)
208    {
209        ase.Angle = suunta.Angle;
210        PhysicsObject ammus = ase.Shoot();
211        if (ammus == null) return;
212        ammus.IsVisible = true;
213        ammus.MaximumLifetime = TimeSpan.FromMilliseconds(100);
214    }
215
216    void AmmuTykilla(Cannon tykki, Vector suunta)
217    {
218        tykki.Angle = suunta.Angle;
219        PhysicsObject ammus = tykki.Shoot();
220        if (ammus == null) return;
221        ammus.IsVisible = true;
222        ammus.Size = new Vector (100, 100);
223
224        ammus.MaximumLifetime = TimeSpan.FromMilliseconds(10000000);
225    }
226
227    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
228    {
229        if (kohde is Kivi)
230            ((Kivi)kohde).ElamaLaskuri.Value--;
231        else kohde.Destroy();
232    }
233
234    void LuoValeSeina(Vector paikka, double leveys, double korkeus, IntPoint posInLevel, Color vari, int kesto, int pisteet)
235    {
236        GameObject valeseina = new GameObject(leveys, korkeus);
237        valeseina.Position = paikka;
238        valeseina.Color = vari;
239        valeseina.PosInLevel = posInLevel;
240        valeseina.Tag = "valeseina";
241        valeseina.Data = new List<object>();
242        valeseina.Data.Add(kesto);
243        valeseina.Data.Add(pisteet);
244        kentta.LisaaSeina(posInLevel.X, posInLevel.Y, valeseina);
245        if (vari == Color.HotPink)
246        {
247            valeseina.Image = iron;
248        }
249        if (vari == Color.Red)
250        {
251            valeseina.Image = ironi;
252        }
253        if (vari == Color.Gold)
254        {
255            valeseina.Image = ironii;
256        }
257        if (vari == Color.Blue)
258        {
259            valeseina.Image = ironiii;
260        }
261        if (vari == Color.Azure)
262        {
263            valeseina.Image = CopperBrown;
264        }
265        if (vari == Color.Rose)
266        {
267            valeseina.Image = CopperGray;
268        }
269        Add(valeseina);
270        if (vari == Color.SpringGreen)
271        {
272            valeseina.Image = CopperDarkGray;
273        }
274        if (vari == Color.YellowGreen)
275        {
276            valeseina.Image = CopperBlack;
277        }
278        if (vari == Color.Olive)
279        {
280            valeseina.Image = GoldGray;
281        }
282        if (vari == Color.JungleGreen)
283        {
284            valeseina.Image = GoldDarkGrey;
285        }
286        Add(valeseina);
287    }
288
289    void PainovoimaMuutos(Vector painovoima)
290    {
291        Gravity = painovoima;
292    }
293    void SeuraavaKentta()
294    {
295        ClearAll();
296
297        if (kenttaNro == 1) LuoKentta("kentta");
298        else if (kenttaNro == 2) LuoKentta("kentta2");
299
300
301    }
302    void LuoKentta(string kentta)
303    {
304        TileMap ruudut = TileMap.FromLevelAsset(kentta);
305    }
306    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
307    {
308        kenttaNro++;
309        SeuraavaKentta();
310    }
311    void tormasipiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
312    {
313        SeuraavaKentta();
314    }
315
316    Label fysOlioita = new Label();
317
318    protected override void Update(Time time)
319    {
320        List<GameObject> fysiikkaoliot = GetObjects(x => x is PhysicsObject);
321        fysOlioita.Text = fysiikkaoliot.Count.ToString();
322
323        for (int i = 0; i < fysiikkaoliot.Count; i++)
324        {
325            PhysicsObject o = (PhysicsObject)fysiikkaoliot[i];
326
327            if (OnkoRuudulla(o.Position))
328                o.Body.IsCollidable = false;
329            else o.Body.IsCollidable = true;
330        }
331        base.Update(time);
332    }
333
334    bool OnkoRuudulla(Vector piste)
335    {
336        if (piste.X > Screen.Left && piste.X < Screen.Right)
337        {
338            if (piste.Y > Screen.Top && piste.Y < Screen.Bottom) return true;
339        }
340        return false;
341    }
342   
343}
Note: See TracBrowser for help on using the repository browser.