source: 2010/23/johanh/Pong/Pong/Peli.cs @ 532

Revision 532, 5.9 KB checked in by paaaanro, 13 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4
5namespace Pong
6{
7    public class Peli : PhysicsGame
8    {
9        Vector nopeusYlos = new Vector(0, 275);
10        Vector nopeusAlas = new Vector(0, -275);
11
12        PhysicsObject pallo;
13        PhysicsObject maila1;
14        PhysicsObject maila2;
15
16        PhysicsObject vasenReuna;
17        PhysicsObject oikeaReuna;
18
19        IntMeter pelaajan1Pisteet;
20        IntMeter pelaajan2Pisteet;
21
22        protected override void Begin()
23        {
24            ClearAll();
25            LuoKentta();
26            AsetaOhjaimet();
27            LisaaLaskurit();
28            AloitaPeli();
29        }
30
31        void LuoKentta()
32        {
33            pallo = new PhysicsObject(32.0, 32.0);
34            pallo.Shape = Shapes.Circle;
35            pallo.X = 0.0;
36            pallo.Y = 0.0;
37            pallo.Restitution = 1.0;
38            Add(pallo);
39            AddCollisionHandler(pallo, KasittelePallonTormays);
40
41            maila1 = LuoMaila(Level.Left + 22.0, 0.0);
42            maila2 = LuoMaila(Level.Right - 22.0, 0.0);
43
44            vasenReuna = Level.CreateLeftBorder();
45            vasenReuna.Restitution = 1.0;
46            vasenReuna.IsVisible = false;
47            oikeaReuna = Level.CreateRightBorder();
48            oikeaReuna.Restitution = 1.0;
49            oikeaReuna.IsVisible = false;
50            PhysicsObject ylaReuna = Level.CreateTopBorder();
51            ylaReuna.Restitution = 1.0;
52            ylaReuna.IsVisible = false;
53            PhysicsObject alaReuna = Level.CreateBottomBorder();
54            alaReuna.Restitution = 1.0;
55            alaReuna.IsVisible = false;
56
57            Level.BackgroundColor = Color.Blue;
58
59            Camera.ZoomToLevel();
60           
61        }
62
63        PhysicsObject LuoMaila(double x, double y)
64        {
65            PhysicsObject maila = PhysicsObject.CreateStaticObject(1.0, 200.0);
66            maila.Shape = Shapes.Rectangle;
67            maila.X = x;
68            maila.Y = y;
69            maila.Restitution = 1.0;
70            Add(maila);
71            return maila;
72        }
73
74        void LisaaLaskurit()
75        {
76            pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
77            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
78
79        }
80
81        IntMeter LuoPisteLaskuri(double x, double y)
82        {
83            IntMeter laskuri = new IntMeter(0);
84            laskuri.MaxValue = 100;
85            ValueDisplay naytto = new ValueDisplay();
86            naytto.BindTo(laskuri);
87            naytto.X = x;
88            naytto.Y = y;
89            naytto.ValueColor = Color.White;
90            Add(naytto);
91            return laskuri;
92        }
93
94        void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
95        {
96            if (kohde == oikeaReuna)
97            {
98                pelaajan1Pisteet.Value += 1;
99            }
100            else if (kohde == vasenReuna)
101            {
102                pelaajan2Pisteet.Value += 1;
103            }
104        }
105
106        void AloitaPeli()
107        {
108            Vector impulssi = new Vector(-400.0, -250.0);
109            pallo.Hit(impulssi);
110        }
111
112        void AsetaOhjaimet()
113        {   Keyboard.Listen(Key.Space, ButtonState. Pressed, Begin, "Aloita peli" );
114            Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
115            Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
116            Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
117            Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
118           
119            Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
120            Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
121            Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
122            Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
123
124            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
125            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
126
127            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusYlos);
128            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
129            ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusAlas);
130            ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
131
132            ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusYlos);
133            ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
134            ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusAlas);
135            ControllerTwo.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
136
137            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
138            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
139        }
140
141        void AsetaNopeus(PhysicsObject maila, Vector nopeus)
142        {
143            if ((nopeus.Y < 1) && (maila.Y < Level.Bottom))
144            {
145                maila.Velocity = Vector.Zero;
146                return;
147            }
148            if ((nopeus.Y > 1) && (maila.Y > Level.Top))
149            {
150                maila.Velocity = Vector.Zero;
151                return;
152            }
153
154            maila.Velocity = nopeus;
155        }
156    }
157}
Note: See TracBrowser for help on using the repository browser.