source: 2010/23/jaollipa/Pong/Peli.cs @ 533

Revision 533, 4.8 KB checked in by jaollipa, 10 years ago (diff)

Tiistai 1. puolisko

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