source: 2013/27/ArttuY/Pong/Pong/Pong/Pong.cs @ 4346

Revision 4346, 7.7 KB checked in by eearyla, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class Pong : PhysicsGame
12{
13    PhysicsObject ball;
14
15    PhysicsObject paddle1;
16    PhysicsObject paddle2;
17
18    PhysicsObject edgeL;
19    PhysicsObject edgeR;
20
21    IntMeter score1;
22    IntMeter score2;
23
24    Vector basicSpeedUP;
25    Vector basicSpeedDOWN;
26
27
28    /// <summary>
29    /// Aloita peli
30    /// </summary>
31
32    public override void Begin()
33    {
34        createGameObjects();
35        createPrimaryAIDelegates();
36        createDelegatesForPaddle1();
37        setControls();
38        addCounters();
39
40        beginGame();
41
42        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "End game");
43    }
44
45    void createDelegatesForPaddle1()
46    {
47        Timer delT = new Timer();
48        delT.Interval = (1.0 / 30.0);
49
50        delT.Start();
51
52        delT.Timeout += delegate
53        {
54            double ballPosY = ball.Y;
55            double paddlePosY = paddle1.Y;
56
57            double diff = ballPosY - paddlePosY;
58            if (diff > 20)
59            {
60                paddle1.Velocity = basicSpeedUP;
61            }
62            else if (diff < -20)
63            {
64                paddle1.Velocity = basicSpeedDOWN;
65            }
66            else if (Math.Abs(diff) < 10) { paddle1.Velocity = Vector.Zero; }
67
68
69            if (ball.Velocity.X < 30)
70            {
71                ball.Hit(new Vector(ball.Velocity.Normalize().X, 0));
72            }
73
74            //basicSpeedUP = new Vector(0, ball.Velocity.Magnitude + 50);
75            //basicSpeedDOWN = new Vector(0, -ball.Velocity.Magnitude - 50);
76        };
77    }
78
79    void randomizeBallMotion()
80    {
81        if (RandomGen.NextBool())
82        {
83            Vector etaisyys = paddle2.Position - ball.Position;
84            ball.Hit(etaisyys.Normalize() * 30);
85        }
86        else if (RandomGen.NextBool())
87        {
88            Vector etaisyys = paddle1.Position - ball.Position;
89            ball.Hit(etaisyys.Normalize() * 30);
90        }
91        else if (RandomGen.NextBool())
92        {
93            ball.Hit(Vector.ComponentProduct(paddle1.Position, paddle2.Position).Normalize()*30);
94           
95        }
96    }
97
98    void createPrimaryAIDelegates()
99    {
100        Timer delT = new Timer();
101        delT.Interval = (1.0 / 30.0);
102
103        delT.Start();
104
105        delT.Timeout += delegate
106        {
107            double ballPosY = ball.Y;
108            double paddlePosY = paddle2.Y;
109
110            double diff = ballPosY - paddlePosY;
111            if (diff > 20)
112            {
113                paddle2.Velocity = basicSpeedUP;
114            }
115            else if (diff < -20)
116            {
117                paddle2.Velocity = basicSpeedDOWN;
118            }
119            else if (Math.Abs(diff) < 10) { paddle2.Velocity = Vector.Zero; }
120
121            //if (ball.Velocity.Magnitude < 10)
122            //{
123            //ball.Hit(new Vector(ball.X, ball.Y).Project(new Vector(paddle1.X, paddle1.Y)));
124            //ball.Hit(new Vector(RandomGen.NextInt(-20, 20), RandomGen.NextInt(-20, 20)));
125            //}
126
127            if (ball.Velocity.X < 30)
128            {
129                ball.Hit(new Vector(ball.Velocity.Normalize().X, 0));
130            }
131
132            basicSpeedUP = new Vector(0, ball.Velocity.Magnitude + 50 + RandomGen.NextInt(-5,5));
133            basicSpeedDOWN = new Vector(0, -ball.Velocity.Magnitude - 50 - RandomGen.NextInt(-5, 5));
134
135            randomizeBallMotion();
136        };
137    }
138
139    /// <summary>
140    /// Törmätessä
141    /// </summary>
142    /// <param name="ball">Ball</param>
143    /// <param name="target">What hit it</param>
144
145    void onCollision(PhysicsObject ball, PhysicsObject target)
146    {
147        if (target == edgeL)
148        {
149            score2.Value += 1;
150        }
151        else if (target == edgeR)
152        {
153            score1.Value += 1;
154        }
155    }
156
157
158    IntMeter createCounter(double x, double y)
159    {
160        IntMeter counter = new IntMeter(0);
161        counter.MaxValue = 10;
162
163        Label pointDisp = new Label();
164        pointDisp.BindTo(counter);
165        pointDisp.X = x;
166        pointDisp.Y = y;
167        pointDisp.TextColor = Color.White;
168        pointDisp.BorderColor = Color.Maroon;
169        pointDisp.Color = Level.BackgroundColor;
170
171        Add(pointDisp);
172
173        return counter;
174    }
175
176    /// <summary>
177    /// Lisää laskurit
178    /// </summary>
179
180
181    void addCounters()
182    {
183        score1 = createCounter(Screen.Left + 100, Screen.Top - 100);
184        score2 = createCounter(Screen.Right - 100, Screen.Top - 100);
185    }
186
187    /// <summary>
188    /// Aseta pelaajan mailan nopeus.
189    /// </summary>
190    /// <param name="speed"></param>
191
192
193    void setPlayerSpeed(int dir)
194    {
195
196        if ((paddle1.Top > Level.Top) && dir > 0)
197        {
198            paddle1.Velocity = Vector.Zero;
199            return;
200        }
201
202        if ((paddle1.Bottom < Level.Bottom) && dir < 0)
203        {
204            paddle1.Velocity = Vector.Zero;
205            return;
206        }
207
208        switch (dir)
209        {
210            case 1:
211                paddle1.Velocity = basicSpeedUP;
212                break;
213            case -1:
214                paddle1.Velocity = basicSpeedDOWN;
215                break;
216            case 0:
217                paddle1.Velocity = Vector.Zero;
218                break;
219        }
220
221        //paddle1.Velocity = speed;
222    }
223
224    /// <summary>
225    /// Ohjaimet
226    /// </summary>
227
228    void setControls()
229    {
230        Keyboard.Listen(Key.Down, ButtonState.Down, setPlayerSpeed, "Move down", -1);
231        Keyboard.Listen(Key.Down, ButtonState.Released, setPlayerSpeed, "Move down", 0);
232
233        Keyboard.Listen(Key.Up, ButtonState.Down, setPlayerSpeed, "Move up", 1);
234        Keyboard.Listen(Key.Up, ButtonState.Released, setPlayerSpeed, "Move up", 0);
235    }
236
237    /// <summary>
238    /// Lisää peliobjektit
239    /// </summary>
240
241    void createGameObjects()
242    {
243        ball = new PhysicsObject(40.0, 40.0);
244        ball.Shape = Shape.Circle;
245        ball.X = -200.0;
246        ball.Y = 0.0;
247        ball.Restitution = 1.0;
248        ball.CanRotate = true;
249        ball.Image = LoadImage("BallTexture");
250        ball.Hit(new Vector(RandomGen.NextInt(-20, 20), RandomGen.NextInt(-20, 20)));
251        Add(ball);
252        AddCollisionHandler(ball, onCollision);
253
254        paddle1 = createPaddle(Level.Left + 20.0, 0.0);
255        paddle2 = createPaddle(Level.Right - 20.0, 0.0);
256
257        edgeL = Level.CreateLeftBorder();
258        edgeL.Restitution = 1;
259        edgeL.IsVisible = true;
260
261        edgeR = Level.CreateRightBorder();
262        edgeR.Restitution = 1;
263        edgeR.IsVisible = true;
264
265        PhysicsObject edgeT = Level.CreateTopBorder();
266        edgeT.Restitution = 1;
267        edgeT.IsVisible = true;
268
269        Level.CreateBorders(1.0, false);
270        Level.BackgroundColor = Color.Black;
271
272        Camera.ZoomToLevel();
273    }
274
275    /// <summary>
276    /// Aloita peli
277    /// </summary>
278
279    void beginGame()
280    {
281        Vector impulse = new Vector(500.0, 0.0);
282        ball.Hit(impulse);
283    }
284
285    /// <summary>
286    /// Luo maila
287    /// </summary>
288    /// <param name="x">X-sijainti</param>
289    /// <param name="y">Y-sijainti</param>
290    /// <returns></returns>
291
292    PhysicsObject createPaddle(double x, double y)
293    {
294        PhysicsObject paddle = PhysicsObject.CreateStaticObject(20.0, 100.0);
295        paddle.Shape = Shape.Rectangle;
296        paddle.X = x;
297        paddle.Y = y;
298        paddle.Restitution = 1.0;
299        Add(paddle);
300
301        return paddle;
302    }
303}
Note: See TracBrowser for help on using the repository browser.