source: 2009/aki_p/Pong/Peli.cs @ 10337

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