source: 2016/24/JoonatanJ/Pomppu/Pomppu/Pomppu/Pomppu.cs @ 10334

Revision 7437, 7.5 KB checked in by joojarvi, 3 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 Pomppu : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("pallopoju");
18
19    Image piikinkuva = LoadImage("cocacola");
20
21    Image vihunkuva = LoadImage("cocacolaman");
22
23    Image tahdenkuva = LoadImage("pepsimax");
24    List<PhysicsObject> piikkienPaikat;
25
26    Vector spawnLokaatio;
27
28    SoundEffect maaliAani = LoadSoundEffect("maali");
29    string kenttaMenossa = "kentta2";
30
31    public override void Begin()
32    {
33        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
34"Aloita peli", "Lopeta");
35        Add(alkuValikko);
36        alkuValikko.AddItemHandler(0, AloitaPeli);
37        alkuValikko.AddItemHandler(1, Exit);
38        alkuValikko.Color = Color.Gold;
39        Mouse.IsCursorVisible = true;
40        Level.BackgroundColor = Color.Black;
41    }
42
43    void AloitaPeli()
44    {
45        Gravity = new Vector(0, -500);
46
47        LuoKentta();
48        LisaaNappaimet();
49
50        Camera.Follow(pelaaja1);
51        Camera.ZoomFactor = 1.2;
52        Camera.StayInLevel = true;
53        LuoAikaLaskuri();
54    }
55
56    void LuoKentta()
57    {
58        piikkienPaikat = new List<PhysicsObject>();
59        TileMap kentta = TileMap.FromLevelAsset(kenttaMenossa);
60        kentta.SetTileMethod('#', LisaaEsine, "taso", Color.Black);
61        kentta.SetTileMethod('N', LisaaPelaaja);
62        kentta.SetTileMethod('W', LisaaEsine, "maali", Color.Gold);
63        kentta.SetTileMethod('L', LisaaPiikki, "piikki", Color.Gray, piikinkuva);
64        kentta.SetTileMethod('O', LisaaEsine, "piikki", Color.Black);
65        kentta.SetTileMethod('P', LisaaPiikki, "tahti", Color.Gray, tahdenkuva);
66        kentta.SetTileMethod('S', LisaaSpawneri);
67        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
68        Level.CreateBorders();
69        Level.Background.CreateGradient(Color.Black, Color.Red);
70    }
71
72    private void LisaaSpawneri(Vector position, double width, double height)
73    {
74        Timer spawneri = new Timer();
75        spawneri.Interval = 0.2;
76        spawneri.Timeout += delegate
77        {
78            for (int i = 0; i < piikkienPaikat.Count; i++)
79            {
80                if (pelaaja1.Position.X >= piikkienPaikat[i].Position.X)
81                {
82                    LisaaVihu(new Vector(piikkienPaikat[i].X, piikkienPaikat[i].Y + height), width, height);
83                    piikkienPaikat.RemoveAt(i);
84                }
85            }
86
87        };
88        spawneri.Start();
89    }
90
91    void LisaaVihu(Vector paikka, double leveys, double korkeus)
92    { 
93        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
94    vihu.Position = paikka;
95        vihu.Color = Color.Aquamarine;
96        vihu.Tag = "vihu";
97        Add(vihu);
98        vihu.Image = vihunkuva;
99
100        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
101        seuraajanAivot.Speed = 350;
102        vihu.Brain = seuraajanAivot;
103
104        /*PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
105        tasoAivot.Speed = 100;
106        tasoAivot.JumpSpeed = 700;
107        tasoAivot.TriesToJump = true;
108        tasoAivot.Direction = Direction.None;
109        vihu.Brain = tasoAivot;*/
110    }
111    void LisaaEsine(Vector paikka, double leveys, double korkeus, string nimi, Color vari)
112    {
113      //  PhysicsObject vihu = new PhysicsObject(leveys, korkeus);
114        PhysicsObject esine = PhysicsObject.CreateStaticObject(leveys, korkeus);
115        esine.Position = paikka;
116        esine.Color = vari;
117        esine.Tag = nimi;
118        Add(esine);
119    }
120
121    void LisaaPiikki(Vector paikka, double leveys, double korkeus, string nimi, Color vari, Image kuva)
122    {
123        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus*1.2);
124        piikki.Position = paikka;
125        piikki.Color = vari;
126        piikki.Tag = nimi;
127        piikki.CollisionIgnoreGroup = 2;
128        piikki.Image = kuva;
129        Add(piikki);
130        piikkienPaikat.Add(piikki);
131    }
132
133    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
134    {
135        pelaaja1 = new PlatformCharacter(leveys, korkeus);
136        pelaaja1.Position = paikka;
137        pelaaja1.Shape = Shape.Circle;
138        pelaaja1.Mass = 1000.0;
139        pelaaja1.Image = pelaajanKuva;
140        spawnLokaatio = paikka;
141        Add(pelaaja1);
142        AddCollisionHandler(pelaaja1, "piikki", PelaajaOsuuPiikkiin);
143        AddCollisionHandler(pelaaja1, "vihu", PelaajaOsuuPiikkiin);
144        AddCollisionHandler(pelaaja1, "tahti", PelaajaOsuuTahteen);
145        AddCollisionHandler(pelaaja1, "maali", PelaajaOsuuMaaliin);
146    }
147
148
149
150    void LisaaNappaimet()
151    {
152        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
153        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
154
155        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
156        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
157        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
158
159        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
160
161        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
162        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
163        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
164
165        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
166    }
167
168    void Liikuta(PlatformCharacter hahmo, double nopeus)
169    {
170        hahmo.Walk(nopeus);
171    }
172
173    void Hyppaa(PlatformCharacter hahmo, double nopeus)
174    {
175        hahmo.Jump(nopeus);
176    }
177
178    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
179    {
180        maaliAani.Play();
181        MessageDisplay.Add("Keräsit tähden!");
182        tahti.Destroy();
183    }
184    void PelaajaOsuuPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
185    {
186        pelaaja.Position = spawnLokaatio;
187
188    }
189
190    void PelaajaOsuulattiaan(PhysicsObject pelaaja, PhysicsObject lattia)
191    {
192        pelaaja.Destroy();
193    }
194    void PelaajaOsuuTahteen(PhysicsObject pelaaja, PhysicsObject pullo)
195    {
196        pullo.Destroy();
197        MessageDisplay.Add("Keräsit pullon ootko nyt iloinen Häh?!");
198    }
199    void PelaajaOsuuMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
200    {
201        ClearAll();
202        if (kenttaMenossa == "kentta2")
203        {
204            MessageDisplay.Add("Peli loppui!");
205            Level.Background.Color = Color.Red;
206
207            Label voitit = new Label("Voitit pelin");
208            voitit.Color = Color.Blue;
209            Add(voitit);
210            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
211        }
212        else
213        {
214            kenttaMenossa = "kentta2";
215            AloitaPeli();
216        }
217    }
218    void LuoAikaLaskuri()
219    {
220        Timer aikaLaskuri = new Timer();
221        aikaLaskuri.Start();
222
223        Label aikaNaytto = new Label();
224        aikaNaytto.TextColor = Color.White;
225        aikaNaytto.DecimalPlaces = 1;
226        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
227        Add(aikaNaytto);
228    }
229
230}
Note: See TracBrowser for help on using the repository browser.