source: 2010/23/almiilhi/pong/Peli.cs @ 546

Revision 546, 5.9 KB checked in by juiitamm, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4
5namespace Pong
6{
7    public class Peli : PhysicsGame
8    {
9        Vector nopeusYlos = new Vector(0, 200);
10        Vector nopeusAlas = new Vector(0, -200);
11
12        PhysicsObject pallo;
13        PhysicsObject maila1;
14        PhysicsObject maila2;
15
16        PhysicsObject vasenReuna;
17        PhysicsObject oikeaReuna;
18
19        IntMeter pelaajan1Pisteet;
20        IntMeter pelaajan2Pisteet;
21
22        protected override void Begin()
23        {
24            LuoKentta();
25            AsetaOhjaimet();
26            LisaaLaskurit();
27            AloitaPeli();
28        }
29
30        void LuoKentta()
31        {
32            pallo = new PhysicsObject(40.0, 40.0);
33            pallo.Shape = Shapes.Circle;
34            pallo.X = -200.0;
35            pallo.Y = 0.0;
36            pallo.Restitution = 1.0;
37            Add(pallo);
38            AddCollisionHandler(pallo, KasittelePallonTormays);
39
40            maila1 = LuoMaila(Level.Left + 20.0, 0.0);
41            maila2 = LuoMaila(Level.Right - 20.0, 0.0);
42
43            vasenReuna = Level.CreateLeftBorder();
44            vasenReuna.Restitution = 1.0;
45            vasenReuna.IsVisible = false;
46            oikeaReuna = Level.CreateRightBorder();
47            oikeaReuna.Restitution = 1.0;
48            oikeaReuna.IsVisible = false;
49            PhysicsObject ylaReuna = Level.CreateTopBorder();
50            ylaReuna.Restitution = 1.0;
51            ylaReuna.IsVisible = false;
52            PhysicsObject alaReuna = Level.CreateBottomBorder();
53            alaReuna.Restitution = 1.0;
54            alaReuna.IsVisible = false;
55
56            Level.BackgroundColor = Color.Black;
57
58            Camera.ZoomToLevel();
59        }
60
61        PhysicsObject LuoMaila(double x, double y)
62        {
63            PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
64            maila.Shape = Shapes.Rectangle;
65            maila.X = x;
66            maila.Y = y;
67            maila.Restitution = 1.0;
68            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.0);
76        }
77
78        IntMeter LuoPisteLaskuri(double x, double y)
79        {
80            IntMeter laskuri = new IntMeter(0);
81            laskuri.MaxValue = 10;
82            ValueDisplay naytto = new ValueDisplay();
83            naytto.BindTo(laskuri);
84            naytto.X = x;
85            naytto.Y = y;
86            naytto.ValueColor = Color.White;
87            Add(naytto);
88            return laskuri;
89        }
90
91        void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
92        {
93            if (kohde == oikeaReuna)
94            {
95                pelaajan1Pisteet.Value += 1;
96            }
97            else if (kohde == vasenReuna)
98            {
99                pelaajan2Pisteet.Value += 1;
100            }
101        }
102
103        void AloitaPeli()
104        {
105            Vector impulssi = new Vector(500.0, 0.0);
106            pallo.Hit(impulssi);
107        }
108
109        void AsetaOhjaimet()
110        {
111            Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
112            Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
113            Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
114            Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
115
116            Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
117            Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
118            Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
119            Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
120
121            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
122            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
123
124            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusYlos);
125            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
126            ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusAlas);
127            ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
128
129            ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusYlos);
130            ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
131            ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusAlas);
132            ControllerTwo.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
133
134            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
135            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
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}
155
156
157
158
159
160
161
162
163
164
165
166       
167       
168
169
170
171   
172   
173
Note: See TracBrowser for help on using the repository browser.