source: 2010/30/mikmatla/Pong/Peli.cs @ 1362

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