source: 2013/27/MikkoI/Pongli/Pongli/Pongli/Pongli.cs @ 4338

Revision 4338, 5.4 KB checked in by mijoilmo, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pongli : PhysicsGame
10{
11    List<PhysicsObject> ballList = new List<PhysicsObject>();
12    List<PhysicsObject> pongList = new List<PhysicsObject>();
13    List<IntMeter> scoreList = new List<IntMeter>();
14
15    public override void Begin()
16    {
17        CreateLevel();
18        for (int i = 0; i < 100; i++) { NewBall(); }; 
19        NewPong(Level.Left + 20, 0);
20        NewPong(Level.Right - 20, 0);
21        SetControls();
22        StartRound();
23    }
24    void CreateLevel()
25    {
26        Level.CreateBorders(1, false);
27        Level.BackgroundColor = Color.Black;
28        Camera.ZoomToLevel();
29        IntMeter plr1score = new IntMeter(0);IntMeter plr2score = new IntMeter(0);
30        scoreList.Add(plr1score);scoreList.Add(plr2score);
31        addScoreLabel(scoreList[0], Level.Left + 40, Level.Top + 20);
32        addScoreLabel(scoreList[1], Level.Right - 40, Level.Top + 20);
33    }
34    void addScoreLabel(IntMeter score, double x,double y) { 
35        Label scoreLabel = new Label();
36        scoreLabel.BindTo(score);
37        scoreLabel.X = x;
38        scoreLabel.Y = y;
39        scoreLabel.TextColor = Color.White;
40        scoreLabel.BorderColor = Level.BackgroundColor;
41        scoreLabel.Color = Level.BackgroundColor;
42        Add(scoreLabel);
43    }
44    PhysicsObject NewBall()
45    {
46        PhysicsObject ball;
47        ball = new PhysicsObject(20, 20);
48        ball.Shape = Shape.Circle;
49        ball.Restitution = 1;
50        Add(ball);
51        ballList.Add(ball);
52        return ball;
53    }
54    PhysicsObject NewPong(double x, double y)
55    {
56        PhysicsObject pong;
57        pong = PhysicsObject.CreateStaticObject(20, 100);
58        pong.X = x;
59        pong.Y = y;
60        pong.Restitution = 1;
61        Add(pong);
62        pongList.Add(pong);
63        return pong;
64    }
65    void MovePong(PhysicsObject pong, double velocityX, double velocityY)
66    {
67        Vector push = new Vector(velocityX, velocityY);
68        pong.Velocity = push;
69    }
70    bool CheckIfArrayObjExists(int id, List<PhysicsObject> list)
71    {
72        if (list[id] != null) { return true; } else { return false; }
73    }
74    void StartRound()
75    {
76        for (int i = 0; i < ballList.Count; i++)
77        {
78            Vector nve = new Vector(0,0);
79            double rnd = RandomGen.NextDouble(0, 2);
80            rnd = (rnd - 1) * 1520;
81            if (rnd < 0 || rnd == 0)
82            {
83                rnd = rnd - 6800;
84            }
85            else
86            {
87                rnd = rnd + 6800;
88            }
89            double rnd2 = RandomGen.NextDouble(0, 2);
90            rnd2 = (rnd2 - 1) * 1520;
91            if (rnd2 < 0 || rnd2 == 0)
92            {
93                rnd2 = rnd2 - 6800;
94            }
95            else
96            {
97                rnd2 = rnd2 + 6800;
98            }
99
100            if (ballList[i].Velocity != nve) { continue; }
101        Vector vec = new Vector(rnd,rnd2);
102        ballList[i].Push(vec);
103        }
104    }
105    void SetControls()
106    {
107        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
108        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
109        double pongSpeed = 360;
110        Keyboard.Listen(Key.Up, ButtonState.Pressed, delegate { if (pongList.Count > 1) { MovePong(pongList[1], 0, pongSpeed); } }, "");
111        Keyboard.Listen(Key.Up, ButtonState.Released, delegate { if (pongList.Count > 1) { MovePong(pongList[1], 0, 0); } }, "");
112        Keyboard.Listen(Key.Down, ButtonState.Pressed, delegate { if (pongList.Count > 1) { MovePong(pongList[1], 0, -pongSpeed); } }, "");
113        Keyboard.Listen(Key.Down, ButtonState.Released, delegate { if (pongList.Count > 1) { MovePong(pongList[1], 0, 0); } }, "");
114
115        Keyboard.Listen(Key.W, ButtonState.Pressed, delegate { if (pongList.Count > 0) { MovePong(pongList[0], 0, pongSpeed); } }, "");
116        Keyboard.Listen(Key.W, ButtonState.Released, delegate { if (pongList.Count > 0) { MovePong(pongList[0], 0, 0); } }, "");
117        Keyboard.Listen(Key.S, ButtonState.Pressed, delegate { if (pongList.Count > 0) { MovePong(pongList[0], 0, -pongSpeed); } }, "");
118        Keyboard.Listen(Key.S, ButtonState.Released, delegate { if (pongList.Count > 0) { MovePong(pongList[0], 0, 0); } }, "");
119    }
120
121    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
122    {
123        base.Update(gameTime);
124
125        if (CheckIfArrayObjExists(0, pongList))
126        {
127            if (pongList[0].Top > Level.Top) { pongList[0].Top = Level.Top; }
128            if (pongList[0].Bottom < Level.Bottom) { pongList[0].Bottom = Level.Bottom; }
129        }
130        if (CheckIfArrayObjExists(1, pongList))
131        {
132            if (pongList[1].Top > Level.Top) { pongList[1].Top = Level.Top; }
133            if (pongList[1].Bottom < Level.Bottom) { pongList[1].Bottom = Level.Bottom; }
134        }
135
136        for (int i=0;i<ballList.Count;i++) {
137        if (CheckIfArrayObjExists(i, ballList)) {
138            if (ballList[i].Left <= Level.Left) { ballList[i].Destroy(); ballList.Remove(ballList[i]); scoreList[0].Value += 1; NewBall(); StartRound(); continue; }
139            if (ballList[i].Right >= Level.Right) { ballList[i].Destroy(); ballList.Remove(ballList[i]); scoreList[1].Value += 1; NewBall(); StartRound(); continue; }
140        }
141        }
142    }
143}
Note: See TracBrowser for help on using the repository browser.