source: 2015/26/RonjaT/Pong/Pong/Pong/Pong.cs @ 6175

Revision 6175, 4.7 KB checked in by empaheik, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pong : PhysicsGame
10{
11    Vector nopeusYlös = new Vector(0, 200);
12    Vector nopeusAlas = new Vector(0, -200);
13    Vector nopeusPysähdyksissä = new Vector(0, 0);
14
15    PhysicsObject pallo;
16    PhysicsObject maila1;
17    PhysicsObject maila2;
18
19    PhysicsObject vasenReuna;
20    PhysicsObject oikeaReuna;
21
22    IntMeter pelaajan1pisteet;
23    IntMeter pelaajan2pisteet;
24
25    public override void Begin()
26    {
27        LuoKentta();
28        AsetaOhjaimet();
29        LisaaLaskurit();
30        AloitaPeli();
31
32    }
33    void LuoKentta()
34    {
35        pallo = new PhysicsObject(40.0, 40.0);
36        pallo.Shape = Shape.Circle;
37        pallo.X = -200.0;
38        pallo.Y = 0.0;
39        pallo.Restitution = 1.0;
40        Add(pallo);
41        AddCollisionHandler(pallo, KasittelePallonTormays);
42
43       
44
45        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
46        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
47
48
49       vasenReuna = Level.CreateLeftBorder();
50       vasenReuna.Restitution = 1.0;
51       vasenReuna.IsVisible = false;
52
53       oikeaReuna = Level.CreateRightBorder();
54       oikeaReuna.Restitution = 1.0;
55       oikeaReuna.IsVisible = false;
56
57       PhysicsObject alaReuna = Level.CreateBottomBorder();
58       alaReuna.Restitution = 1.0;
59       alaReuna.IsVisible = false;
60       alaReuna.KineticFriction = 0.0;
61
62       PhysicsObject yläReuna = Level.CreateTopBorder();
63       yläReuna.Restitution = 1.0;
64       yläReuna.IsVisible = false;
65 
66
67        Level.Background.Color = Color.Black;
68        Camera.ZoomToLevel();
69    }
70
71        void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
72        {
73            if (kohde == oikeaReuna)
74            {
75                pelaajan1pisteet.Value += 1;
76            }
77            else if (kohde == vasenReuna)
78            {
79                pelaajan2pisteet.Value += 1;
80            }
81        }
82    void AloitaPeli()
83    {
84        Vector impulssi = new Vector(500.0, 0.0);
85        pallo.Hit(impulssi);
86    }
87
88
89
90    PhysicsObject LuoMaila(double x, double y)
91    {
92        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
93        maila.Shape = Shape.Rectangle;
94        maila.X = x;
95        maila.Y = y;
96        maila.Restitution = 1.0;
97        Add(maila);
98        return maila;
99    }
100
101    void AsetaOhjaimet()
102    {
103        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlös);
104        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, nopeusPysähdyksissä);
105        Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
106        Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
107
108        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlös);
109        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, nopeusPysähdyksissä);
110        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaaalas", maila2, nopeusAlas);
111        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
112
113        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
114        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä phjeet");
115    }
116
117
118    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
119    {
120        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
121        {
122            maila.Velocity = Vector.Zero;
123            return;
124        }
125        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
126        {
127            maila.Velocity = Vector.Zero;
128            return;
129        }
130        maila.Velocity = nopeus;
131    }
132
133
134    void LisaaLaskurit()
135    {
136        pelaajan1pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
137        pelaajan2pisteet = LuoPisteLaskuri(Screen.Right - 100, Screen.Top - 100.0);
138    }
139
140    IntMeter LuoPisteLaskuri(double x, double y)
141    {
142        IntMeter laskuri = new IntMeter(0);
143        laskuri.MaxValue = 10;
144
145        Label naytto = new Label();
146        naytto.BindTo(laskuri);
147        naytto.X = x;
148        naytto.Y = y;
149        naytto.TextColor = Color.LightGreen;
150        naytto.BorderColor = Level.Background.Color;
151        naytto.Color = Level.Background.Color;
152        Add(naytto);
153
154        return laskuri;
155    }
156
157
158
159
160
161}
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225 
Note: See TracBrowser for help on using the repository browser.