source: 2010/23/tajomyll/Pong/Peli.cs @ 523

Revision 523, 4.8 KB checked in by tajomyll, 10 years ago (diff)

Peli valmis.

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        PhysicsObject vasenReuna;
15        PhysicsObject oikeaReuna;
16
17        Vector nopeusYlos = new Vector(0, 200);
18        Vector nopeusAlas = new Vector(0, -200);
19
20        IntMeter pelaajan1Pisteet;
21        IntMeter pelaajan2Pisteet;
22
23        protected override void Begin()
24        {
25            //TODO: Alusta peli tässä
26            LuoKentta();
27            AsetaOhjaimet();
28            LisaaLaskurit();
29            AloitaPeli();
30        }
31
32        void LuoKentta()
33        {
34            pallo = new PhysicsObject(40.0, 40.0);
35            pallo.Shape = Shapes.Circle;
36            Add(pallo);
37            pallo.Restitution = 1.0;
38            pallo.X = -200.0;
39            pallo.Y = 0.0;
40            pallo.KineticFriction = 0.0;
41            AddCollisionHandler(pallo, KasittelePallonTormays);
42                   
43            maila1 = LuoMaila(Level.Left + 20.0, 0.0);
44            maila2 = LuoMaila(Level.Right - 20.0, 0.0);
45
46            vasenReuna = Level.CreateLeftBorder();
47            vasenReuna.Restitution = 1.0;
48            vasenReuna.IsVisible = false;
49            oikeaReuna = Level.CreateRightBorder();
50            oikeaReuna.Restitution = 1.0;
51            oikeaReuna.IsVisible = false;
52            PhysicsObject alaReuna = Level.CreateBottomBorder();
53            alaReuna.Restitution = 1.0;
54            alaReuna.IsVisible = false;
55            PhysicsObject ylaReuna = Level.CreateTopBorder();
56            ylaReuna.Restitution = 1.0;
57            ylaReuna.IsVisible = false;
58
59            Level.BackgroundColor = Color.Black;
60
61            Camera.ZoomToLevel();
62        }
63        void AloitaPeli()
64        {
65            Vector impulssi = new Vector(500.0, 0.0);
66            pallo.Hit(impulssi);   
67        }
68        PhysicsObject LuoMaila(double x, double y)
69        {
70            PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
71            maila.Shape = Shapes.Rectangle;
72            maila.X = x;
73            maila.Y = y;
74            maila.Restitution = 1.0;
75            Add(maila);
76
77            return maila;
78        }
79        void AsetaOhjaimet()
80        {
81            Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1. Liikuta mailaa ylös", maila1, nopeusYlos);
82            Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
83            Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1. Liikuta mailaa alas", maila1, nopeusAlas);
84            Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
85
86            Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2. Liikuta mailaa ylös", maila2, nopeusYlos);
87            Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
88            Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2. Liikuta mailaa alas", maila2, nopeusAlas);
89            Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
90
91            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
92            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
93        }
94        void AsetaNopeus(PhysicsObject maila, Vector nopeus)
95        {
96            if ( ( nopeus.Y < 0)&&(maila.Y < Level.Bottom) )
97            {
98                maila.Velocity = Vector.Zero;
99                return;
100            }
101             if ( (nopeus.Y > 0) && (maila.Y > Level.Top) ) 
102            {
103                maila.Velocity = Vector.Zero;
104                return;
105            }
106
107            maila.Velocity = nopeus;
108        }
109        void LisaaLaskurit()
110        {
111            pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
112            pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
113        }
114        IntMeter LuoPisteLaskuri(double x, double y)
115        {
116            IntMeter laskuri = new IntMeter(0);
117            laskuri.MaxValue = 10;
118            ValueDisplay naytto = new ValueDisplay();
119            naytto.BindTo(laskuri);
120            naytto.X = x;
121            naytto.Y = y;
122            naytto.ValueColor = Color.White;
123            Add(naytto);
124            return laskuri;
125        }
126        void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
127        {
128            if (kohde == oikeaReuna)
129            {
130                pelaajan1Pisteet.Value += 1;
131            }
132            else if (kohde == vasenReuna)
133            {
134                pelaajan2Pisteet.Value += 1;
135            }
136        }
137
138
139    }
140}
Note: See TracBrowser for help on using the repository browser.