source: santeri_h/Pong/Peli.cs @ 250

Revision 250, 8.1 KB checked in by saolhaka, 11 years ago (diff)

kaikkee jännää

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;
17#endregion
18
19namespace Pong
20{
21    public class Peli : PhysicsGame
22    {
23        Vector2D nopeusYlos = new Vector2D(0, 750);
24        Vector2D nopeusAlas = new Vector2D(0, -750);
25
26        PhysicsObject pallo;
27        PhysicsObject pallo2;
28        PhysicsObject kolmio2;
29        PhysicsObject maila1;
30        PhysicsObject maila2;
31        PlasmaCannon ase;
32
33        Meter<int> pelaajan1Pisteet;
34        Meter<int> pelaajan2Pisteet;
35
36        protected override void LoadContent()
37        {
38            Level = LuoKentta();
39            AsetaOhjaimet();
40            LisaaLaskurit();
41            AloitaPeli();
42        }
43
44        Level LuoKentta()
45        {
46            Level kentta = new Level(this);
47            kentta.BackgroundColor = Color.Black;
48
49            IShape ympyra = Shapes.CreateCircle(20.0);
50            pallo = new PhysicsObject(2.0, ympyra);
51            pallo.X = -200.0;
52            pallo.Y = 0.0;
53            pallo.Restitution = 1.0;
54            kentta.Objects.Add(pallo);
55            AddCollisionHandler(pallo, KasittelePallonTormays);
56            pallo.Color = Color.White;
57
58            IShape ympyra2 = Shapes.CreateRectangle(20.0, 200.0);
59            pallo2 = new PhysicsObject(1.0, ympyra2);
60            pallo.X = -200.0;
61            pallo.Y = 119.0;
62            pallo.Restitution = 1.0;
63            kentta.Objects.Add(pallo2);
64            pallo2.Color = Color.Green;
65
66            IShape kolmio = Shapes.CreateTriangle(100.0, 175.0);
67            kolmio2 = new PhysicsObject(1.0, kolmio);
68            kolmio2.X = 200.0;
69            kolmio2.Y = -250.0;
70            kolmio2.Restitution = 1.0;
71            kentta.Objects.Add(kolmio2);
72            kolmio2.Color = Color.Yellow;
73
74            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
75            maila1.Color = Color.Blue;
76            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
77            maila2.Color = Color.Red;
78
79            kentta.CreateBorder(1.0, false);
80
81            return kentta;
82        }
83
84        PhysicsObject LuoMaila(double x, double y, Level kentta)
85        {
86            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
87            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
88            maila.X = x;
89            maila.Y = y;
90            maila.Restitution = 1.0;
91            kentta.Objects.Add(maila);
92
93            ase = new PlasmaCannon(new PlasmaParticle());
94            ase.SetOwner(maila, kentta);
95            ase.Visible = true;
96            ase.Color = Color.SteelBlue;
97            ase.FireRate = 1000;
98            ase.Power = new Meter<double>(5000, 5000, 5000);
99            kentta.Objects.Add(ase);
100
101            return maila;
102        }
103
104        void LisaaLaskurit()
105        {
106            pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
107            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
108        }
109
110        Meter<int> LuoPisteLaskuri(double x, double y)
111        {
112            Meter<int> laskuri = new Meter<int>(0, 0, 10);
113            ValueDisplay naytto = new ValueDisplay(this);
114            naytto.BindTo(laskuri);
115            naytto.X = x;
116            naytto.Y = y;
117            naytto.ValueColor = Color.White;
118            Add(naytto);
119            laskuri.UpperLimit += new Meter<int>.OnLimitHandler(laskuri_UpperLimit);
120            return laskuri;
121        }
122
123        void laskuri_UpperLimit(Meter<int> sender)
124        {
125            MessageDisplay.Add("Peli loppui");
126            MessageDisplay.X = -50;
127            MessageDisplay.Y = 0;
128            MessageDisplay.TextColor = Color.White;
129            pallo.Destroy();
130
131        }
132
133        void KasittelePallonTormays(Collision collision)
134        {
135
136            if (collision.Other == Level.RightBorder)
137            {
138                Vector2D impulssi = new Vector2D(200.0, 0.0);
139                collision.Obj.Hit(impulssi);
140                pelaajan1Pisteet.Value += 1;
141
142            }
143            else if (collision.Other == maila1)
144            {
145                Vector2D impulssi = new Vector2D(-200.0, 0.0);
146                collision.Obj.Hit(impulssi);
147
148            }
149            else if (collision.Other == Level.LeftBorder)
150            {
151                Vector2D impulssi = new Vector2D(-200.0, 0.0);
152                collision.Obj.Hit(impulssi);
153                pelaajan2Pisteet.Value += 1;
154            }
155            else if (collision.Other == maila2)
156            {
157                Vector2D impulssi = new Vector2D(200.0, 0.0);
158                collision.Obj.Hit(impulssi);
159            }
160        }
161
162        void AloitaPeli()
163        {
164            Vector2D impulssi = new Vector2D(1000.0, 0.0);
165            pallo.Hit(impulssi);
166        }
167
168        private Boolean Ammu(ControlEvent e)
169        {
170            // luodaan ammus
171            Projectile ammus = ase.Use();
172            if (ammus != null)
173            {
174                ammus.Position = ammus.Position + (Vector2D.FromLengthAndAngle(40, ase.Angle.Radian));
175                ammus.Push(ammus.Velocity); //?
176                ammus.IgnoresExplosions = true;
177                Level.Objects.Add(ammus);
178            }
179
180            return false;
181        }
182        void AsetaOhjaimet()
183        {
184            Controls.Listen(Keys.A, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
185            Controls.Listen(Keys.A, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
186            Controls.Listen(Keys.Z, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
187            Controls.Listen(Keys.Z, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
188            Controls.Listen(Keys.Space, ButtonPosition.Down, Ammu);
189
190            Controls.Listen(Keys.Up, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
191            Controls.Listen(Keys.Up, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
192            Controls.Listen(Keys.Down, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
193            Controls.Listen(Keys.Down, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
194            Controls.Listen(Keys.Enter, ButtonPosition.Down, Ammu);
195
196            AsetaGamePadOhjaimet(PlayerIndex.One, maila1);
197            AsetaGamePadOhjaimet(PlayerIndex.Two, maila2);
198        }
199
200        void AsetaGamePadOhjaimet(PlayerIndex pelaajaNumero, PhysicsObject maila)
201        {
202            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa ylös", maila, nopeusYlos);
203            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
204            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa alas", maila, nopeusAlas);
205            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
206        }
207
208        bool AsetaNopeus(ControlEvent e)
209        {
210            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
211            Vector2D nopeus = e.Parameter1.ToVector2D();
212
213            if ((nopeus.Y < 0) && (maila.Y < Level.Bottom))
214            {
215                maila.Velocity = Vector2D.Zero;
216                return false;
217            }
218            if ((nopeus.Y > 0) && (maila.Y > Level.Top))
219            {
220                maila.Velocity = Vector2D.Zero;
221                return false;
222            }
223
224            maila.Velocity = nopeus;
225
226            return false;
227        }
228    }
229}
Note: See TracBrowser for help on using the repository browser.