source: 2013/23/VilppuP/Bansher/Bansher/Bansher/Bansher.cs @ 4037

Revision 4037, 10.5 KB checked in by vivapark, 8 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 Bansher : PhysicsGame
10{
11    SoundEffect pallonPonnahdus = LoadSoundEffect("Boing1");
12    SoundEffect peliPäättyy = LoadSoundEffect("Gameover");
13    SoundEffect clickAani = LoadSoundEffect("Click");
14    Image taustaKuva = LoadImage("Background");
15    Image Logo = LoadImage("logo");
16    IntMeter Laskuri;
17    Label pisteNaytto;
18    Vector alkupiste;
19    List<PhysicsObject> viivat;
20    GameObject piirrettavaViiva;
21    bool vasenNappiAlhaalla = false;
22    EasyHighScore topLista = new EasyHighScore();
23    PhysicsObject alaReuna;
24    PushButton clearScores;
25
26    public override void Begin()
27    {
28        SetWindowSize(1024, 768, true);
29        IsPaused = true;
30        ClearAll();
31        viivat = new List<PhysicsObject>();
32        MediaPlayer.IsRepeating = true;
33        IsMouseVisible = true;
34        Painovoima();
35        LuoKentta();
36        LaskurinLuonti();
37        Ohjaimet();
38        Ajastin();
39        Ajastin2();
40        PalloGenerator();
41        MediaPlayer.IsMuted = true;
42        piirrettavaViiva = new GameObject(2, 2);
43        piirrettavaViiva.Color = new Color(255, 255, 0, 100);
44        MediaPlayer.Volume = 0.4;
45
46        Label tekstikentta = new Label("v. 0.20.145");
47        Add(tekstikentta);
48        tekstikentta.X = Screen.Right - 85;
49        tekstikentta.Y = Screen.Bottom + 25;
50
51        Widget logoWidget = new Widget(Logo);
52        PushButton aloitusNappi = new PushButton("Begin");
53        aloitusNappi.Clicked += Aloitus;
54        aloitusNappi.Clicked += ButtonPlay;
55        PushButton parhaatPisteet = new PushButton("High scores");
56        parhaatPisteet.Clicked += ParhaatPisteet;
57        parhaatPisteet.Clicked += ButtonPlay;
58        PushButton ohjeet = new PushButton("Instructions");
59        ohjeet.Clicked += Ohjeet;
60        ohjeet.Clicked += ButtonPlay;
61        PushButton Poistu = new PushButton("Exit");
62        Poistu.Clicked += Exit;
63        Poistu.Clicked += ButtonPlay;
64
65        Window alkuValikko = new Window();
66        alkuValikko.Add(logoWidget);
67        alkuValikko.Add(aloitusNappi);
68        alkuValikko.Add(parhaatPisteet);
69        alkuValikko.Add(ohjeet);
70        alkuValikko.Add(Poistu);
71        Add(alkuValikko);
72
73        aloitusNappi.Clicked += alkuValikko.Close;
74
75        /*MultiSelectWindow alkuValikko = new MultiSelectWindow("", "Aloita peli", "Parhaat pisteet", "Lopeta");
76        alkuValikko.Add(logoWidget);
77        Add(alkuValikko);
78        alkuValikko.AddItemHandler(0, Aloitus);
79        alkuValikko.AddItemHandler(1, ParhaatPisteet);
80        alkuValikko.AddItemHandler(2, Exit);*/
81
82
83    }
84
85    void ButtonPlay()
86    {
87        clickAani.Play();
88    }
89
90    void PalloGenerator()
91    {
92        PhysicsObject pallo = new PhysicsObject(20, 20);
93        pallo.Shape = Shape.Circle;
94        pallo.Color = Color.Black;
95        //pallo.Position = new Vector(0, Level.Top + 50);
96        pallo.Restitution = 0.5;
97        pallo.X = RandomGen.NextDouble(Level.Left, Level.Right);
98        pallo.Y = Level.Top + 50;
99        Add(pallo);
100        AddCollisionHandler(pallo, alaReuna, alareunanTormays);
101        AddCollisionHandler(pallo, "viiva", TuhoaViiva);
102    }
103
104    void Painovoima()
105    {
106        Gravity = new Vector(0.0, -200.0);
107    }
108
109    void LuoKentta()
110    {
111        // Level.CreateHorizontalBorders(1, false, Color.Blue);
112        Level.Width = 1024;
113        Level.Height = 768;
114        Level.Background.Image = taustaKuva;
115        Surface vasenReuna = new Surface(50, Level.Height * 5);
116        vasenReuna.Bottom = Level.Bottom;
117        vasenReuna.Right = Level.Left;
118        vasenReuna.Restitution = 1.5;
119        Add(vasenReuna);
120
121        Surface oikeaReuna = new Surface(50, Level.Height * 5);
122        oikeaReuna.Bottom = Level.Bottom;
123        oikeaReuna.Left = Level.Right;
124        oikeaReuna.Restitution = 1.5;
125        Add(oikeaReuna);
126
127        alaReuna = Level.CreateBottomBorder();
128        alaReuna.IsVisible = false;
129
130        Camera.ZoomToLevel();
131    }
132
133    void alareunanTormays(PhysicsObject pallo, PhysicsObject alaReuna)
134    {
135        IsPaused = true;
136        PelaajaKuoli();
137    }
138
139    void PainettiinValikonNappia(int valinta)
140    {
141        switch (valinta)
142        {
143            case 0:
144                Tulokset();
145                break;
146            case 1:
147                Exit();
148                break;
149        }
150    }
151   
152
153
154    void LaskurinLuonti()
155
156    {
157        Laskuri = new IntMeter(0);
158
159        pisteNaytto = new Label();
160        pisteNaytto.X = Screen.Right - 100;
161        pisteNaytto.Y = Screen.Top - 20;
162        pisteNaytto.Title = "Score";
163        pisteNaytto.IsVisible = false;
164
165        pisteNaytto.BindTo(Laskuri);
166        Add(pisteNaytto);
167
168    }
169
170    void Ohjaimet()
171    {
172        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AsetaAlkupiste, "Piirrä");
173        Mouse.Listen(MouseButton.Left, ButtonState.Released, AsetaLoppupiste, null);
174        Listener l = Mouse.ListenMovement(0.1, PiirraViivaa, null);
175        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
176        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "Aloita uudelleen");
177        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Tauko, "Lopeta peli");
178
179    }
180
181
182    void AsetaAlkupiste()
183    {
184        alkupiste = Mouse.PositionOnWorld;
185        vasenNappiAlhaalla = true;
186    }
187
188    void PiirraViivaa(AnalogState state)
189    {
190        if (!vasenNappiAlhaalla) return;
191        Vector loppupiste = Mouse.PositionOnWorld;
192        Vector v = loppupiste - alkupiste;
193        if (v == Vector.Zero) return;
194
195        piirrettavaViiva.Width = v.Magnitude;
196        piirrettavaViiva.Height = 5;
197        piirrettavaViiva.Position = alkupiste + v / 2;
198        piirrettavaViiva.Angle = v.Angle;
199        if (!piirrettavaViiva.IsAddedToGame) Add(piirrettavaViiva);
200        if (!piirrettavaViiva.IsVisible) piirrettavaViiva.IsVisible = true;
201    }
202
203    void AsetaLoppupiste()
204    {
205        if (viivat.Count >= 10)
206        {
207            viivat[0].Destroy();
208            viivat.RemoveAt(0);
209        }
210        vasenNappiAlhaalla = false;
211        piirrettavaViiva.IsVisible = false;
212
213        Vector hiirenIrrotusPiste = Mouse.PositionOnWorld;
214        //Vector v = new Vector(
215        //    Math.Abs(hiirenIrrotusPiste.X - alkupiste.X),
216        //    Math.Abs(hiirenIrrotusPiste.Y - alkupiste.Y));
217        if (hiirenIrrotusPiste.X < alkupiste.X)
218        {
219            Vector temp = alkupiste;
220            alkupiste = hiirenIrrotusPiste;
221            hiirenIrrotusPiste = temp;
222        }
223        Vector v = hiirenIrrotusPiste - alkupiste;
224        if (v == Vector.Zero) return;
225
226        PhysicsObject viiva = PhysicsObject.CreateStaticObject(v.Magnitude, 5);
227        viiva.Position = alkupiste + v / 2;
228        viiva.Angle = v.Angle;
229        viiva.Restitution = 0.5;
230        viiva.Tag = "viiva";
231        Add(viiva);
232        viivat.Add(viiva);
233    }
234
235    void TuhoaViiva(PhysicsObject pallo, PhysicsObject viiva)
236    {
237        //Vector v = pallo.Angle.GetVector() * 1000;
238        //if (v.Magnitude > 5000) v = v.Normalize() * 5000;
239        //pallo.Hit(v);
240
241        // pallo.Hit(pallo.Angle.GetVector() * 1000);
242
243        Angle viivanKulma = viiva.Angle;
244        pallo.StopAngular();
245        pallo.StopVertical();
246        pallo.StopHorizontal();
247        pallo.Hit(Vector.FromLengthAndAngle(500, viivanKulma + Angle.FromRadians(Math.PI / 2)));
248
249        viivat.Remove(viiva);
250        //Timer.SingleShot(0.01, delegate { viiva.Destroy(); });
251        viiva.Destroy();
252        pallonPonnahdus.Play();
253
254    }
255
256    void Aloitus()
257    {
258        IsPaused = false;
259        MediaPlayer.IsMuted = false;
260        pisteNaytto.IsVisible = true;
261        //clearScores.IsVisible = false;
262        MediaPlayer.Play("Music");
263    }
264
265    void ParhaatPisteet()
266    {
267        //topLista.Clear();
268        topLista.Show();
269        topLista.HighScoreWindow.Closed += topListaSuljettu;
270        clearScores = new PushButton("Nollaa pisteet");
271        clearScores.Clicked += NollaaPisteet;
272        clearScores.Position = new Vector(0, Level.Top - 50);
273       
274
275        Add(clearScores);
276    }
277
278    void topListaSuljettu(Window sender)
279    {
280        clearScores.Destroy();
281    }
282
283    void NollaaPisteet()
284    {
285        topLista.Clear();
286        clearScores.Destroy();
287    }
288
289    void PelaajaKuoli()
290    {
291        MultiSelectWindow valikko = new MultiSelectWindow("GAME OVER", "OK");
292        valikko.ItemSelected += PainettiinValikonNappia;
293        Add(valikko);
294        MediaPlayer.Stop();
295        peliPäättyy.Play();
296        vasenNappiAlhaalla = false;
297    }
298
299    void Tulokset()
300    {
301        topLista.EnterText = "Please enter your name for {0} points!";
302        topLista.EnterAndShow(Laskuri.Value);
303        topLista.MaxNameLength = 15;
304        topLista.HighScoreWindow.Closed += delegate { Begin(); };
305    }
306
307    void Ajastin()
308    {
309        Timer ajastin = new Timer();
310        ajastin.Interval = 10;
311        ajastin.Timeout += LisaaPalloja;
312        ajastin.Start();
313    }
314
315    void Ajastin2()
316    {
317        Timer ajastin = new Timer();
318        ajastin.Interval = 0.2;
319        ajastin.Timeout += LisaaPisteita;
320        ajastin.Start();
321    }
322
323    void LisaaPisteita()
324    {
325        Laskuri.Value += 100;
326    }
327
328    void LisaaPalloja()
329    {
330        PalloGenerator();
331    }
332
333    void Tauko()
334    {
335        IsPaused = true;
336        MediaPlayer.Pause();
337
338        YesNoWindow exitKysely = new YesNoWindow("Do you want to exit?");
339        exitKysely.Yes += Exit;
340        exitKysely.No += Jatka;
341        Add(exitKysely);
342    }
343
344    void Jatka()
345    {
346        IsPaused = false;
347        MediaPlayer.Resume();
348    }
349
350    void Ohjeet()
351    {
352
353        Label ohjeKentta1 = new Label("Welcome to Bansher!");
354        Label ohjeKentta2 = new Label("In this game, you have to keep the balls from falling to the ground by");
355        Label ohjeKentta3 = new Label("drawing bouncy lines (hold left mouse button, drag and release) ");
356        PushButton OK = new PushButton("OK");
357        OK.Clicked += ButtonPlay;
358
359        Window ohjeIkkuna = new Window();
360        ohjeIkkuna.Add(ohjeKentta1);
361        ohjeIkkuna.Add(ohjeKentta2);
362        ohjeIkkuna.Add(ohjeKentta3);
363        ohjeIkkuna.Add(OK);
364        Add(ohjeIkkuna);
365
366        OK.Clicked += ohjeIkkuna.Close;
367    }
368
369}
370
Note: See TracBrowser for help on using the repository browser.