source: aapo_p/FysiikkaPeli2/Peli.cs @ 148

Revision 148, 18.9 KB checked in by aaalalpe, 12 years ago (diff)
Line 
1#region Usings
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Jypeli;
12using Jypeli.ScreenObjects;
13using Jypeli.Assets;
14using AdvanceMath;
15using Physics2DDotNet;
16using Physics2DDotNet.Shapes;
17using Physics2DDotNet.Ignorers;
18#endregion
19
20namespace Defendyourhouse
21{
22    //keskeneräiset:
23    //neliöistä luodaan rajat, koodi on pohjalla
24    //vaihtoehtoisesti tiilistä tehdään reunat(mieluisa vaihtoehto)
25    //laita oma hahmo kuntoon
26    //tornit, ja ampuminen kaikille
27    //päivien vaihtuminen ja vihollisten määrän kasvaminen ja ulkomuodon muuttuminen
28    //mahdollisesti myös pistelaskuri
29    //ota selvää miksi nelön luominen ei onnistu????
30    //miksi hahmo1 on ohjaus-aliohjelmissa "null"??????????????????????????????
31
32
33    public class Peli : PhysicsGame
34    {
35        ValueDisplay rahaNaytto;
36
37        PhysicsObject waypoint;
38        PhysicsObject waypoint2;
39        PhysicsObject waypoint3;
40        PhysicsObject waypoint4;
41        PhysicsObject hahmo1;
42
43        List<ProjectileWeapon> aseet = new List<ProjectileWeapon>();
44        List<BattleObject> viholliset = new List<BattleObject>();
45
46        Meter<int> rahaLaskuri;
47
48        ListSelectionWindow menu;
49        ListSelectionWindow menu2;
50
51        protected override void LoadContent()
52        {           
53            Menu();
54            Level.BackgroundColor = Color.Aquamarine;
55        }
56
57        void AsetaOhjaimet()
58        {
59            Controls.Listen(Keys.M, ButtonPosition.Down, menua, "menu");
60            Controls.Listen(Keys.W, ButtonPosition.Down, ylös, "ylöspäin", hahmo1);
61            Controls.Listen(Keys.S, ButtonPosition.Down, alas, "alaspäin", hahmo1);
62            Controls.Listen(Keys.A, ButtonPosition.Down, vasemmalle, "vasemmalle", hahmo1);
63            Controls.Listen(Keys.D, ButtonPosition.Down, oikealle, "oikealle", hahmo1);
64            Controls.Listen(Keys.B, ButtonPosition.Down, ostovalikko, "osta");
65            ShowMouseCursor(true);
66        }
67
68        void addtile(double x, double y)
69        {
70            IShape tiilenmuoto = Shapes.CreateRectangle(100.0, 100.0);
71            PhysicsObject tiili = PhysicsObject.CreateStaticObject(tiilenmuoto);
72            Texture2D tiilikuva = Content.Load<Texture2D>("tiili2");
73            tiili.Texture = tiilikuva;
74            Level.Objects.Add(tiili);
75            tiili.X = x;
76            tiili.Y = y;
77
78        }
79        Boolean ostovalikko(ControlEvent e)
80        {
81            menu2 = new ListSelectionWindow(this);
82            menu2.AddItem("torni1").Clicked += new ScreenObject.ClickEventHandler(Buy);
83            //menu2.AddItem("torni2").Clicked += new ScreenObject.ClickEventHandler(Buy2);
84            ShowWindow(menu2);
85            return false;
86        }
87        void Buy(ScreenObject sender)
88        {
89            menu2.Close();
90            foreach (ScreenObject olio in menu2.Objects)
91            {
92                olio.Controls.Enabled = false;
93            }
94
95            PhysicsObject d = luotorni(0, 0);
96            if (d == null) return;
97
98            Controls.Listen(MouseButtons.Left, ButtonPosition.Irrelevant, 0.1, siirra, "siirtää tornia", d);
99            Controls.Listen(d, MouseButtons.Left, ButtonPosition.Pressed, 0, asetatorni, "siirtää tornia");
100        }
101        //void Buy2(ScreenObject sender)
102        //{
103        //    menu2.Close();
104        //    PhysicsObject f = luotorni2(0, 0);
105        //    Controls.Listen(MouseButtons.Left, ButtonPosition.Irrelevant, 0.1, siirra, "siirtää tornia", f);
106        //    Controls.Listen(f, MouseButtons.Left, ButtonPosition.Pressed, 0, asetatorni, "siirtää tornia");
107
108
109        //}
110        bool siirra(ControlEvent e)
111        {
112            if (e.Parameter0 == null) return false;
113            Vector2D j = Controls.Mouse.GetPositionOnWorld(Camera);
114            PhysicsObject torni = e.Parameter0 as PhysicsObject;
115            torni.Position = j;
116            return false;
117        }
118
119        bool asetatorni(ControlEvent e)
120        {
121            Controls.DisableControls(0, e.GameObject);
122            return false;
123        }
124
125        Boolean Menu()
126        {
127            LuoRahaLaskuri();
128
129            menu = new ListSelectionWindow(this);
130            menu.AddItem("aloita");
131            menu.AddItem("lopeta");
132            menu.ItemSelected += new ListSelectionWindow.ListItemHandler(menu_ItemSelected);
133            Add(menu);
134
135            return false;
136        }
137
138        void menu_ItemSelected(ListSelectionWindow sender, TextDisplay selection)
139        {
140            if (selection.Text == "aloita")
141            {
142                aloita();
143                return;
144            }
145            if (selection.Text == "lopeta")
146            {
147                lopeta();
148                return;
149            }
150
151        }
152
153        bool lopeta()
154        {
155            Exit();
156            return false;
157        }
158
159        bool aloita()
160        {
161            rahaNaytto.Visible = true;
162            menu.Close();
163
164            foreach (ScreenObject olio in menu.Objects)
165            {
166                olio.Controls.Enabled = false;
167            }
168
169            SetFocus(this);
170            addhero();
171            LuoViholliset();
172
173            asetatiilet();
174            AsetaOhjaimet();
175            Level.Background.Image = Content.Load<Texture2D>("tiili1");
176            Level.Background.FitToLevel(Level);
177            MessageDisplay.Add(Level.Width.ToString());
178
179            Timer ajastin = new Timer();
180            ajastin.Interval = 1;
181            ajastin.Trigger += new Timer.TriggerHandler(tarkistaampuminen);
182            AddTimer(ajastin);
183            ajastin.Start();
184
185
186            return false;
187        }
188        void tarkistaampuminen(Timer sender)
189        {
190            foreach (var ase in aseet)
191            {
192                foreach (var vihu in viholliset)
193                {
194                    if ((ase.Position - vihu.Position).Magnitude < 1000)
195                    {
196                        MessageDisplay.Add("PUM!!");
197                    }
198                }
199            }                       
200        }
201
202        private void LuoViholliset()
203        {
204            waypoint = luoWaypoint(Level.Left.ToInt() + 350, 0);
205            waypoint2 = luoWaypoint(Level.Left.ToInt() + 350, 450);
206            waypoint3 = luoWaypoint(Level.Right.ToInt() - 350,  450);
207            waypoint4 = luoWaypoint(Level.Right.ToInt() - 500, Level.Bottom.ToInt() + 100);
208
209            int vihollistenMaara = 20;
210
211
212            for (int i = 0; i < vihollistenMaara; i++)
213            {
214                int a = i * 50;
215                addenemy(a);
216            }
217        }
218
219        private PhysicsObject luoWaypoint(int x, int y)
220        {
221            IShape wp = Shapes.CreateRectangle(50.0, 50.0);
222            PhysicsObject waypoint = new PhysicsObject(1, wp);
223            waypoint.IgnoresCollisionResponse = true;
224            waypoint.Visible = false;
225
226            waypoint.X = x;
227            waypoint.Y = y;
228            Level.Objects.Add(waypoint);
229            return waypoint;
230        }
231
232        void addenemy(int x)
233        {
234            IShape nelio = Shapes.CreateRectangle(50.0, 50.0);
235            BattleObject vihu = new BattleObject(nelio, 10.0, 100);
236            Texture2D joku = Content.Load<Texture2D>("enemy1");
237            vihu.AnimatedTexture = AnimatedTexture.FromTexture2D(joku, 320, false);
238            Level.Objects.Add(vihu);
239            vihu.X = Level.Left - x;
240            vihu.Y = 0;
241            vihu.Restitution = 0.0;
242            vihu.Body.CollisionIgnorer = hahmo1.Body.CollisionIgnorer;
243            Vector2D impulssi2 = new Vector2D(600.0, 0.0);
244            vihu.Hit(impulssi2);
245
246            AddCollisionHandler(vihu, TultiinWaypointille);
247
248            viholliset.Add(vihu);
249        }
250
251        void TultiinWaypointille(Collision c)
252        {
253            if (c.Other == waypoint)
254            {
255
256
257                c.Obj.Velocity = new Vector2D(0, 0);
258                Vector2D impulssikok = new Vector2D(0, 600);
259                c.Obj.Hit(impulssikok);
260                return;
261            }
262
263            if (c.Other == waypoint2)
264            {
265
266
267
268                c.Obj.Velocity = new Vector2D(0, 0);
269                Vector2D impulssitaas = new Vector2D(600, 0);
270                c.Obj.Hit(impulssitaas);
271                return;
272            }
273            if (c.Other == waypoint3)
274            {
275                MessageDisplay.Add("törmäys");
276               
277                c.Obj.Velocity = new Vector2D(0, 0);
278                Vector2D impulssitaas1 = new Vector2D(0, -600);
279                c.Obj.Hit(impulssitaas1);
280                return;
281            }
282            if (c.Other == waypoint4)
283            {
284                MessageDisplay.Add("uusitörmäys");
285
286                c.Obj.Velocity = new Vector2D(0, 0);
287                Vector2D impulssitaas2 = new Vector2D(600, 0);
288                c.Obj.Hit(impulssitaas2);
289                return;
290            }
291            /*if (c.Other == waypoint5)
292            {
293                c.Obj.Velocity = new Vector2D(0, 0);
294                Vector2D impulssitaas3 = new Vector2D(0,600);
295                c.Obj.Hit(impulssitaas);
296                return;
297            }*/
298        }
299
300        void addhero()
301        {
302            IShape nelia = Shapes.CreateRectangle(50.0, 50.0);
303            hahmo1 = new PhysicsObject(10.0, nelia);
304            Texture2D hahmo = Content.Load<Texture2D>("hahmo1");
305            hahmo1.Texture = hahmo;
306            Level.Objects.Add(hahmo1);
307            hahmo1.X = Level.Right - 25;
308            hahmo1.Y = 0;
309            //hahmo1.IgnoresCollisionResponse = true;
310            hahmo1.Body.CollisionIgnorer = new ObjectIgnorer();
311        }
312
313        PhysicsObject luotorni(int x, int y)
314        {
315            if (rahaLaskuri.Value == 0)
316            {
317                return null;
318            }
319
320            IShape kuvio = Shapes.CreateRectangle(50.0, 50.0);
321            PhysicsObject tykkitorni = PhysicsObject.CreateStaticObject(kuvio);
322            Texture2D kuviot = Content.Load<Texture2D>("tykkitorni1");
323            tykkitorni.Texture = kuviot;
324            Level.Objects.Add(tykkitorni);
325            tykkitorni.X = x;
326            tykkitorni.Y = y;
327            tykkitorni.IgnoresCollisionResponse = true;
328            rahaLaskuri.Value -= 100;
329
330            ProjectileWeapon ase = new ProjectileWeapon();
331            Level.Objects.Add(ase);
332            ase.Visible = false;
333
334            Level.Objects.Attach(tykkitorni, new Vector2D(0, 0), ase, new Vector2D(0, 0));
335
336            aseet.Add(ase);
337
338            return tykkitorni;
339        }
340
341        bool menua(ControlEvent e)
342        {
343            Menu();
344
345            return false;
346        }
347
348        bool alas(ControlEvent e)
349        {
350            PhysicsObject hahmo = e.Parameter0.ToPhysicsObject();
351            hahmo.Y += -5.0;
352
353            return false;
354        }
355
356        bool ylös(ControlEvent e)
357        {
358            PhysicsObject hahmo = e.Parameter0.ToPhysicsObject();
359            hahmo.Y += 5.0;
360
361            return false;
362        }
363
364        bool oikealle(ControlEvent e)
365        {
366            PhysicsObject hahmo = e.Parameter0.ToPhysicsObject();
367            hahmo.X += 5.0;
368            return false;
369        }
370
371        bool vasemmalle(ControlEvent e)
372        {
373            PhysicsObject hahmo = e.Parameter0.ToPhysicsObject();
374            hahmo.X += -5.0;
375            return false;
376        }
377       
378        void asetatiilet()
379        {
380            addtile(Level.Left, Level.Top);
381            addtile(Level.Left, Level.Top - 100);
382            addtile(Level.Left, Level.Top - 200);
383            addtile(Level.Left, Level.Top - 300);
384            addtile(Level.Left, Level.Top - 400);
385            addtile(Level.Left, Level.Top);
386            addtile(Level.Left, Level.Bottom);
387            addtile(Level.Left, Level.Bottom + 100);
388            addtile(Level.Left, Level.Bottom + 200);
389            addtile(Level.Left, Level.Bottom + 300);
390            addtile(Level.Left, Level.Bottom + 400);
391            addtile(Level.Left + 100, Level.Top);
392            addtile(Level.Left + 100, Level.Top - 100);
393            addtile(Level.Left + 100, Level.Top - 200);
394            addtile(Level.Left + 100, Level.Top - 300);
395            addtile(Level.Left + 100, Level.Top - 400);
396            addtile(Level.Left + 100, Level.Top);
397
398            addtile(Level.Left + 100, Level.Bottom + 100);
399            addtile(Level.Left + 100, Level.Bottom + 200);
400            addtile(Level.Left + 100, Level.Bottom + 300);
401            addtile(Level.Left + 100, Level.Bottom + 400);
402            addtile(Level.Left + 200, Level.Top);
403            addtile(Level.Left + 200, Level.Top - 100);
404            addtile(Level.Left + 200, Level.Top - 200);
405            addtile(Level.Left + 200, Level.Top - 300);
406            addtile(Level.Left + 200, Level.Top - 400);
407            addtile(Level.Left + 200, Level.Top);
408            addtile(Level.Left + 200, Level.Bottom);
409            addtile(Level.Left + 200, Level.Bottom + 100);
410            addtile(Level.Left + 200, Level.Bottom + 200);
411            addtile(Level.Left + 200, Level.Bottom + 300);
412            addtile(Level.Left + 200, Level.Bottom + 400);
413            addtile(Level.Left + 300, Level.Bottom + 100);
414            addtile(Level.Left + 400, Level.Bottom + 100);
415            addtile(Level.Left + 400, Level.Top);
416            addtile(Level.Left + 300, Level.Top);
417            addtile(Level.Left + 400, Level.Top - 200);
418            addtile(Level.Left + 400, Level.Top - 300);
419            addtile(Level.Left + 400, Level.Top - 400);
420            addtile(Level.Left + 400, Level.Top);
421            addtile(Level.Left + 400, Level.Bottom);
422            addtile(Level.Left + 400, Level.Bottom + 100);
423            addtile(Level.Left + 400, Level.Bottom + 200);
424            addtile(Level.Left + 400, Level.Bottom + 300);
425            addtile(Level.Left + 400, Level.Bottom + 400);
426            addtile(Level.Left + 400, Level.Bottom + 500);
427            addtile(Level.Left + 400, Level.Bottom + 600);
428
429            addtile(Level.Left + 300, Level.Bottom + 100);
430            addtile(Level.Left + 300, Level.Bottom + 200);
431            addtile(Level.Left + 300, Level.Bottom + 300);
432            addtile(Level.Left + 300, Level.Bottom + 400);
433
434            addtile(Level.Left + 500, Level.Bottom);
435            addtile(Level.Left + 500, Level.Bottom + 100);
436            addtile(Level.Left + 500, Level.Bottom + 200);
437            addtile(Level.Left + 500, Level.Bottom + 300);
438            addtile(Level.Left + 500, Level.Bottom + 400);
439            addtile(Level.Left + 500, Level.Bottom + 500);
440            addtile(Level.Left + 500, Level.Bottom + 600);
441
442            addtile(Level.Left + 600, Level.Bottom);
443            addtile(Level.Left + 600, Level.Bottom + 100);
444            addtile(Level.Left + 600, Level.Bottom + 200);
445            addtile(Level.Left + 600, Level.Bottom + 300);
446            addtile(Level.Left + 600, Level.Bottom + 400);
447            addtile(Level.Left + 600, Level.Bottom + 500);
448            addtile(Level.Left + 600, Level.Bottom + 600);
449
450            addtile(Level.Left + 700, Level.Bottom);
451            addtile(Level.Left + 700, Level.Bottom + 100);
452            addtile(Level.Left + 700, Level.Bottom + 200);
453            addtile(Level.Left + 700, Level.Bottom + 300);
454            addtile(Level.Left + 700, Level.Bottom + 400);
455            addtile(Level.Left + 700, Level.Bottom + 500);
456            addtile(Level.Left + 700, Level.Bottom + 600);
457
458            addtile(Level.Left + 800, Level.Bottom);
459            addtile(Level.Left + 800, Level.Bottom + 100);
460            addtile(Level.Left + 800, Level.Bottom + 200);
461            addtile(Level.Left + 800, Level.Bottom + 300);
462            addtile(Level.Left + 800, Level.Bottom + 400);
463            addtile(Level.Left + 800, Level.Bottom + 500);
464            addtile(Level.Left + 800, Level.Bottom + 600);
465
466
467            addtile(Level.Left + 1000, Level.Bottom + 100);
468            addtile(Level.Left + 1000, Level.Bottom + 200);
469            addtile(Level.Left + 1000, Level.Bottom + 300);
470            addtile(Level.Left + 1000, Level.Bottom + 400);
471            addtile(Level.Left + 1000, Level.Bottom + 500);
472            addtile(Level.Left + 1000, Level.Bottom + 600);
473            addtile(Level.Left + 1000, Level.Bottom + 700);
474            addtile(Level.Left + 1000, Level.Bottom + 800);
475            addtile(Level.Left + 1000, Level.Bottom + 900);
476            addtile(Level.Left + 1000, Level.Bottom + 1000);
477
478            addtile(Level.Left + 600, Level.Top - 200);
479            addtile(Level.Left + 600, Level.Top - 300);
480            addtile(Level.Left + 600, Level.Top - 400);
481            addtile(Level.Left + 700, Level.Top - 200);
482            addtile(Level.Left + 700, Level.Top - 300);
483            addtile(Level.Left + 700, Level.Top - 400);
484            addtile(Level.Left + 800, Level.Top - 200);
485            addtile(Level.Left + 800, Level.Top - 300);
486            addtile(Level.Left + 800, Level.Top - 400);
487            addtile(Level.Left + 500, Level.Top - 200);
488            addtile(Level.Left + 500, Level.Top - 300);
489            addtile(Level.Left + 500, Level.Top - 400);
490
491            addtile(Level.Left + 600, Level.Top);
492            addtile(Level.Left + 700, Level.Top);
493            addtile(Level.Left + 800, Level.Top);
494            addtile(Level.Left + 900, Level.Top);
495            addtile(Level.Left + 1000, Level.Top);
496
497            addtile(Level.Right, Level.Bottom);
498            addtile(Level.Right, Level.Bottom + 100);
499            addtile(Level.Right, Level.Bottom + 200);
500            addtile(Level.Right, Level.Bottom + 300);
501            addtile(Level.Right, Level.Bottom + 400);
502            addtile(Level.Right, Level.Bottom + 500);
503            addtile(Level.Right, Level.Bottom + 600);
504            addtile(Level.Right, Level.Bottom + 700);
505            addtile(Level.Right, Level.Bottom + 800);
506            addtile(Level.Right, Level.Bottom + 900);
507            addtile(Level.Right, Level.Bottom + 1100);
508            addtile(Level.Right, Level.Bottom + 1200);
509            addtile(Level.Right, Level.Bottom + 1300);
510
511
512
513        }
514        void LuoRahaLaskuri()
515        {
516            rahaLaskuri = new Meter<int>(500, 0, int.MaxValue);
517            rahaNaytto = new ValueDisplay(this);
518            rahaNaytto.BindTo(rahaLaskuri);
519            rahaNaytto.X = Level.Left + 100 ;
520            rahaNaytto.Y = Level.Bottom + 40;
521            rahaNaytto.ValueColor = Color.White;
522            rahaNaytto.Visible = false;
523            Add(rahaNaytto);
524        }
525
526
527    }
528}
529//nelio.Angle = nelio.Angle + Angle.Degrees(50);
530//           base.Update(gameTime);
Note: See TracBrowser for help on using the repository browser.