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

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