source: 2013/24/IlariR/Robot attack/Robot attack/Robot attack/Robot_attack.cs @ 4092

Revision 4092, 10.6 KB checked in by ilkarist, 6 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Robot_attack : PhysicsGame
10{
11    Image tykkiKuva = LoadImage("tykki");
12    Image tatainkuva = LoadImage("tahtain");
13    Image luodinKuva = LoadImage("luoti3");
14    Image taustakuva = LoadImage("tausta2");
15    Image avainkuva = LoadImage("avain");
16    Image lukkokuva = LoadImage("lukko");
17    SoundEffect ampuminen = LoadSoundEffect("ampuminen");
18    SoundEffect rajahdysaani = LoadSoundEffect("rajahdys2");
19    SoundEffect robotaani = LoadSoundEffect("robotaani");
20
21    Robot robot;
22    PhysicsObject ase;
23    IntMeter pisteLaskuri;
24    EasyHighScore topLista = new EasyHighScore();
25   
26
27    public override void Begin()
28    {
29        Alkuvalikko();
30    }
31
32    void Aloitapeli()
33    {
34        ClearAll();
35        LuoKentta();
36        LuoOhjaimet();
37        LuoPistelaskuri();
38        Mouse.IsCursorVisible = true;
39       
40        robotaani.Play();
41       
42        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
43        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
44    }
45
46    void LiikutaPelaajaa(Vector vektori)
47    {
48        robot.Push(vektori);
49    }
50
51    void Tahtaa(AnalogState hiirenLiike)
52    {
53        Vector suunta = (Mouse.PositionOnWorld - ase.AbsolutePosition).Normalize();
54        //ase.Angle = suunta.Angle;
55        ase.ApplyTorque((ase.Angle.Radians - suunta.Angle.Radians) * 100000);
56    }
57
58    void TahtaaNappaimella(int suunta)
59    {
60        ase.ApplyTorque(suunta);
61    }
62
63    void LuoOhjaimet()
64    {
65        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 4500));
66        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-4500, 0));
67        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -4500));
68        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(4500, 0));
69        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuAseella, null, ase, 400.0);
70
71        Keyboard.Listen(Key.Left, ButtonState.Down, TahtaaNappaimella, null, 25000);
72        Keyboard.Listen(Key.Right, ButtonState.Down, TahtaaNappaimella, null, -25000);
73        //Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
74    }
75
76    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
77    {
78        Robot vihollinen = new Robot(leveys, korkeus, 2);
79        vihollinen.Position = paikka;
80        vihollinen.Color = Color.Red;
81        vihollinen.Shape = Shape.Diamond;
82        vihollinen.Tag = "vihollinen";
83        vihollinen.CollisionIgnoreGroup = 3;
84        vihollinen.Destroyed += delegate { pisteLaskuri.AddValue(100); };
85        Timer ajastin = new Timer();
86        ajastin.Interval = 2;
87        ajastin.Timeout +=
88            delegate
89            {
90                if (vihollinen.IsDestroyed)
91                {
92                    ajastin.Stop(); return;
93                }
94                AmmuAseella(vihollinen, 200);
95            };
96        ajastin.Start();
97
98        FollowerBrain aivot = new FollowerBrain("Pelaaja");
99        vihollinen.Brain = aivot;
100        aivot.TurnWhileMoving = true;
101        aivot.Speed = 70
102            ;
103        vihollinen.Elamat.LowerLimit += delegate { TuhoaJaRajahda(vihollinen); };
104        Add(vihollinen);
105
106    }
107
108    void LuoPistelaskuri()
109    {
110        pisteLaskuri = new IntMeter(0);
111
112        Label pisteNaytto = new Label();
113        pisteNaytto.X = Screen.Left + 100;
114        pisteNaytto.Y = Screen.Top - 100;
115        pisteNaytto.TextColor = Color.Black;
116        pisteNaytto.Color = Color.White;
117
118        pisteNaytto.BindTo(pisteLaskuri);
119        Add(pisteNaytto);
120    }
121
122    void LuoLiikkumatonVihollinen(Vector paikka, double leveys, double korkeus)
123    {
124        Robot vihollinen = new Robot(leveys*1.5, korkeus*1.5, 8);
125        vihollinen.Position = paikka;
126        vihollinen.Color = Color.Red;
127        vihollinen.Shape = Shape.Triangle;
128        vihollinen.Tag = "vihollinen";
129        vihollinen.CollisionIgnoreGroup = 3;
130        Timer ajastin = new Timer();
131        ajastin.Interval = 1;
132        vihollinen.Destroyed += delegate { pisteLaskuri.AddValue(500); };
133        ajastin.Timeout +=
134            delegate
135            {
136                if (vihollinen.IsDestroyed)
137                {
138                    ajastin.Stop(); return;
139                }
140                AmmuAseella(vihollinen, 700);
141            };
142        ajastin.Start();
143
144        FollowerBrain aivot = new FollowerBrain("Pelaaja");
145        vihollinen.Brain = aivot;
146        aivot.TurnWhileMoving = true;
147        aivot.Speed = 0
148            ;
149        vihollinen.Elamat.LowerLimit += delegate { TuhoaJaRajahda(vihollinen); };
150        Add(vihollinen);
151
152    }
153    void AmmuAseella(PhysicsObject obj, double ammuksenNopeus)
154    {
155        PhysicsObject ammus = new PhysicsObject(30, 10);
156        ammus.Image = luodinKuva;
157        AddCollisionHandler(ammus, AmmusTormaa);
158        ammus.Angle = obj.Angle;
159        ammus.Velocity = Vector.FromLengthAndAngle(ammuksenNopeus, obj.Angle);
160        ammus.CollisionIgnoreGroup = obj.CollisionIgnoreGroup;
161        ammus.Position = obj.Position + Vector.FromLengthAndAngle(10, obj.Angle);
162        Add(ammus);
163    }
164
165
166    void AmmusTormaa(PhysicsObject ammus, PhysicsObject kohde)
167    {
168        ammus.Destroy();
169
170        if(kohde.Tag.Equals("ase"))
171        {
172            //Törmäyskäsittelijä aseeseen osuneita ammuksia varten
173            robot.Elamat.Value--;
174            return;
175        }
176
177
178        if (!(kohde is Robot)) return;
179        Robot robotti = (Robot)kohde;
180        if (kohde.Tag.Equals("Pelaaja")) robotti.Elamat.Value--;
181        if(kohde.Tag.Equals("vihollinen")) robotti.Elamat.Value--;
182
183    }
184   
185    void LuoKentta()
186    {
187        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
188        ruudut.SetTileMethod("00FF00", LuoLukko);
189        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
190        ruudut.SetTileMethod(Color.Black, LuoTaso);
191        ruudut.SetTileMethod(Color.Red, LuoVihollinen);
192        ruudut.SetTileMethod("BA006E", LuoLiikkumatonVihollinen);
193        ruudut.SetTileMethod("FFD800", LuoAvain);
194        ruudut.Execute(50, 50);
195        Level.BackgroundColor = Color.Black;
196        //Level.Background.CreateGradient(Color.Yellow, Color.Orange);
197        Level.Background.Image = taustakuva;
198        Level.Background.FitToLevel();
199    }
200
201    void LuoLukko(Vector paikka, double leveys, double korkeus)
202    {
203        PhysicsObject lukko = PhysicsObject.CreateStaticObject(leveys, korkeus);
204        lukko.Position = paikka;
205        lukko.Image = lukkokuva;
206        lukko.CollisionIgnoreGroup = 0;
207        Add(lukko);
208
209        AddCollisionHandler(robot, lukko, Avaalukko);
210    }
211
212    void Avaalukko(PhysicsObject tormaaja, PhysicsObject kohde)
213    {
214        if (robot.avain)
215        {
216            kohde.Destroy();
217            pisteLaskuri.Value += 250;
218        }
219    }
220
221    void LuoAvain(Vector paikka, double leveys, double korkeus)
222    {
223        PhysicsObject Avain = PhysicsObject.CreateStaticObject(leveys, korkeus);
224        Avain.Position = paikka;
225        Avain.Image = avainkuva;
226        Avain.CollisionIgnoreGroup = 0;
227        Add(Avain);
228
229        AddCollisionHandler(robot, Avain, KeraaAvain);
230    }
231
232    void KeraaAvain(PhysicsObject tormaaja, PhysicsObject kohde)
233    {
234        robot.avain = true;
235        kohde.Destroy();
236    }
237
238
239
240    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
241    {
242        robot = new Robot(leveys, korkeus, 5);
243        robot.Position = paikka;
244        robot.Shape = Shape.Hexagon;
245        robot.Color = Color.Cyan;
246        robot.LinearDamping = 0.6;
247        robot.CollisionIgnoreGroup = 1;
248        robot.CanRotate = false;
249        robot.Tag = "Pelaaja";
250        //AddCollisionHandler(robot, );
251        Add(robot);
252        robot.Elamat.LowerLimit += delegate { TuhoaJaRajahda(robot); };
253        robot.Destroyed += PeliLoppui;
254
255        ase = new PhysicsObject(tykkiKuva);
256        ase.Shape = Shape.FromImage(tykkiKuva);
257        ase.Position = robot.Position;
258        ase.AngularDamping = 0.9;
259        ase.Tag = "ase";
260        ase.Size *= 0.5;
261        ase.CollisionIgnoreGroup = 1;
262        Add(ase);
263
264        AxleJoint liitos = new AxleJoint(robot, ase, robot.Position);
265        Add(liitos);
266
267
268        /*
269        ase = new Cannon(leveys, korkeus/5);
270        ase.Image = tykkiKuva;
271        ase.Size *= 2;
272        robot.Add(ase);
273         */
274
275        Camera.Follow(robot);
276        Camera.ZoomFactor = 2;
277    }
278
279    void PeliLoppui()
280    {
281        topLista.EnterAndShow(pisteLaskuri.Value);
282        topLista.HighScoreWindow.Closed += PeliLoppuiValikko;
283    }
284
285    void PeliLoppuiValikko(Window sender)
286    {
287        MultiSelectWindow ikkuna = new MultiSelectWindow("Game Over!", "Aloita alusta", "Lopeta");
288        ikkuna.ItemSelected += ValikkoValinta;
289        Add(ikkuna);
290
291    }
292
293
294    void ValikkoValinta(int valinta)
295    {
296        switch (valinta)
297        {
298            case 0:
299                Aloitapeli();
300                break;
301            case 1:
302                Exit();
303                break;
304            default:
305                break;
306        }
307    }
308
309
310    void TuhoaJaRajahda(PhysicsObject obj)
311    {
312        Explosion rajahdys = new Explosion(100);
313        rajahdys.Sound = rajahdysaani;
314        rajahdys.Position = obj.Position;
315        Add(rajahdys);
316        obj.Destroy();
317    }
318
319    void LuoTaso(Vector paikka, double leveys, double korkeus)
320    {
321        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
322        taso.Position = paikka;
323        //taso.Image = groundImage;
324        taso.CollisionIgnoreGroup = 2;
325        taso.Color = new Color(66, 83, 240);
326        Add(taso);
327    }
328
329    void Alkuvalikko()
330    {
331        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
332        alkuValikko.AddItemHandler(0, Aloitapeli);
333        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
334        alkuValikko.AddItemHandler(2, Exit);
335
336        Add(alkuValikko);
337    }
338}
339
340public class Robot : PhysicsObject
341{
342    IntMeter elamat;
343    public bool avain;
344    public IntMeter Elamat { get { return elamat; } }
345
346    public Robot(double leveys, double korkeus, int elamia)
347        : base(leveys, korkeus)
348    {
349        elamat = new IntMeter(elamia, 0, elamia);
350        avain = false;
351    }
352
353    IntMeter pisteLaskuri;
354
355}
Note: See TracBrowser for help on using the repository browser.