source: 2012/27/DenisZ/Pong/Pong/Pong/Pong.cs @ 3437

Revision 3437, 5.0 KB checked in by dezhidki, 9 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 Pong : PhysicsGame
10{
11    private PhysicsObject ball1;
12    private Player player1, player2;
13    private Vector moveUp = new Vector(0, 500);
14    private Vector moveDown = new Vector(0, -500);
15    private PhysicsObject leftBorder, rightBorder, topBorder, bottomBorder;
16
17    private IntMeter meter1, meter2;
18
19    public override void Begin()
20    {
21        SetWindowSize(800, 600);
22        Level.BackgroundColor = Color.Black;
23        Level.Width = Screen.Width + Screen.Width / 2;
24        Level.Height = Screen.Height + Screen.Height / 2;
25        createLevelBorders();
26        Camera.ZoomToLevel();
27
28        player1 = new Player(new Vector(Level.Left + 20, 0), 30, 150);
29        player2 = new Player(new Vector(Level.Right - 20, 0), 30, 150);
30
31        setupBall();
32        setupKeys();
33
34        meter1 = createMeter(new Vector(Level.Left + 300, Level.Top - 200), 10);
35        meter2 = createMeter(new Vector(Level.Right - 300, Level.Top - 200), 10);
36
37        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
38        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli");
39    }
40
41    private void createLevelBorders()
42    {
43        leftBorder = Surface.CreateLeft(Level);
44        leftBorder.Restitution = 1.0;
45        leftBorder.KineticFriction = 0.0;
46        leftBorder.IsVisible = false;
47        Add(leftBorder);
48
49        rightBorder = Surface.CreateRight(Level);
50        rightBorder.Restitution = 1.0;
51        rightBorder.KineticFriction = 0.0;
52        rightBorder.IsVisible = false;
53        Add(rightBorder);
54
55        topBorder = Surface.CreateTop(Level);
56        topBorder.Restitution = 1.0;
57        //  topBorder.KineticFriction = 0.0;
58        topBorder.IsVisible = false;
59        Add(topBorder);
60
61        bottomBorder = Surface.CreateBottom(Level);
62        bottomBorder.Restitution = 1.0;
63        // bottomBorder.KineticFriction = 0.0;
64        bottomBorder.IsVisible = false;
65        Add(bottomBorder);
66    }
67
68    private IntMeter createMeter(Vector pos, int maxValue)
69    {
70        IntMeter meter = new IntMeter(0, 0, maxValue);
71
72        Label frame = new Label();
73        frame.BindTo(meter);
74        frame.TextColor = Color.White;
75        // frame.TextSize = new Vector(10, 10);
76        frame.Color = Color.Transparent;
77        frame.Position = pos;
78        Add(frame);
79
80        return meter;
81    }
82
83    private void setupKeys()
84    {
85        Keyboard.Listen(Key.W, ButtonState.Down, player1.setVelocity, "Move Player1 Up", moveUp);
86        Keyboard.Listen(Key.S, ButtonState.Down, player1.setVelocity, "Move Player1 Down", moveDown);
87        Keyboard.Listen(Key.W, ButtonState.Released, player1.setVelocity, null, Vector.Zero);
88        Keyboard.Listen(Key.S, ButtonState.Released, player1.setVelocity, null, Vector.Zero);
89
90        Keyboard.Listen(Key.Up, ButtonState.Down, player2.setVelocity, "Move Player2 Up", moveUp);
91        Keyboard.Listen(Key.Down, ButtonState.Down, player2.setVelocity, "Move Player2 Down", moveDown);
92        Keyboard.Listen(Key.Up, ButtonState.Released, player2.setVelocity, null, Vector.Zero);
93        Keyboard.Listen(Key.Down, ButtonState.Released, player2.setVelocity, null, Vector.Zero);
94
95        Keyboard.Listen(Key.F12, ButtonState.Pressed, ball1.Hit, "CHEAT!!!", new Vector(500, 0));
96    }
97
98    private void setupBall()
99    {
100        ball1 = new PhysicsObject(75, 75, Shape.Circle);
101        ball1.Hit(new Vector(500, 0));
102        ball1.Restitution = 1.0;
103        ball1.KineticFriction = 0.0;
104        ball1.CanRotate = false;
105        Add(ball1);
106        AddCollisionHandler(ball1, handleBallCollision);
107    }
108
109    private void handleBallCollision(PhysicsObject obj, PhysicsObject target)
110    {
111        if (target == leftBorder)
112            meter2.AddValue(1);
113        else
114            if (target == rightBorder)
115                meter1.AddValue(1);
116    }
117
118    protected override void Update(Time time)
119    {
120        if (meter1.Value == 10)
121            gameWonMenu("Player1");
122        else
123            if (meter2.Value == 10)
124                gameWonMenu("Player2");
125        base.Update(time);
126    }
127
128    private void gameWonMenu(string player)
129    {
130        meter1.Value = 0;
131        meter2.Value = 0;
132        ball1.Destroy();
133        ball1 = null;
134        IsMouseVisible = true;
135
136        string wintext = "Congratulations! " + player + " won the game! Play again?";
137        string[] texts = { "Yes", "No" };
138
139        MultiSelectWindow winWindow = new MultiSelectWindow(wintext, texts);
140        winWindow.AddItemHandler(0, delegate { setupNewGame(winWindow); });
141        winWindow.AddItemHandler(1, Exit);
142        Add(winWindow);
143    }
144
145    private void setupNewGame(MultiSelectWindow window)
146    {
147        setupBall();
148        player1.Position = new Vector(Level.Left + 20, 0);
149        player2.Position = new Vector(Level.Right - 20, 0);
150    }
151}
Note: See TracBrowser for help on using the repository browser.