source: 2010/23/kajysail/Pong/Peli.cs @ 10337

Revision 552, 6.7 KB checked in by kajysail, 11 years ago (diff)

Sain pistelaskun toimimaan.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6namespace Pong
7{
8    public class Peli : PhysicsGame
9    {
10        PhysicsObject pallo;
11        PhysicsObject maila1;
12        PhysicsObject maila2;
13
14        PhysicsObject vasenReuna;
15        PhysicsObject oikeaReuna;
16
17        Vector nopeusYlos = new Vector(0, 200);
18        Vector nopeusAlas = new Vector(0, -200);
19
20        IntMeter pelaajan1Pisteet;
21        IntMeter pelaajan2Pisteet;
22
23        protected override void Begin()
24        {
25            LuoKentta();
26            AsetaOhjaimet();
27            LisaaLaskurit();
28            AloitaPeli();
29        }
30
31        void LuoKentta()
32        {
33            pallo = new PhysicsObject(40.0, 40.0);
34            pallo.Shape = Shapes.Circle;
35            pallo.X = -200.0;
36            pallo.Y = -50.0;
37            pallo.Restitution = 1.0;
38            Add(pallo);
39
40            AddCollisionHandler(pallo, KasittelePallonTormays);
41
42            maila1 = LuoMaila(Level.Left + 20.0, 0.0);
43            maila2 = LuoMaila(Level.Right - 20.0, 0.0);
44
45            vasenReuna = Level.CreateLeftBorder();
46            vasenReuna.Restitution = 1.0;
47            vasenReuna.IsVisible = false;
48
49            oikeaReuna = Level.CreateRightBorder();
50            oikeaReuna.Restitution = 1.0;
51            oikeaReuna.IsVisible = false;
52
53           
54
55            PhysicsObject ylaReuna = Level.CreateTopBorder();
56            ylaReuna.Restitution = 1.0;
57            ylaReuna.IsVisible = false;
58
59            PhysicsObject alaReuna = Level.CreateBottomBorder();
60            alaReuna.Restitution = 1.0;
61            alaReuna.IsVisible = false;
62
63            Level.BackgroundColor = Color.Black;
64            MessageDisplay.TextColor = Color.Red;
65
66            Camera.ZoomToLevel();                     
67        }
68
69        PhysicsObject LuoMaila(double x, double y)
70        {
71            PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
72            maila.Shape = Shapes.Rectangle;
73            maila.X = x;
74            maila.Y = y;
75            maila.Restitution = 1.0;
76            Add(maila);
77            return maila;
78        }
79
80        void AloitaPeli()
81        {
82            Vector impulssi = new Vector(500.0, 600.0);
83            pallo.Hit(impulssi); 
84        }
85
86        void AsetaOhjaimet()
87        {
88            Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos );
89            Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
90            Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
91            Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
92
93            Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
94            Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
95            Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
96            Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
97
98            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
99            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu" );
100
101            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusYlos);
102            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
103            ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusAlas);
104            ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
105
106            ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusYlos);
107            ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
108            ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusAlas);
109            ControllerTwo.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
110
111            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
112            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
113        }
114
115        void LiikutaMailaaYlos( PhysicsObject maila )
116        {
117            if (maila.Y >= Level.Top)
118            {
119                maila.Velocity = Vector.Zero;
120                return;
121            }
122
123            Vector nopeus = new Vector(0, 200);
124            maila.Velocity = nopeus;
125        }
126
127        void LiikutaMailaaAlas(PhysicsObject maila)
128        {
129            Vector nopeus = new Vector(0, -200);
130            maila.Velocity = nopeus;
131        }
132
133        void PysaytaMaila( PhysicsObject maila )
134        {
135            maila.Velocity = Vector.Zero;
136        }
137
138        void AsetaNopeus(PhysicsObject maila, Vector nopeus)
139        {
140            if ((nopeus.Y < 0) && (maila.Y < Level.Bottom))
141            {
142                maila.Velocity = Vector.Zero;
143                return;
144            }
145            if ((nopeus.Y > 0) && (maila.Y > Level.Top))
146            {
147                maila.Velocity = Vector.Zero;
148                return;
149            }
150
151            maila.Velocity = nopeus;
152        }
153
154        void LisaaLaskurit()
155        {
156            pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
157            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
158        }
159
160        IntMeter LuoPisteLaskuri()
161        {
162            IntMeter laskuri = new IntMeter(0);
163            laskuri.MaxValue = 10;
164            return laskuri;
165        }
166
167        IntMeter LuoPisteLaskuri(double x, double y)
168        {
169            IntMeter laskuri = new IntMeter(0);
170            laskuri.MaxValue = 10;
171            ValueDisplay naytto = new ValueDisplay();
172            naytto.BindTo(laskuri);
173            naytto.X = x;
174            naytto.Y = y;
175            naytto.ValueColor = Color.White;
176            Add(naytto);
177            return laskuri;
178        }
179
180        void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
181        {
182            if (kohde == oikeaReuna)
183            {
184                pelaajan1Pisteet.Value += 1;
185            }
186            else if (kohde == vasenReuna)
187            {
188                pelaajan2Pisteet.Value += 1;
189            }
190
191        }
192    }
193}
194
Note: See TracBrowser for help on using the repository browser.