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

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