source: 2014/koodauskerho/38/AakeR/Destroy/Destroy/Destroy/Destroy.cs @ 5758

Revision 5758, 6.8 KB checked in by sieerinn, 7 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
9public class Destroy : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15
16    Image pelaajanKuva = LoadImage("norsu");
17    Image tahtiKuva = LoadImage("tahti");
18    Image pommiKuva = LoadImage("TNT");
19    Image palikkaKuva = LoadImage("Palikka");
20    Image puuKuva = LoadImage("PuuPalikka");
21    Image puuKuva2 = LoadImage("PuuPalikka2");
22    Image mustaAukkoKuva = LoadImage("MustaAukko");
23
24    SoundEffect maaliAani = LoadSoundEffect("maali");
25    List<PhysicsObject> palikat = new List<PhysicsObject>();
26
27    public override void Begin()
28    {
29        UusiPeli();
30
31        //Camera.ZoomFactor = 1.5;
32        //Camera.ZoomToLevel();
33        IsFullScreen = true;
34        Camera.StayInLevel = true;
35    }
36
37    void LuoKentta()
38    {
39        ClearAll();
40        palikat.Clear();
41        Gravity = new Vector(0, -1000);
42
43        TileMap kentta = TileMap.FromLevelAsset("kentta1");
44        kentta.SetTileMethod('#', LisaaTaso);
45        kentta.SetTileMethod('?', LisaaPalikka);
46        kentta.SetTileMethod('&', LisaaPuu);
47        kentta.SetTileMethod('*', LisaaTahti);
48        kentta.SetTileMethod('+', LisaaPuu2);
49        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
50        Level.CreateBorders();
51        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
52    }
53
54    void LisaaTaso(Vector paikka, double leveys, double korkeus)
55    {
56        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
57        taso.Position = paikka;
58        taso.Color = Color.Gray;
59        Add(taso);
60        taso.Restitution = 0.3;
61    }
62
63    void LisaaTahti(Vector paikka, double leveys, double korkeus)
64    {
65        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
66        tahti.IgnoresCollisionResponse = true;
67        tahti.Position = paikka;
68        tahti.Image = tahtiKuva;
69        tahti.Tag = "tahti";
70        Add(tahti);
71    }
72
73    void LisaaPuu(Vector paikka, double leveys, double korkeus)
74    {
75        PhysicsObject puu = new PhysicsObject(leveys*3, korkeus);
76        puu.Position = paikka;
77        puu.Color = Color.Green;
78        Add(puu);
79        palikat.Add(puu);
80        puu.Image = puuKuva;
81        puu.Mass = 20.0;
82        puu.Tag = "palikka";
83    }
84
85    void LisaaPuu2(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject puu = new PhysicsObject(leveys, korkeus*3);
88        puu.Position = paikka;
89        puu.Color = Color.Green;
90        Add(puu);
91        palikat.Add(puu);
92        puu.Image = puuKuva2;
93        puu.Mass = 20.0;
94        puu.Tag = "palikka";
95    }
96
97    void LisaaNappaimet()
98    {
99        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, LuoPommi, "Luo Pommi");
102        Keyboard.Listen(Key.R, ButtonState.Pressed, UusiPeli, "Uusi peli");
103        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, LuoAukko, "Luo Musta aukko");
104
105
106        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
107    }
108
109    void Liikuta(PlatformCharacter hahmo, double nopeus)
110    {
111        hahmo.Walk(nopeus);
112    }
113
114    void Hyppaa(PlatformCharacter hahmo, double nopeus)
115    {
116        hahmo.Jump(nopeus);
117    }
118
119    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
120    {
121        maaliAani.Play();
122        MessageDisplay.Add("Keräsit tähden!");
123        tahti.Destroy();
124    }
125    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
126    {
127        PhysicsObject palikka = new PhysicsObject(leveys, korkeus);
128        palikka.Position = paikka;
129        palikka.Color = Color.Green;
130        Add(palikka);
131        palikat.Add(palikka);
132        palikka.Image = palikkaKuva;
133        palikka.Mass = 10.0;
134        palikka.Tag = "palikka";
135    }
136
137    void LuoPommi()
138    {
139        Vector paikka = Mouse.PositionOnWorld;
140        if (paikka.X < Level.Right - 50 && paikka.X > Level.Left + 50)
141            if (paikka.Y < Level.Top - 50)
142            {
143                PhysicsObject pommi = new PhysicsObject(80, 50);
144                pommi.Tag = "palikka";
145                pommi.Position = Mouse.PositionOnWorld;
146
147                bool onkoSisalla = false;
148                for (int i = 0; i < palikat.Count; i++)
149                {
150                    if (pommi.IsInside(palikat[i].Position)) { onkoSisalla = true; break; }
151                }
152                if (onkoSisalla == false)
153                {
154                    pommi.Color = Color.Green;
155                    pommi.Image = pommiKuva;
156                    pommi.Mass = 10.0;
157                    pommi.Restitution = 0.3;
158                    Timer.SingleShot(3.0, delegate { Rajahdys(pommi); });
159
160                    Add(pommi);
161                }
162            }
163    }
164
165    void Rajahdys(PhysicsObject pommi)
166    {
167        Explosion rajahdys = new Explosion(150);
168        rajahdys.Position = pommi.Position;
169        Add(rajahdys);
170        pommi.Destroy();
171
172    }
173
174    void UusiPeli()
175    {
176        LuoKentta();
177        LisaaNappaimet();
178        Mouse.IsCursorVisible = true;
179    }
180
181    void LuoAukko()
182    {
183        Vector paikka = Mouse.PositionOnWorld;
184        PhysicsObject mustaAukko = new PhysicsObject(100, 100);
185        mustaAukko.Position = paikka;
186        Add(mustaAukko);
187        mustaAukko.Image = mustaAukkoKuva;
188        mustaAukko.IgnoresGravity = true;
189        //mustaAukko.IsVisible = false;
190        //TimeSpan elinIka = ;
191        mustaAukko.MaximumLifetime = new TimeSpan(0, 0, 3);
192        mustaAukko.IgnoresCollisionResponse = true;
193        mustaAukko.AngularAcceleration = -25;
194        mustaAukko.RotateImage = true;
195
196        //Explosion rajahdys = new Explosion(500);
197        //rajahdys.Position = mustaAukko.Position;
198        //rajahdys.Force = -25;
199        mustaAukko.IgnoresExplosions = true;
200        //Add(rajahdys);
201        //rajahdys.Image = mustaAukkoKuva;
202
203        Timer ajastin = new Timer();
204        ajastin.Interval = 0.01;
205        ajastin.Timeout += delegate
206        {
207            //rajahdys.AbsoluteAngle -= Angle.FromDegrees(1);
208            foreach (var obj in GetObjectsWithTag("palikka"))
209            {
210                if (obj is PhysicsObject)
211                {
212                    double voima = 1 * (2250000 / Vector.Distance(mustaAukko.Position, ((PhysicsObject)obj).Position));
213                    ((PhysicsObject)obj).Push((mustaAukko.Position - ((PhysicsObject)obj).Position).Normalize() * voima);
214                }
215            }
216        };
217        ajastin.Start();
218        Timer.SingleShot(3, ajastin.Stop);
219    }
220
221}
Note: See TracBrowser for help on using the repository browser.