source: 2017/27/OskariL/testiasdf/testiasdf/testiasdf/testiasdf.cs @ 8987

Revision 8987, 10.1 KB checked in by npo17_41, 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 testiasdf : PhysicsGame
10{
11    const double nopeus = 200;
12    const int RUUDUN_KOKO = 40;
13    bool alkuvalikkoOhi = false;
14    int kenttanro = 1;
15    int pelaajanhypyt = 2;
16
17    Timer taustaLaskuri;
18    PlatformCharacter pelaaja1;
19
20    PhysicsObject taso;
21    PhysicsObject taso2;
22    PhysicsObject ammus;
23    PhysicsObject maali;
24    PhysicsObject alareuna;
25    PhysicsObject ylareuna;
26
27    Image pelaajanKuva = LoadImage("norsu");
28    Image tahtiKuva = LoadImage("tahti");
29
30    SoundEffect maaliAani = LoadSoundEffect("maali");
31    public override void Begin()
32    {
33
34        if(alkuvalikkoOhi == false)
35        {
36            ValikkoTausta();
37
38            MultiSelectWindow alkuValikko = new MultiSelectWindow("",
39"Aloita peli", "Lopeta");
40            alkuValikko.AddItemHandler(0, KenttaValikko);
41            alkuValikko.AddItemHandler(1, Exit);
42            alkuValikko.DefaultCancel = 1;
43            alkuValikko.Shape = Shape.Hexagon;
44            alkuValikko.Color = Color.DarkAzure;
45            Add(alkuValikko);
46            alkuvalikkoOhi = true;
47        }
48
49    }
50    void ValikkoTausta()
51    {
52        Level.Background.CreateGradient(Color.DarkAzure, Color.Azure);
53        taustaLaskuri = new Timer();
54        taustaLaskuri.Interval = 0.04;
55        taustaLaskuri.Timeout += delegate 
56            {
57                LuoAmmus(RandomGen.NextDouble(Level.Left - 450, Level.Right + 450), Level.Bottom - 150, RandomGen.SelectOne(Shape.Diamond, Shape.Ellipse, Shape.Hexagon), Color.Cyan, 2, true);
58                ammus.Hit(new Vector(0.0, RandomGen.NextDouble(4.0, 40.0)));
59            }
60        ;
61        taustaLaskuri.Start();
62
63
64    }
65    void LuoAmmus(double x, double y, Shape shape, Color vari, int cig, bool ignores)
66    {
67        ammus = new PhysicsObject(32.0, 32.0);
68        ammus.X = x;
69        ammus.Y = y;
70        ammus.Shape = shape;
71        ammus.Color = vari;
72        ammus.CanRotate = true;
73        ammus.IgnoresCollisionResponse = false;
74        ammus.IgnoresExplosions = ignores;
75        ammus.CollisionIgnoreGroup = cig;
76        ammus.IgnoresCollisionWith(ammus);
77        ammus.Tag = "ammus";
78        Add(ammus);
79
80
81    }
82    void KenttaValikko()
83    {
84        ValikkoTausta();
85        MultiSelectWindow kenttavalikko = new MultiSelectWindow("", "Kenttä 1", "Kenttä 2", "Kenttä 3", "Takaisin");
86        kenttavalikko.AddItemHandler(0, PelinAloitus);
87        kenttavalikko.AddItemHandler(1, delegate
88            {
89                kenttanro = 2;
90                PelinAloitus();
91            }
92        );
93        kenttavalikko.AddItemHandler(2, delegate
94            {
95                kenttanro = 3;
96                PelinAloitus();
97            }
98        );
99        kenttavalikko.AddItemHandler(3, delegate
100            {
101                alkuvalikkoOhi = false;
102                Begin();
103            }
104        );
105        kenttavalikko.DefaultCancel = 3;
106        kenttavalikko.Shape = Shape.Hexagon;
107        kenttavalikko.Color = Color.DarkAzure;
108        Add(kenttavalikko);
109
110    }
111    void PelinAloitus()
112    {
113       
114        LuoKentta(kenttanro);
115        LisaaNappaimet();
116        Camera.Follow(pelaaja1);
117        Camera.ZoomFactor = 1.2;
118        Camera.StayInLevel = true;
119        Gravity = new Vector(0, 0);
120
121
122    }
123    void LuoKentta(int kenttanro)
124    {
125        string kenttanimi = kenttanro.ToString();
126        TileMap kentta = TileMap.FromLevelAsset(kenttanimi);
127        kentta.SetTileMethod('P', LisaaTaso);
128        kentta.SetTileMethod('A', LisaaTahti);
129        kentta.SetTileMethod('M', LisaaViolettiPalikka);
130        kentta.SetTileMethod('N', LisaaPelaaja);
131        kentta.SetTileMethod('O', LisaaMaali);
132        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
133        alareuna = Level.CreateBottomBorder(1, false);
134        ylareuna = Level.CreateTopBorder(1, false);
135        Level.CreateHorizontalBorders(1,false, Color.Azure);
136        Level.Background.CreateStars(1000);
137
138        LoadSoundEffect("maali");
139    }
140    void LisaaTaso(Vector paikka, double leveys, double korkeus)
141    {
142        //luodaan oskilloivia tasoja
143        taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
144        taso.Position = paikka;
145        taso.Color = Color.Purple;
146        taso.Tag = "taso";
147        taso.Oscillate(new Vector(leveys, -korkeus*2), 35, 0.7, 0, 0);
148        taso.CollisionIgnoreGroup = 1;
149        Add(taso);
150    }
151    void LisaaMaali(Vector paikka, double leveys, double korkeus)
152    {
153        maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
154        maali.Position = paikka;
155        maali.Color = new Color(255, 255, 0);
156        AddCollisionHandler(maali, TormaaMaaliin);
157
158        Add(maali);
159    }
160    void LisaaViolettiPalikka(Vector paikka, double leveys, double korkeus)
161    {
162        taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        taso2.Position = paikka;
164        taso2.Color = Color.Azure;
165        taso2.Tag = "taso";
166        taso2.Oscillate(new Vector(leveys * 2, korkeus), 60, 0.35, 0, 0);
167        taso2.CollisionIgnoreGroup = 1;
168        Add(taso2);
169    }
170    void LisaaTahti(Vector paikka, double leveys, double korkeus)
171    {
172        //luodaan staattisia tasoja
173        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
174        tahti.Position = paikka;
175        tahti.Color = Color.Crimson;
176        tahti.Tag = "taso";
177        tahti.Oscillate(new Vector(300, 100), 55, 0.65, 0, 0);
178
179        Add(tahti);
180    }
181    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
182    {
183        //luodaan pelaaja
184        pelaaja1 = new PlatformCharacter(35, 35);
185        pelaaja1.Position = paikka;
186        pelaaja1.Mass = 3.0;
187        pelaaja1.MaintainMomentum = true;
188        pelaaja1.Color = Color.ForestGreen;
189        pelaaja1.Tag = "pelaaja";
190        AddCollisionHandler(pelaaja1, PelaajaKuolee);
191        AddCollisionHandler(pelaaja1, "taso", TuplaHyppy);
192       
193        Add(pelaaja1);
194    }
195    void LisaaNappaimet()
196    {
197        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
198        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
199
200        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, nopeus);
201        Keyboard.Listen(Key.Down, ButtonState.Pressed, Hyppaa, "Pelaaja laskeutuu", pelaaja1, -nopeus);
202        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaX, "Liikkuu vasemmalle", pelaaja1, -nopeus);
203        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaX, "Liikkuu oikealle", pelaaja1, nopeus);
204        Keyboard.Listen(Key.Z, ButtonState.Pressed, Ammu, "Pelaaja ampuu", pelaaja1);
205
206    }
207    void PelaajaKuolee(PhysicsObject pelaaja1, PhysicsObject reuna)
208    {
209        if(pelaaja1.Bottom < Level.Bottom + 20)
210        {
211            Explosion rajahdys = new Explosion(300);
212            rajahdys.Position = pelaaja1.Position;
213            rajahdys.Image = null;
214            rajahdys.Color = Color.ForestGreen;
215            Add(rajahdys);
216            pelaaja1.Destroy();
217            Timer.SingleShot(1.5, AloitaAlusta);
218        }
219        else if(pelaaja1.Top > Level.Top)
220        {
221            Explosion rajahdys = new Explosion(300);
222            rajahdys.Position = pelaaja1.Position;
223            rajahdys.Image = null;
224            rajahdys.Color = Color.ForestGreen;
225            Add(rajahdys);
226            pelaaja1.Destroy();
227            Timer.SingleShot(1.5, AloitaAlusta);
228        }
229        if (pelaaja1.Top == maali.Bottom)
230        {
231            TormaaMaaliin(pelaaja1, maali);
232        }
233        if (pelaaja1.Bottom == maali.Top)
234        {
235            TormaaMaaliin(pelaaja1, maali);
236        }
237        if (pelaaja1.Left == maali.Right)
238        {
239            TormaaMaaliin(pelaaja1, maali);
240        }
241        if (pelaaja1.Right == maali.Left)
242        {
243            TormaaMaaliin(pelaaja1, maali);
244        }
245
246    }
247    void TormaaMaaliin(PhysicsObject pelaaja1, PhysicsObject maali)
248    {
249        PlaySound("maali");
250        if (kenttanro == 3)
251        {
252            PeliOhi();
253        }
254        if (kenttanro < 3)
255        {
256            kenttanro++;
257            AloitaAlusta();
258
259        }
260
261
262    }
263    void PeliOhi()
264    {
265        ClearAll();
266        ValikkoTausta();
267        MultiSelectWindow voittoruutu = new MultiSelectWindow("Voitit pelin", "Alkuvalikkoon", "Poistu");
268        voittoruutu.AddItemHandler(0, delegate
269            {
270                alkuvalikkoOhi = false;
271                ClearAll();
272                Begin();
273            }
274        );
275        voittoruutu.AddItemHandler(1, Exit);
276        voittoruutu.SetButtonTextColor(Color.White);
277        voittoruutu.Shape = Shape.Hexagon;
278        voittoruutu.Color = Color.Azure;
279        Add(voittoruutu);
280    }
281    void Ammu(PlatformCharacter hahmo)
282    {
283        ammus = new PhysicsObject(15, 15, Shape.Circle);
284        ammus.X = pelaaja1.X + 50;
285        ammus.Y = pelaaja1.Y;
286        ammus.Color = Color.Azure;       
287        AddCollisionHandler(ammus, "taso", AmmusRajahtaa);
288        Add(ammus);
289
290        Vector vauhti = new Vector(800, 0);
291        ammus.Hit(vauhti);       
292    }
293    void AmmusRajahtaa(PhysicsObject ammus, PhysicsObject taso)
294    {
295
296        Explosion rajahdys = new Explosion(150);
297        rajahdys.Position = ammus.Position;
298        rajahdys.Color = Color.ForestGreen;
299        rajahdys.Image = null;
300        Add(rajahdys);
301        ammus.Destroy();
302
303    }
304    void LiikutaX(PlatformCharacter hahmo, double nopeus)
305    {
306        hahmo.Walk(nopeus);
307    }
308    void Hyppaa(PlatformCharacter hahmo, double nopeus)
309    {
310        if (pelaajanhypyt >= 0)
311        {
312            hahmo.ForceJump(nopeus);
313            pelaajanhypyt --;
314        }
315    }
316    void TuplaHyppy(PhysicsObject pelaaja, PhysicsObject taso)
317    {
318        pelaajanhypyt = 2;
319        return;
320
321    }
322    void AloitaAlusta()
323    {
324        ClearAll();
325        PelinAloitus();
326    }
327}
Note: See TracBrowser for help on using the repository browser.