source: 2009/panu_l/Pong/Peli.cs @ 5421

Revision 446, 5.1 KB checked in by vesal, 12 years ago (diff)

kokeilua

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        const double mailanNopeus = 200.0;
24
25        PhysicsObject pallo; 
26        PhysicsObject pallo2;
27        PhysicsObject maila1;
28        PhysicsObject maila2;
29        Meter<int> pelaajan1Pisteet;
30        Meter<int> pelaajan2Pisteet;
31
32       
33        protected override void LoadContent()
34        {
35            Level = LuoKentta();
36            AsetaOhjaimet();
37            LisaaLaskurit();
38
39            AloitaPeli();
40
41
42        }
43        Level LuoKentta()
44        {
45            Level kentta = new Level(this);
46            kentta.BackgroundColor = Color.Purple;
47
48            IShape ympyra = Shapes.CreateCircle(20.0);
49            //IShape suorakaide = Shapes.CreateRectangle(50.8, 50);
50            //PhysicsObject pallo = new PhysicsObject(10.0, suorakaide);
51            pallo = new PhysicsObject(10.0, ympyra);
52            //PhysicsObject olio = new PhysicsObject(10, Shapes.CreateRectangle(100, 100));
53            //olio.Color = new Color(255, 0, 150);
54            //Level.Objects.Add(olio);
55
56
57            pallo.X = -300.0;
58            pallo.Y = -100.0;
59            pallo.Restitution = 1.1;
60            //pallo.MomentOfInertia = double.PositiveInfinity;
61
62            IShape ympyra2 = Shapes.CreateCircle(20.0);
63            pallo2 = new PhysicsObject(10.0, ympyra2);
64            pallo2.X = 290.0;
65            pallo2.Y = 90.0;
66            pallo2.Restitution = 1.1;
67
68
69            kentta.Objects.Add(pallo);
70            kentta.Objects.Add(pallo2);
71
72            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
73            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
74
75
76
77            kentta.CreateBorder(2.0, true);
78            AddCollisionHandler(pallo, KasittelePallonTormays);
79
80            return kentta;
81        }
82        void AloitaPeli()
83        {
84            Vector2D impulssi = new Vector2D(5000.0, 1000.0);
85            pallo.Hit(impulssi);
86
87            Vector2D impulssi2 = new Vector2D(-5000.0, -1000.0);
88            pallo2.Hit(impulssi);
89        }
90
91
92        PhysicsObject LuoMaila(double x, double y, Level kentta)
93        {
94            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
95            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
96            maila.X = x;
97            maila.Y = y;
98            maila.Restitution = 1.1;
99            kentta.Objects.Add(maila);
100            return maila;
101        }
102        void AsetaOhjaimet()
103        {
104            Controls.Listen(Keys.A, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 1: Liikuta mailaa ylös", maila1, 200.0);
105            Controls.Listen(Keys.Z, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 1: Liikuta mailaa alas", maila1, -200.0);
106
107            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 2: Liikuta mailaa ylös", maila2, 200.0);
108            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikutaMailaa, "Pelaaja 2: Liikuta mailaa alas", maila2, -200.0);
109
110
111        }
112
113        bool LiikutaMailaa(ControlEvent e)
114        {
115            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
116            double nopeus = 2*e.Parameter1.ToDouble();
117            double sekuntejaKulunut = e.Time.ElapsedGameTime.TotalSeconds;
118            double uusiY = maila.Y + nopeus * sekuntejaKulunut;
119
120            if ((Level.Bottom < uusiY) && (uusiY < Level.Top))
121            {
122                maila.Y = uusiY;
123            }
124
125            return false;
126        }
127        void LisaaLaskurit()
128        {
129            double x1 = Screen.Left + 100.0;
130            double y1 = Screen.Top - 100.0;
131            pelaajan1Pisteet = LuoPisteLaskuri(x1, y1);
132
133            double x2 = Screen.Right - 100.0;
134            double y2 = Screen.Top - 100.0;
135            pelaajan2Pisteet = LuoPisteLaskuri(x2, y2);
136        }
137        Meter<int> LuoPisteLaskuri(double x, double y)
138        {
139            Meter<int> laskuri = new Meter<int>(0, 0, 10);
140            ValueDisplay naytto = new ValueDisplay(this);
141            naytto.BindTo(laskuri);
142            naytto.X = x;
143            naytto.Y = y;
144            naytto.ValueColor = Color.White;
145            Add(naytto);
146            return laskuri;
147        }
148        void KasittelePallonTormays(Collision collision)
149        {
150            PhysicsObject pallo = collision.Obj;
151            PhysicsObject kohde = collision.Other;
152
153            if (kohde == Level.RightBorder)
154            {
155                pelaajan1Pisteet.Value += 1;
156            }
157            else if (kohde == Level.LeftBorder)
158            {
159                pelaajan2Pisteet.Value += 1;
160            }
161        }
162
163
164
165
166
167    }
168
169
170}
171
Note: See TracBrowser for help on using the repository browser.