source: 2013/26/ArttuR/Pako/Pako/Pako/Pako.cs @ 4318

Revision 4318, 8.9 KB checked in by arosrinn, 6 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pako : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 800;
13    const int RUUDUN_KOKO = 40;
14
15    IntMeter kuolemaLaskuri = new IntMeter(0,0,9999999);
16
17    int kenttaNro = 1;
18
19    PlatformCharacter pelaaja1;
20    Vector aloitus;
21
22    Image pelaajanKuva = LoadImage("Pakopäähenkilö5");
23    Image morkoKuva = LoadImage("morko");
24    Image maaliKuva = LoadImage("maali2");
25    Image supermorkoKuva = LoadImage("supermorko");
26    Image lentomorkoKuva = LoadImage("lentomorko");
27    Image rajahdysKuva = LoadImage("rajahdys");
28    Image tasoKuva = LoadImage("taso");
29
30    SoundEffect maaliAani = LoadSoundEffect("maali");
31
32    List<Label> valikonKohdat;
33
34    public override void Begin()
35    {
36
37        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
38"Aloita peli", "Ohjeet" ,"Lopeta");
39        Add(alkuValikko);
40        //LuoKentta("kentta1");
41        alkuValikko.AddItemHandler(0, SeuraavaKentta);
42        alkuValikko.AddItemHandler(1, NaytaOhjeet);
43        alkuValikko.AddItemHandler(2, Exit);
44       
45    }
46
47
48    void NaytaOhjeet()
49    {
50        MessageWindow ikkuna = new MessageWindow("Ohjeet");
51        ikkuna.Closed += delegate { Begin(); };
52
53        Add(ikkuna);
54
55        Label tekstia = new Label("Pelaaja liikkuu nuolilla. Yritä olla osumatta mörköihin, vaikka ne näyttävätkin söpöiltä. Ja älä tipu laavaan. \n Jos osut hirviöihin tai laavaan, kuolet ja aloitat tason alusta. Paina F1 pelin aikana nähdäksesi tarkemmin pelin näppäimet");
56
57        ikkuna.Add(tekstia);
58
59       
60
61    }
62
63    void rajahdys(PhysicsObject olio)
64    {
65    /*
66       Explosion rajahdys = new Explosion(500);
67       rajahdys.UseShockWave = false;
68       rajahdys.Position = olio.Position;
69       rajahdys.Speed = 500;
70       Add(rajahdys);
71       rajahdys.Image = rajahdysKuva;
72     */
73
74        for (int i = 0; i < 75; i++)
75        {
76            PhysicsObject p = new PhysicsObject(50, 50);
77            p.Position = olio.Position;
78            p.Shape = Shape.Circle;
79            p.Color = Color.Lerp(Color.Cyan, Color.Transparent, 0.5);
80            p.Hit(RandomGen.NextVector(1000, 1000));
81            p.IgnoresCollisionResponse = true;
82            p.LifetimeLeft = TimeSpan.FromSeconds(0.5);
83            Add(p);
84        }
85    }
86
87
88    void LuoKentta(string kenttaTiedostonNimi)
89    {
90        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
91        kentta.SetTileMethod('#', LisaaTaso);
92        kentta.SetTileMethod('N', LisaaPelaaja);
93        kentta.SetTileMethod('K', LisaaMorko);
94        kentta.SetTileMethod('M', LisaaMaali);
95        kentta.SetTileMethod('L', LisaaLaava);
96        kentta.SetTileMethod('S', LisaaSuperMorko);
97        kentta.SetTileMethod('P', LisaaLentoMorko);
98        kentta.Optimize('L');
99        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
100        Level.CreateBorders();
101        Level.Background.CreateGradient(Color.Black, Color.Gray);
102        Gravity = new Vector(0, -1000);
103    }
104   
105    void LisaaLaava(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject laava = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        laava.Position = paikka;
109        laava.Color = Color.Red;
110        laava.Tag = "vihollinen";
111        Add(laava);
112    }
113
114    void LisaaMorko(Vector paikka, double leveys, double korkeus)
115    {
116        PlatformCharacter morko = new PlatformCharacter(leveys, korkeus);
117        morko.Position = paikka;
118        morko.Image = morkoKuva;
119        morko.Tag = "vihollinen";
120
121        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
122        tasoAivot.Speed = 125;
123
124        morko.Brain = tasoAivot;
125        Add(morko);
126    }
127
128    void LisaaSuperMorko(Vector paikka, double leveys, double korkeus)
129    {
130        PlatformCharacter supermorko = new PlatformCharacter(leveys, korkeus);
131        supermorko.Position = paikka;
132        supermorko.Image =  supermorkoKuva;
133        supermorko.Tag = "vihollinen";
134        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
135        tasoAivot.Speed = 250;
136
137        supermorko.Brain = tasoAivot;
138        Add(supermorko);
139    }
140
141   
142
143    void TormattiinLaavaan(PhysicsObject pelaaja1, PhysicsObject maali)
144    {
145        pelaaja1.Position = aloitus;
146    }
147
148    void SeuraavaKentta()
149    {
150        ClearAll();
151
152        if (kenttaNro == 1) LuoKentta("kentta1");
153        else if (kenttaNro == 2) LuoKentta("kentta2");
154        else if (kenttaNro == 3) LuoKentta("kentta3");
155        else if (kenttaNro == 4) LuoKentta("kentta4");
156        else {
157            kenttaNro = 1;
158            Begin();
159        }
160
161        LisaaNappaimet();
162
163        Label pisteNaytto = new Label();
164        pisteNaytto.X = Screen.Left + 100;
165        pisteNaytto.Y = Screen.Top - 100;
166        pisteNaytto.Title = "Kuolemat";
167        pisteNaytto.TextColor = Color.Black;
168        pisteNaytto.Color = Color.White;
169
170        pisteNaytto.BindTo(kuolemaLaskuri);
171        Add(pisteNaytto);
172
173        Camera.Follow(pelaaja1);
174        Camera.ZoomFactor = 1.2;
175        Camera.StayInLevel = true;
176    }
177
178    void LisaaTaso(Vector paikka, double leveys, double korkeus)
179    {
180        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
181        taso.Position = paikka;
182        taso.Image = tasoKuva;
183        taso.CollisionIgnoreGroup = 1;
184        Add(taso);
185    }
186
187
188   
189
190    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
191    {
192        pelaaja1 = new PlatformCharacter(leveys*0.5, korkeus*1);
193        pelaaja1.Position = paikka;
194        pelaaja1.Tag = "pelaaja";
195        aloitus = paikka;
196        pelaaja1.Mass = 4;
197        pelaaja1.Image = pelaajanKuva;
198        AddCollisionHandler(pelaaja1, "maali", TormattiinMaaliin);
199        AddCollisionHandler(pelaaja1, "vihollinen", TormattiinViholliseen);
200        Add(pelaaja1);
201    }
202
203    void LisaaLentoMorko(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject lentomorko = new PhysicsObject(leveys, korkeus);
206        lentomorko.Position = paikka;
207        lentomorko.Image = lentomorkoKuva;
208        lentomorko.Tag = "vihollinen";
209        lentomorko.IgnoresCollisionResponse = true;
210        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
211        seuraajanAivot.DistanceClose = 5;
212        seuraajanAivot.TargetClose += delegate{ TormattiinViholliseen(pelaaja1, lentomorko);};
213        seuraajanAivot.Speed = 100;
214        seuraajanAivot.Active = true;
215
216        lentomorko.Brain = seuraajanAivot;
217        Add(lentomorko);
218    }
219
220    void TormattiinViholliseen(PhysicsObject obj, PhysicsObject morko)
221    {
222        if (obj.IsDestroyed) return;
223
224        rajahdys(obj);
225        //obj.Position = aloitus;
226        kuolemaLaskuri.Value++;
227        obj.Destroy();
228        //obj.Velocity = Vector.Zero;
229
230        Timer.SingleShot(1.0, delegate
231        {
232            SeuraavaKentta();
233        });
234    }
235
236
237    void TormattiinMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
238    {
239        kenttaNro++;
240        SeuraavaKentta();
241    }
242
243
244    void LisaaMaali(Vector paikka, double leveys, double korkeus)
245    {
246       
247        PhysicsObject maali = new PhysicsObject(leveys, korkeus*2);
248        maali.Tag = "maali";
249        maali.Image = maaliKuva;
250        maali.MakeStatic();
251        Add(maali);
252        maali.Position = paikka + new Vector(0, korkeus/2);
253    }
254
255
256    void LisaaNappaimet()
257    {
258
259
260
261        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
262        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
263
264        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
265        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
266        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
267
268       
269    }
270
271    void Liikuta(PlatformCharacter hahmo, double nopeus)
272    {
273        hahmo.Walk(nopeus);
274    }
275
276    void Hyppaa(PlatformCharacter hahmo, double nopeus)
277    {
278        hahmo.Jump(nopeus);
279    }
280
281    void alkuVlikko()
282    {
283        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pako",
284        "Aloita peli", "Parhaat pisteet", "Lopeta");
285        //alkuValikko.AddItemHandler(0, );
286        //alkuValikko.AddItemHandler(1,);
287        alkuValikko.AddItemHandler(2, Exit);
288    }
289
290
291    void Valikko()
292    {
293        ClearAll();
294
295        valikonKohdat = new List<Label>();
296
297        Label kohta1 = new Label("Aloita uusi peli");
298        kohta1.Position = new Vector(0, 40);
299        valikonKohdat.Add(kohta1);
300
301        foreach (Label valikonKohta in valikonKohdat)
302        {
303            Add(valikonKohta);
304        }
305    }
306
307   
308   
309}
Note: See TracBrowser for help on using the repository browser.