source: lassi_h/Pong2/Peli.cs @ 42

Revision 42, 5.4 KB checked in by tekrjant, 10 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 Pong2
20{ 
21    public class Peli : PhysicsGame
22    { 
23        PhysicsObject pallo;
24        PhysicsObject maila1;
25        PhysicsObject maila2;
26        Meter<int> pelaajan1Pisteet;
27        Meter<int> pelaajan2Pisteet;
28        Level LuoKentta()
29        {
30            Level kentta = new Level(this);
31            kentta.BackgroundColor = Color.Black;
32            IShape ympyra = Shapes.CreateCircle(20.0);
33            pallo = new PhysicsObject(10.0, ympyra);
34            pallo.X = -200.0;
35            pallo.Y = 0.0;
36            pallo.Restitution = 2.0;
37            kentta.Objects.Add(pallo);
38            maila1 = LuoMaila(kentta.Left + 20.0, 0.0, kentta);
39            maila2 = LuoMaila(kentta.Right - 20.0, 0.0, kentta);
40            kentta.CreateBorder(1.0, false);
41            AddCollisionHandler(pallo, KasittelePallonTormays);
42            return kentta;
43        }
44        void KasittelePallonTormays(Collision collision)
45        {
46            PhysicsObject pallo = collision.Obj;
47            PhysicsObject kohde = collision.Other;
48
49            if (kohde == Level.RightBorder)
50            {
51                pelaajan1Pisteet.Value += 1;
52            }
53            else if (kohde == Level.LeftBorder)
54            {
55                pelaajan2Pisteet.Value += 1;
56            }
57        }
58
59
60
61        PhysicsObject LuoMaila(double x, double y, Level kentta)
62        {
63            IShape suorakulmio = Shapes.CreateRectangle(20.0, 100.0);
64            PhysicsObject maila = PhysicsObject.CreateStaticObject(suorakulmio);
65            maila.X = x;
66            maila.Y = y;
67            maila.Restitution = 1.0;
68            kentta.Objects.Add(maila);
69            return maila;
70        }
71
72        void LisaaLaskurit()
73        {
74            pelaajan1Pisteet = LuoPisteLaskuri( Screen.Left + 100.0, Screen.Top - 100.0 );
75            pelaajan2Pisteet = LuoPisteLaskuri( Screen.Right - 100.0, Screen.Top - 100);
76        }
77
78
79        bool LiikutaMailaaYlösAlas(ControlEvent e)
80        {
81            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
82            double nopeus = e.Parameter1.ToDouble();
83            double sekuntejaKulunut = e.Time.ElapsedGameTime.TotalSeconds;
84            double uusiY = maila.Y + nopeus * sekuntejaKulunut;
85
86            if ((Level.Bottom < uusiY) && (uusiY < Level.Top))
87            {
88                maila.Y = uusiY;
89            }
90
91            return false;
92        }
93        bool LiikutaMailaaSivulle(ControlEvent e)
94        {
95            PhysicsObject maila = e.Parameter0.ToPhysicsObject();
96            double nopeus = e.Parameter1.ToDouble();
97            double sekuntejaKulunut = e.Time.ElapsedGameTime.TotalSeconds;
98            double uusiX = maila.X + nopeus * sekuntejaKulunut;
99
100            if ((Level.Left < uusiX) && (uusiX < Level.Right))
101            {
102                maila.X = uusiX;
103            }
104
105            return false;
106        }
107        bool Turbo(ControlEvent e)
108        {
109            pallo.Color = new Color(255,0,0);
110            return false;
111        }
112
113        void AsetaOhjaimet()
114        {
115            Controls.Listen(Keys.W, ButtonPosition.Down, LiikutaMailaaYlösAlas, "Pelaaja 1: Liikuta mailaa ylös", maila1, 200.0);
116            Controls.Listen(Keys.S, ButtonPosition.Down, LiikutaMailaaYlösAlas, "Pelaaja 1: Liikuta mailaa alas", maila1, -200.0);
117            Controls.Listen(Keys.A, ButtonPosition.Down, LiikutaMailaaSivulle, "Pelaaja 1: Liikuta mailaa vasemmalle", maila1, -200.0);
118            Controls.Listen(Keys.D, ButtonPosition.Down, LiikutaMailaaSivulle, "Pelaaja 1: Liikuta mailaa oikealle", maila1, 200.0);
119            Controls.Listen(Keys.Space, ButtonPosition.Down, Turbo);
120            Controls.Listen(Keys.Up, ButtonPosition.Down, LiikutaMailaaYlösAlas, "Pelaaja 2: Liikuta mailaa ylös", maila2, 200.0);
121            Controls.Listen(Keys.Down, ButtonPosition.Down, LiikutaMailaaYlösAlas, "Pelaaja 2: Liikuta mailaa alas", maila2, -200.0);
122            Controls.Listen(Keys.Left, ButtonPosition.Down, LiikutaMailaaSivulle, "Pelaaja 2: Liikuta mailaa vasemmalle", maila2, -200.0);
123            Controls.Listen(Keys.Right, ButtonPosition.Down, LiikutaMailaaSivulle, "Pelaaja 2: Liikuta mailaa oikealle", maila2, 200.0);
124        }
125
126        Meter<int> LuoPisteLaskuri(double x, double y)
127        {
128            Meter<int> laskuri = new Meter<int>(0, 0, 10);
129            ValueDisplay naytto = new ValueDisplay(this);
130            naytto.BindTo(laskuri);
131            naytto.X = x;
132            naytto.Y = y;
133            naytto.ValueColor = Color.White;
134            Add(naytto);
135            return laskuri;
136        }
137
138        protected override void LoadContent() 
139        { 
140            Level = LuoKentta(); 
141            AloitaPeli();
142            AsetaOhjaimet();
143            LisaaLaskurit();
144        }
145
146        void AloitaPeli() 
147        { 
148            Vector2D impulssi = new Vector2D( 2000.0, 0.0 ); 
149           
150            pallo.Hit( impulssi ); 
151       } 
152    } 
153} 
Note: See TracBrowser for help on using the repository browser.