source: joonas_s/Pong/Peli.cs @ 315

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