source: 2016/24/JustusL/Object_Ball/Object_Ball/Object_Ball/Object_Ball.cs @ 8023

Revision 8023, 17.7 KB checked in by juleppaa, 5 years ago (diff)

trolli mukana

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Object_Ball : PhysicsGame
10{
11    Image kaarikuva = LoadImage("kaarikakka");
12    Image kursori = LoadImage("palikka kursori");
13    Image Maali = LoadImage("maali_objectBall");
14    Image tauste = LoadImage("ruutu");
15    Image troll = LoadImage("trollface");
16
17
18    double RUUDUN_KOKO = 150;
19
20    Image[] painikeKuvat = LoadImages("kaariosa", "kyna", "palikka");
21
22    bool liikkes;
23    int kenttaNro = 1;
24    IntMeter pisteLaskuri;
25    Label hiiri;
26    PhysicsObject pallo;
27    PhysicsObject maali;
28
29    Vector hiirenLiike = Vector.Zero;
30
31    GameObject haamu;
32
33    Timer ajastin;
34
35    int tyokalu = -1;
36    Vector hiirenEdellinenPaikka = Vector.Zero;
37
38
39    public override void Begin()
40    {
41        ClearAll();
42        AlkuValikko();
43       
44
45       
46    }
47    void AloitaPeli()
48    {
49        liikkes = false;
50        haamu = null;
51        Gravity = new Vector(0, -70);
52
53
54
55        //Level.Background.Image = tauste;
56        //Level.Background.TileToLevel();
57
58
59        //Camera.Follow(pallo);
60        Camera.StopFollowing();
61
62        Ohjaimet();
63        LuoSlider();
64        LuoKauppa();
65        Grafiikat();
66
67
68        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta" + kenttaNro);
69
70        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
71        ruudut.SetTileMethod(Color.Red, LuoPallo);
72        //ruudut.SetTileMethod(, LuoTaso);
73        ruudut.SetTileMethod(new Color(255, 14, 255), LuoTahti);
74        ruudut.SetTileMethod(new Color(0, 255, 0), LuoMaali);
75
76        //3. Execute luo kentän
77        //   Parametreina leveys ja korkeus
78        ruudut.Execute(5, 5);
79
80        Level.Width = 1000;
81        Level.Height = 1000;
82        GameObject tausta = new GameObject(Level.Width, Level.Height);
83        tausta.Image = tauste;
84        tausta.TextureWrapSize = new Vector(300, 300);
85        Add(tausta, -3);
86        Level.CreateBorders();
87
88        pisteLaskuri = new IntMeter(0);
89
90        Label pisteNaytto = new Label();
91        pisteNaytto.IntFormatString = " {0:D1} Stars collected ";
92        pisteNaytto.TextColor = Color.HotPink;
93        pisteNaytto.X = Screen.Right - 100;
94        pisteNaytto.Y = Screen.Top - 108;
95        pisteNaytto.TextColor = Color.HotPink;
96        pisteNaytto.Color = Color.Black;
97        pisteNaytto.BindTo(pisteLaskuri);
98        Add(pisteNaytto);
99    }
100
101    void LuoKauppa()
102    {
103        for (int i = 0; i < painikeKuvat.Length; i++)
104        {
105            LuoKauppaPainike(painikeKuvat[i], i);
106        }
107
108    }
109
110    void LuoKauppaPainike(Image kuvake, int paikka)
111    {
112        var kuva = new PushButton(kuvake);
113        kuva.Size = new Vector(1, 1) * RUUDUN_KOKO;
114        kuva.X = Window.ClientBounds.Width / 2 - 100;
115        kuva.Y = Window.ClientBounds.Height / 2 - (200 + RUUDUN_KOKO * paikka);
116        kuva.Color = Color.Green;
117        Add(kuva);
118
119        /*
120        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
121        liukusaadin.Y = Screen.TopSafe - 80;
122         * */
123
124
125        kuva.Clicked += delegate
126        {
127            tyokalu = paikka;
128
129            if (tyokalu == 0 || tyokalu == 2)
130            {
131                if (haamu != null) haamu.Destroy();
132                haamu = new GameObject(20, 20);
133                haamu.Color = new Color(0, 0, 0, 128);
134                Add(haamu);
135                if (tyokalu == 0)haamu.Shape = Shape.FromImage(kaarikuva);
136               
137               
138            }
139        };
140
141    }
142
143    void Ohjaimet()
144    {
145        IsMouseVisible = true;
146        Mouse.IsCursorVisible = false;
147
148        Mouse.Listen(MouseButton.Middle, ButtonState.Down, SeuraajaKamera, "Move Camera");
149        Mouse.ListenWheel(Zoomaa, null);
150
151        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, HiiriPainettu, null);
152        Mouse.Listen(MouseButton.Left, ButtonState.Down, HiiriAlhaalla, null);
153
154        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PauseValikko, "Pause");
155        Keyboard.Listen(Key.Enter, ButtonState.Pressed, PalloLiikkeelle, "Start");
156        Keyboard.Listen(Key.NumPad1, ButtonState.Down, MuutaKulmaa, null, 1);
157        Keyboard.Listen(Key.NumPad3, ButtonState.Down, MuutaKulmaa, null, -1);
158        Keyboard.Listen(Key.A, ButtonState.Down, MuutaKulmaa, null, 1);
159        Keyboard.Listen(Key.Z, ButtonState.Down, MuutaKulmaa, null, -1);
160        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSkaalaa, null, new Vector(1,0));
161        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSkaalaa, null, new Vector(-1, 0));
162        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, 1));
163        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, -1));
164    }
165
166    void HiiriPainettu()
167    {
168        if (tyokalu == 0 && !liikkes)
169        {
170           
171            PhysicsObject kaari = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
172            kaari.Shape = Shape.FromImage(kaarikuva);
173            kaari.Angle = haamu.Angle;
174            kaari.Image = kaarikuva;
175            kaari.Position = Mouse.PositionOnWorld;
176            Add(kaari);
177        }
178        if (tyokalu == 2 && !liikkes)
179        {
180            PhysicsObject kuutio = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
181            kuutio.Shape = Shape.Rectangle;
182            kuutio.Angle = haamu.Angle;
183            kuutio.Color = Color.Black;
184            kuutio.Position = Mouse.PositionOnWorld;
185            Add(kuutio);
186
187        }
188        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
189    }
190
191    void HiiriAlhaalla()
192    {
193        if (Mouse.PositionOnScreen.X > Screen.Right - 180)
194        {
195            hiirenEdellinenPaikka = Mouse.PositionOnWorld;
196            return;
197        }
198
199       
200        if (tyokalu == 1)
201        {
202            if (haamu != null) haamu.Destroy();
203            Vector suunta = Mouse.PositionOnWorld - hiirenEdellinenPaikka;
204           
205            int pallojenMaara = 1 + (int)Math.Round(suunta.Magnitude / 1.0);
206
207            for (int i = 0; i < pallojenMaara; i++)
208            {
209                PhysicsObject piste = PhysicsObject.CreateStaticObject(3, 3);
210                piste.Position = hiirenEdellinenPaikka + suunta * (i / (float)pallojenMaara);
211                piste.Color = Color.Black;
212                piste.Shape = Shape.Circle;
213                Add(piste);
214            }
215        }
216     
217
218        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
219    }
220
221    void MuutaKulmaa( int muutos)
222    {
223        if(tyokalu == 0 || tyokalu == 2)
224        {
225            haamu.Angle += Angle.FromDegrees(muutos);
226        }
227    }
228    void MuutaSkaalaa(Vector skaala)
229    {
230        if (haamu != null && (haamu.Size+skaala).X > 0 && (haamu.Size + skaala).Y > 0)
231        {
232            haamu.Size += skaala;
233        }
234    }
235    void LuoMaali(Vector paikka, double leveys, double korkeus)
236    {
237       
238
239        maali = PhysicsObject.CreateStaticObject(leveys*2, korkeus*2);
240        maali.Tag = "maali";
241        maali.Image = Maali;
242        maali.Position = paikka;
243
244        Add(maali);
245 }
246    void LuoPallo(Vector paikka, double leveys, double korkeus)
247{
248     pallo = new PhysicsObject(leveys, korkeus);
249        pallo.Shape = Shape.Circle;
250        pallo.Color = Color.Red;
251        pallo.IgnoresPhysicsLogics = true;
252        Add(pallo);
253        pallo.Position = paikka;
254        AddCollisionHandler(pallo, "maali", Voitto);
255        AddCollisionHandler(pallo, "tahti", Kerays);
256
257        Add(pallo);
258}
259    void LuoTahti(Vector paikka, double leveys, double korkeus)
260    {
261        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
262        tahti.Shape = Shape.Star;
263        tahti.Color = Color.HotPink;
264        tahti.Tag = "tahti";
265        tahti.Position = paikka;
266        tahti.IgnoresCollisionResponse = true;
267        Add(tahti);
268    }
269
270    void Kerays(PhysicsObject pallo, PhysicsObject tahti)
271    {
272        tahti.Destroy();
273        MessageDisplay.Add(" You collected a star! ");
274       
275        pisteLaskuri.Value++;
276    }
277
278
279
280    void Grafiikat()
281    {
282       hiiri = new Label(50, 50);
283       hiiri.Image = kursori;
284       
285        Mouse.ListenMovement(0.0, HiirenSeuraus, null);
286        Add(hiiri);
287
288
289    }
290    void HiirenSeuraus(AnalogState hiirenTila)
291    {
292        hiirenLiike = hiirenTila.MouseMovement;
293
294        hiiri.Position = Mouse.PositionOnWorld;
295        hiiri.Position = Mouse.PositionOnScreen;
296        Camera.StayInLevel = true;
297        if (haamu != null)
298        {
299            haamu.Position = Mouse.PositionOnWorld;
300        }
301
302    }
303    void PalloLiikkeelle()
304    {
305        //Add(pallo);
306        Camera.Follow(pallo);
307        Keyboard.Disable(Key.Enter);
308        pallo.IgnoresPhysicsLogics = false;
309        if (haamu != null) haamu.Destroy();
310        //tyokalu = -1;
311
312        liikkes = true;
313
314        ajastin = new Timer();
315        ajastin.Interval = 0.5;
316        ajastin.Timeout += TarkistaNopeus;
317        ajastin.Start();
318
319    }
320
321    void TarkistaNopeus()
322    {
323        if (pallo.Velocity.Magnitude < 0.03)
324        {
325
326            Havio();
327        }
328    }
329
330    void SeuraajaKamera()
331    {
332        Camera.Position += -hiirenLiike;
333        //Camera.X = Mouse.PositionOnWorld.X * 0.5;
334        //Camera.Y = Mouse.PositionOnWorld.Y * 0.5;
335    }
336    void LuoSlider()
337    {
338        DoubleMeter zoomausKerroin = new DoubleMeter(0, -100, 0);
339        zoomausKerroin.Changed += ZoomaaKenttaa;
340
341        Slider liukusaadin = new Slider(50, 20);
342        liukusaadin.BindTo(zoomausKerroin);
343       
344        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
345        liukusaadin.Y = Screen.TopSafe - 80;
346
347        liukusaadin.Color = Color.Pink;
348        liukusaadin.Knob.Color = Color.Black;
349        liukusaadin.Track.Color = Color.Blue;
350        liukusaadin.BorderColor = Color.Red;
351        Add(liukusaadin);
352    }
353
354
355    void ZoomaaKenttaa(double vanhaArvo, double uusiArvo)
356    {
357        Camera.ZoomFactor = 1 + uusiArvo;
358    }
359    void Zoomaa()
360    {
361        Camera.ZoomFactor += Mouse.WheelChange * 0.07;
362    }
363    void YOUAREANIDIOT()
364    {
365        ClearAll();
366
367        Level.Background.Color = Color.Black;
368       
369        Explosion trollface = new Explosion(Screen.Height);
370        trollface.Image = troll;
371        trollface.Position = new Vector (0, 0);
372        trollface.Speed = 10.0;
373       
374        Add(trollface);
375        Keyboard.Listen(Key.LeftAlt, ButtonState.Down, Avaa, null);
376        Keyboard.Listen(Key.RightAlt, ButtonState.Down, Avaa, null);
377        Keyboard.Listen(Key.Escape, ButtonState.Down, Avaa, null);
378
379
380    }
381 
382
383    void Avaa()
384    {
385        System.Diagnostics.Process.Start("trolloll");
386   }
387    void PeliOhje()
388    {
389        MultiSelectWindow peliohje = new MultiSelectWindow("\n Collect as many stars as you can and go to goal by making a track. \n You can make the track with blocks and curves which you can resize and change angle \n or you can draw a line with pencil tool. \n \n Starting playing: \n \n -Choose tool from right edge \n \n if tool = pencil you can draw if tool = curve or block you can rezize it \n (try arrowkeys) \n or you can rotate it \n (clockwise z or numpad 3 and counterclockwise a or numpad 1) \n", "OK");
390
391        Add(peliohje);
392
393        peliohje.AddItemHandler(0, AlkuValikko);
394    }
395
396    void AlkuValikko()
397    {
398        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Object Ball", "Levels","Info", "Options", "Quit");
399
400        Add(alkuvalikko);
401
402        alkuvalikko.AddItemHandler(0, AloitaPeli);
403        alkuvalikko.AddItemHandler(1, Info);
404        alkuvalikko.AddItemHandler(2, AlkuAsetukset);
405        alkuvalikko.AddItemHandler(3, Poistuminen);
406
407        alkuvalikko.BorderColor = Color.Red;
408        alkuvalikko.Font = Font.DefaultBold;
409        alkuvalikko.SetButtonTextColor(Color.Black);
410        alkuvalikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
411        alkuvalikko.SelectionColor = Color.DarkRed;
412        alkuvalikko.Color = new Color(255, 255, 255, 0.4);
413        alkuvalikko.QuestionLabel.TextColor = Color.DarkRed;
414
415    }
416    void AlkuAsetukset()
417    {
418        MultiSelectWindow alkuasetukset = new MultiSelectWindow("\n Options", "Back", "Sound", "Saving");
419
420        Add(alkuasetukset);
421
422        alkuasetukset.AddItemHandler(0, AlkuValikko);
423
424        alkuasetukset.BorderColor = Color.Red;
425        alkuasetukset.Font = Font.DefaultBold;
426        alkuasetukset.SetButtonTextColor(Color.Black);
427        alkuasetukset.SetButtonColor(new Color(1.0, 0, 0, 0.4));
428        alkuasetukset.SelectionColor = Color.DarkRed;
429        alkuasetukset.Color = new Color(255, 255, 255, 0.4);
430        alkuasetukset.QuestionLabel.TextColor = Color.DarkRed;
431
432    }
433    void Info()
434    {
435        MultiSelectWindow infovalikko = new MultiSelectWindow("Info", "Back", "Playing", "Credis");
436
437        Add(infovalikko);
438
439        infovalikko.AddItemHandler(0, AlkuValikko);
440        infovalikko.AddItemHandler(1, PeliOhje);
441
442
443       infovalikko.BorderColor = Color.Red;
444       infovalikko.Font = Font.DefaultBold;
445       infovalikko.SetButtonTextColor(Color.Black);
446       infovalikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
447       infovalikko.SelectionColor = Color.DarkRed;
448       infovalikko.Color = new Color(255, 255, 255, 0.4);
449       infovalikko.QuestionLabel.TextColor = Color.DarkRed;
450    }
451
452    void PauseValikko()
453    {
454        Pause();
455        MultiSelectWindow pausevalikko = new MultiSelectWindow("\n Pause", "Resume", "Restart", "Options", "Menu", "Quit");
456
457        pausevalikko.BorderColor = Color.Red;
458        pausevalikko.Font = Font.DefaultBold;
459        pausevalikko.SetButtonTextColor(Color.Black);
460        pausevalikko.SetButtonColor(new Color(1.0 , 0, 0, 0.4));
461        pausevalikko.SelectionColor = Color.DarkRed;
462        pausevalikko.Color = new Color(255, 255, 255, 0.4);
463        pausevalikko.QuestionLabel.TextColor = Color.DarkRed;
464       
465        Add(pausevalikko);
466        pausevalikko.AddItemHandler(0, Pause);
467        pausevalikko.AddItemHandler(1, Uudestaan);
468        pausevalikko.AddItemHandler(2, Asetukset);
469        pausevalikko.AddItemHandler(4, Poistuminen);
470
471    }
472    void Asetukset()
473    {
474        MultiSelectWindow asetukset = new MultiSelectWindow("\n Options", "Back", "Sound", "Graphic");
475        Add(asetukset);
476        asetukset.BorderColor = Color.Red;
477        asetukset.Font = Font.DefaultBold;
478        asetukset.SetButtonTextColor(Color.Black);
479        asetukset.SetButtonColor(new Color(1.0, 0, 0, 0.4));
480        asetukset.SelectionColor = Color.DarkRed;
481        asetukset.Color = new Color(255, 255, 255, 0.4);
482        asetukset.QuestionLabel.TextColor = Color.DarkRed;
483        asetukset.AddItemHandler(0, delegate
484        {
485            Pause();
486            PauseValikko();
487        });
488
489
490    }
491    void Havio()
492    {
493        ajastin.Stop();
494        MultiSelectWindow havio = new MultiSelectWindow("YOU LOST!!!", "Try again", "Menu", "Quit");
495        Add(havio);
496        havio.SelectionColor = Color.Black;
497        havio.BorderColor = Color.DarkRed;
498        havio.SetButtonColor(Color.DarkRed);
499        havio.QuestionLabel.TextColor = Color.Red;
500        havio.AddItemHandler(0, Uudestaan);
501
502        havio.AddItemHandler(2, Poistuminen);
503    }
504
505
506    void Voitto(PhysicsObject pallo, PhysicsObject maali)
507    {
508        pallo.Destroy();
509        string pisteIlmoitus;
510        if (pisteLaskuri.Value != 1)
511        {
512            pisteIlmoitus = "With " + pisteLaskuri.Value + " Stars";
513        }                   
514        else                 
515        {                   
516            pisteIlmoitus = "With " + pisteLaskuri.Value + " Star";
517        }
518       
519        MultiSelectWindow voittoValikko = new MultiSelectWindow("\n Nice job! \n\n Level " + kenttaNro + " Completed \n \n " + pisteIlmoitus, "Next", "Again?", "Menu", "Quit");
520        voittoValikko.BorderColor = Color.Red;
521        voittoValikko.Font = Font.DefaultBold;
522        voittoValikko.SetButtonTextColor(Color.Black);
523        voittoValikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
524        voittoValikko.SelectionColor = Color.DarkRed;
525        voittoValikko.Color = new Color(255, 255, 255, 0.4);
526        voittoValikko.QuestionLabel.TextColor = Color.DarkRed;
527        Add(voittoValikko);
528        voittoValikko.AddItemHandler(0, SeuraavaKentta);
529        voittoValikko.AddItemHandler(1, Uudestaan);
530
531        voittoValikko.AddItemHandler(3, Poistuminen);
532        /*MessageDisplay.Add("You are good!");
533        Timer.SingleShot(3, Exit);*/
534    }
535    void SeuraavaKentta()
536    {
537        kenttaNro++;
538        Uudestaan();
539    }
540    void Uudestaan() 
541    {
542        IsPaused = false;
543        ClearAll();
544        tyokalu = -1;
545        //if (kenttaNro > 2) ; //Tähän kolmosen kohdalle tulee kenttien lukumäärä
546       // else Begin("kentta" + kenttaNro);
547        AloitaPeli();
548    }
549          void Poistuminen()
550    {
551        MultiSelectWindow lopetusVarmistus = new MultiSelectWindow("Are you idiot?", "\n Yes \n", "\n No\n");
552        lopetusVarmistus.BorderColor = Color.Red;
553        lopetusVarmistus.Font = Font.DefaultBold;
554        lopetusVarmistus.SetButtonTextColor(Color.Black);
555        lopetusVarmistus.SetButtonColor(new Color(1.0, 0, 0, 0.4));
556        lopetusVarmistus.SelectionColor = Color.DarkRed;
557        lopetusVarmistus.Color = new Color(255, 255, 255, 0.4);
558        lopetusVarmistus.QuestionLabel.TextColor = Color.DarkRed;
559        Add(lopetusVarmistus);
560
561        lopetusVarmistus.AddItemHandler(0, YOUAREANIDIOT);
562        lopetusVarmistus.AddItemHandler(1, Exit);
563
564    } 
565           
566
567}
Note: See TracBrowser for help on using the repository browser.