source: 2011/23/mikmatla/pinkiponki/FysiikkaPeli1/FysiikkaPeli1/Peli.cs @ 1748

Revision 1748, 6.4 KB checked in by joaamaka, 11 years ago (diff)

Uusi peli

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    List<Label> ValikonKohdat;
12
13    Vector nopeusYlos = new Vector(0.0, 400.0);
14    Vector nopeusAlas = new Vector(0.0, -400.0);
15
16    PhysicsObject pallo;
17
18    PhysicsObject maila1;
19    PhysicsObject maila2;
20
21    IntMeter pelaaja1pisteet;
22    IntMeter pelaaja2pisteet;
23
24    PhysicsObject vasenReuna;
25    PhysicsObject oikeaReuna;
26
27    public override void Begin()
28    {
29        Valikko();
30    }
31
32    void Valikko()
33    {
34        ClearAll();
35        Level.BackgroundColor = Color.DarkGreen;
36        ValikonKohdat = new List<Label>();
37
38        Label kohta1 = new Label("Aloita uus peli");
39        kohta1.Position = new Vector(0, 50);
40        kohta1.TextColor = Color.Wheat;
41        ValikonKohdat.Add(kohta1);
42
43        Label kohta2 = new Label("Lopeta");
44        kohta2.Position = new Vector(0, -30);
45        kohta2.TextColor = Color.Wheat;
46        ValikonKohdat.Add(kohta2);
47
48        foreach (Label Valikonkohta in ValikonKohdat)
49            Add(Valikonkohta);
50
51        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloota, null);
52        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
53
54        Mouse.IsCursorVisible = true;
55        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
56        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
57    }
58
59    void ValikossaLiikkuminen(AnalogState hiirenTila)
60    {
61        foreach (Label kohta in ValikonKohdat)
62        {
63            if (Mouse.IsCursorOn(kohta))
64            {
65                kohta.TextColor = Color.YellowGreen;
66            }
67            else
68            {
69                kohta.TextColor = Color.Wheat;
70            }
71        }
72    }
73
74    void Aloota()
75    {
76        ClearAll();
77        LuoKentta();
78        LisaaLaskurit();
79        AsetaOhjaimet();
80        AloitaPeli();
81    }
82
83    void Lopeta()
84    {
85        Exit();
86    }
87
88    void LisaaLaskurit()
89    {
90        pelaaja1pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
91        pelaaja2pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
92    }
93
94    IntMeter LuoPisteLaskuri(double x, double y)
95    {
96        IntMeter laskuri = new IntMeter(5);
97        laskuri.MaxValue = 998;
98        Label naytto = new Label();
99        naytto.BindTo(laskuri);
100        naytto.Y = y;
101        naytto.X = x;
102        naytto.TextColor = Color.White;
103        naytto.BorderColor = Level.BackgroundColor;
104        naytto.Color = Level.BackgroundColor;
105        Add (naytto);
106        return laskuri;
107    }
108
109    PhysicsObject LuoPallo()
110    {
111        pallo = new PhysicsObject(50.0, 60.0);
112        pallo.Shape = Shape.Circle;
113        pallo.Color = Color.Gray;
114        pallo.X = 0;
115        pallo.Y = 0;
116        pallo.Restitution = 1.0;
117        Add(pallo);
118        return pallo;
119    }
120
121    void LuaPallo()
122    {
123        LuoPallo();
124    }
125
126    void LuoKentta()
127    {
128        pallo = LuoPallo();
129
130        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
131        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
132
133        vasenReuna = Level.CreateLeftBorder();
134        vasenReuna.Restitution = 1.0;
135        vasenReuna.IsVisible = false;
136        oikeaReuna = Level.CreateRightBorder();
137        oikeaReuna.Restitution = 1.0;
138        oikeaReuna.IsVisible = false;
139        PhysicsObject ylaReuna = Level.CreateTopBorder();
140        ylaReuna.Restitution = 1.0;
141        ylaReuna.IsVisible = false;
142        PhysicsObject alaReuna = Level.CreateBottomBorder();
143        alaReuna.Restitution = 1.0;
144        alaReuna.IsVisible = false;
145
146        AddCollisionHandler(pallo, KasittelePallonTormays);
147
148        Camera.ZoomToLevel();
149    }
150
151    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
152    {
153        if (kohde == vasenReuna)
154        {
155            pelaaja1pisteet.Value -= 1;
156        }
157        else if (kohde == oikeaReuna)
158        {
159            pelaaja2pisteet.Value -= 1;
160        }
161    }
162
163    void AloitaPeli()
164    {
165        Vector impulssi = new Vector(300,150);
166        pallo.Hit(impulssi);
167    }
168
169    PhysicsObject LuoMaila(double x, double y)
170    {
171        PhysicsObject maila = PhysicsObject.CreateStaticObject(25.0, 150.0);
172        maila.Shape = Shape.Rectangle;
173        maila.Color = Color.Black;
174        maila.X = x;
175        maila.Y = y;
176        maila.Restitution = 1.0;
177        Add(maila);
178        return maila;
179    }
180
181    void AsetaOhjaimet()
182    {
183        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Valikkoon");
184        Keyboard.Listen(Key.C, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
185        Keyboard.Listen(Key.Space, ButtonState.Pressed, Release, "Liikuta palloa");
186
187        Keyboard.Listen(Key.P, ButtonState.Down, Huijaus1, "");
188        Keyboard.Listen(Key.Q, ButtonState.Down, Huijaus2, "");
189        Keyboard.Listen(Key.B, ButtonState.Released, LuaPallo, "Uusi pallo");
190
191        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "1 ylös", maila1, nopeusYlos);
192        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
193        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "1 alas", maila1, nopeusAlas);
194        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
195
196        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "2 ylös", maila2, nopeusYlos);
197        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
198        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "2 alas", maila2, nopeusAlas);
199        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
200    }
201
202    void Huijaus1()
203    {
204        pelaaja2pisteet.Value += 1;
205    }
206
207    void Huijaus2()
208    {
209        pelaaja1pisteet.Value += 2;
210    }
211
212    void Release()
213    {
214        pallo.Velocity = new Vector(-400, 200);
215    }
216
217    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
218    {
219        if( (nopeus.Y > 0) && (maila.Top > Level.Top))
220        {
221            maila.Velocity = Vector.Zero;
222            return;
223        }
224
225        if( (nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
226        {
227            maila.Velocity = Vector.Zero;
228            return;
229        }
230        maila.Velocity = nopeus;
231    }
232}
Note: See TracBrowser for help on using the repository browser.