source: 2010/23/lavevake/Pong/Peli.cs @ 549

Revision 549, 5.9 KB checked in by lavevake, 10 years ago (diff)

Sain Pong-pelin valmiiksi.

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