source: 2012/30/OtsoR/Pong/Pong/Pong/Pong.cs @ 3779

Revision 3779, 7.4 KB checked in by otelretu, 9 years ago (diff)
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    Vector nopeusYlos = new Vector(0, 400);
12    Vector nopeusAlas = new Vector(0, -400);
13    Vector nopeusVasen = new Vector(-400, 0);
14    Vector nopeusOikea = new Vector(400, 0);
15    PhysicsObject pallo1;
16    PhysicsObject maila1;
17    PhysicsObject maila2;
18    PhysicsObject vasenReuna;
19    PhysicsObject oikeaReuna;
20    IntMeter pelaajan1Pisteet;
21    IntMeter pelaajan2Pisteet;
22    public override void Begin()
23    {
24        LuoKentta();
25        AsetaOhjaimet();
26        LisaaLaskurit();
27        Mouse.IsCursorVisible = true;
28    }
29    void LuoKentta()
30    {
31        Gravity = new Vector(0, -800);
32        pallo1 = LuoPallo(-200, 100);
33        LuoPallo(20, 0, 20, 20, Color.Blue, Shape.Circle);
34        LuoPallo(-20, 0, 20, 20, Color.Red, Shape.Circle);
35        LuoPallo(0, 20, 20, 20, Color.Green, Shape.Circle);
36        LuoPallo(0, -20, 20, 20, Color.Yellow, Shape.Circle);
37        LuoPallo(20, -20, 20, 20, Color.Orange, Shape.Circle);
38        LuoPallo(-20, 20, 20, 20, Color.Purple, Shape.Circle);
39
40        //Vector impulssi = new Vector(500.0, 0.0);
41        //pallo1.Hit(impulssi);
42
43        maila1 = LuoMaila(Level.Left + 40.0, 0.0, Color.Red);
44        maila2 = LuoMaila(Level.Right - 40.0, 0.0, Color.Blue);
45
46        vasenReuna = Level.CreateLeftBorder();
47        vasenReuna.Restitution = 1.0;
48        vasenReuna.KineticFriction = 0.0;
49        vasenReuna.IsVisible = true;
50        oikeaReuna = Level.CreateRightBorder();
51        oikeaReuna.Restitution = 1.0;
52        oikeaReuna.KineticFriction = 0.0;
53        oikeaReuna.IsVisible = true;
54
55        PhysicsObject ylaReuna = Level.CreateTopBorder();
56        ylaReuna.Restitution = 1.0;
57        ylaReuna.KineticFriction = 0.0;
58        ylaReuna.IsVisible = true;
59        PhysicsObject alaReuna = Level.CreateBottomBorder();
60        alaReuna.Restitution = 1.0;
61        alaReuna.IsVisible = true;
62        alaReuna.KineticFriction = 0.0;
63
64        Level.BackgroundColor = Color.Black;
65        Camera.ZoomToLevel();
66    }
67    PhysicsObject LuoPallo(double x, double y)
68    {
69        PhysicsObject pallo = PhysicsObject.CreateStaticObject(20.0, 20.0);
70        pallo.Shape = Shape.Circle;
71        pallo.X = x;
72        pallo.Y = y;
73        pallo.Restitution = 1.0;
74        pallo.KineticFriction = 0.0;
75        pallo.CanRotate = true;
76        pallo.MomentOfInertia = Double.PositiveInfinity;
77        Add(pallo);
78        AddCollisionHandler(pallo, KasittelePallonTormays);
79        return pallo;
80    }
81    void LuoPallo(double x, double y, double w, double h, Color vari, Shape muoto)
82    {
83        PhysicsObject pallo = new PhysicsObject(w, h);
84        pallo.Shape = muoto;
85        pallo.Color = vari;
86        pallo.X = x;
87        pallo.Y = y;
88        pallo.Restitution = 1.0;
89        pallo.KineticFriction = 0.0;
90        pallo.MomentOfInertia = Double.PositiveInfinity;
91        Add(pallo);
92        AddCollisionHandler(pallo, KasittelePallonTormays);
93    }
94    PhysicsObject LuoMaila(double x, double y, Color vari)
95    {
96        PhysicsObject maila = new PhysicsObject(10.0, 150.0);
97        maila.Shape = Shape.Rectangle;
98        maila.Color = vari;
99        maila.CanRotate = true;
100        maila.X = x;
101        maila.Y = y;
102        maila.Restitution = 1.0;
103        maila.KineticFriction = 0.0;
104        Add(maila);
105        return maila;
106    }
107    void LisaaLaskurit()
108    {
109        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
110        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
111    }
112    IntMeter LuoPisteLaskuri(double x, double y)
113    {
114        IntMeter laskuri = new IntMeter(0);
115
116        Label naytto = new Label();
117        naytto.BindTo(laskuri);
118        naytto.X = x;
119        naytto.Y = y;
120        naytto.TextColor = Color.White;
121        naytto.BorderColor = Level.BackgroundColor;
122        naytto.Color = Level.BackgroundColor;
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    void AsetaOhjaimet()
138    {
139        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
140        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
141        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas);
142        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
143        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa vasemmalle", maila1, nopeusVasen);
144        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
145        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa oikealle", maila1, nopeusOikea);
146        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
147
148        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
149        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
150        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
151        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
152        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa vasemmalle", maila2, nopeusVasen);
153        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
154        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa oikealle", maila2, nopeusOikea);
155        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
156
157        Keyboard.Listen(Key.U, ButtonState.Down, AsetaNopeus, "", pallo1, nopeusYlos);
158        Keyboard.Listen(Key.J, ButtonState.Down, AsetaNopeus, "", pallo1, nopeusAlas);
159        Keyboard.Listen(Key.H, ButtonState.Down, AsetaNopeus, "", pallo1, nopeusVasen);
160        Keyboard.Listen(Key.K, ButtonState.Down, AsetaNopeus, "", pallo1, nopeusOikea);
161
162        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
163        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
164        Mouse.IsCursorVisible = true;
165    }
166    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
167    {
168        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
169        {
170            maila.Velocity = Vector.Zero;
171            return;
172        }
173        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
174        {
175            maila.Velocity = Vector.Zero;
176            return;
177        }
178        if ((nopeus.X < 0) && (maila.Left < Level.Left))
179        {
180            maila.Velocity = Vector.Zero;
181            return;
182        }
183        if ((nopeus.X > 0) && (maila.Right > Level.Right))
184        {
185            maila.Velocity = Vector.Zero;
186            return;
187        }
188        maila.Velocity = nopeus;
189    }
190}
Note: See TracBrowser for help on using the repository browser.