source: santeri_h/Pong/Peli.cs @ 227

Revision 227, 6.8 KB checked in by saolhaka, 11 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;
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
32        Meter<int> pelaajan1Pisteet;
33        Meter<int> pelaajan2Pisteet;
34
35        protected override void LoadContent()
36        {
37            Level = LuoKentta();
38            AsetaOhjaimet();
39            LisaaLaskurit();
40            AloitaPeli();
41        }
42
43        Level LuoKentta()
44        {
45            Level kentta = new Level(this);
46            kentta.BackgroundColor = Color.Black;
47
48            IShape ympyra = Shapes.CreateCircle(20.0);
49            pallo = new PhysicsObject(2.0, ympyra);
50            pallo.X = -200.0;
51            pallo.Y = 0.0;
52            pallo.Restitution = 1.0;
53            kentta.Objects.Add(pallo);
54            AddCollisionHandler(pallo, KasittelePallonTormays);
55            pallo.Color = Color.White;
56
57            IShape ympyra2 = Shapes.CreateRectangle(20.0, 200.0);
58            pallo2 = new PhysicsObject(1.0, ympyra2);
59            pallo.X = -200.0;
60            pallo.Y = 119.0;
61            pallo.Restitution = 1.0;
62            kentta.Objects.Add(pallo2);
63            pallo2.Color = Color.Green;
64
65            IShape kolmio = Shapes.CreateTriangle(100.0, 200.0);
66            kolmio2 = new PhysicsObject(1.0, kolmio);
67            kolmio2.X = 200.0;
68            kolmio2.Y = -250.0;
69            kolmio2.Restitution = 1.0;
70            kentta.Objects.Add(kolmio2);
71            kolmio2.Color = Color.Yellow;
72
73            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
74            maila1.Color = Color.Blue;
75            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
76            maila2.Color = Color.Red;
77
78            kentta.CreateBorder(1.0, false);
79
80            return kentta;
81        }
82
83        PhysicsObject LuoMaila(double x, double y, Level kentta)
84        {
85            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
86            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
87            maila.X = x;
88            maila.Y = y;
89            maila.Restitution = 1.0;
90            kentta.Objects.Add(maila);
91            return maila;
92        }
93
94        void LisaaLaskurit()
95        {
96            pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
97            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
98        }
99
100        Meter<int> LuoPisteLaskuri(double x, double y)
101        {
102            Meter<int> laskuri = new Meter<int>(0, 0, 10);
103            ValueDisplay naytto = new ValueDisplay(this);
104            naytto.BindTo(laskuri);
105            naytto.X = x;
106            naytto.Y = y;
107            naytto.ValueColor = Color.White;
108            Add(naytto);
109            return laskuri;
110        }
111
112        void KasittelePallonTormays(Collision collision)
113        {
114
115            if (collision.Other == Level.RightBorder)
116            {
117                Vector2D impulssi = new Vector2D(200.0, 0.0);
118                collision.Obj.Hit(impulssi);
119                pelaajan1Pisteet.Value += 1;
120
121            }
122            else if (collision.Other == maila1)
123            {
124                Vector2D impulssi = new Vector2D(-200.0, 0.0);
125                collision.Obj.Hit(impulssi);
126
127            }
128            else if (collision.Other == Level.LeftBorder)
129            {
130                Vector2D impulssi = new Vector2D(-200.0, 0.0);
131                collision.Obj.Hit(impulssi);
132                pelaajan2Pisteet.Value += 1;
133            }
134            else if (collision.Other == maila2)
135            {
136                Vector2D impulssi = new Vector2D(200.0, 0.0);
137                collision.Obj.Hit(impulssi);
138            }
139        }
140
141        void AloitaPeli()
142        {
143            Vector2D impulssi = new Vector2D(1000.0, 0.0);
144            pallo.Hit(impulssi);
145        }
146
147        void AsetaOhjaimet()
148        {
149            Controls.Listen(Keys.A, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
150            Controls.Listen(Keys.A, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
151            Controls.Listen(Keys.Z, ButtonPosition.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
152            Controls.Listen(Keys.Z, ButtonPosition.Released, AsetaNopeus, null, maila1, Vector2D.Zero);
153
154            Controls.Listen(Keys.Up, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
155            Controls.Listen(Keys.Up, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
156            Controls.Listen(Keys.Down, ButtonPosition.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
157            Controls.Listen(Keys.Down, ButtonPosition.Released, AsetaNopeus, null, maila2, Vector2D.Zero);
158
159            AsetaGamePadOhjaimet(PlayerIndex.One, maila1);
160            AsetaGamePadOhjaimet(PlayerIndex.Two, maila2);
161        }
162
163        void AsetaGamePadOhjaimet(PlayerIndex pelaajaNumero, PhysicsObject maila)
164        {
165            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa ylös", maila, nopeusYlos);
166            Controls.Listen(pelaajaNumero, Buttons.DPadUp, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
167            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Down, AsetaNopeus, "Liikuta mailaa alas", maila, nopeusAlas);
168            Controls.Listen(pelaajaNumero, Buttons.DPadDown, ButtonPosition.Released, AsetaNopeus, null, maila, Vector2D.Zero);
169        }
170
171        bool AsetaNopeus(ControlEvent e)
172        {
173            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
174            Vector2D nopeus = e.Parameter1.ToVector2D();
175
176            if ((nopeus.Y < 0) && (maila.Y < Level.Bottom))
177            {
178                maila.Velocity = Vector2D.Zero;
179                return false;
180            }
181            if ((nopeus.Y > 0) && (maila.Y > Level.Top))
182            {
183                maila.Velocity = Vector2D.Zero;
184                return false;
185            }
186
187            maila.Velocity = nopeus;
188
189            return false;
190        }
191    }
192}
Note: See TracBrowser for help on using the repository browser.