source: 2015/30/JuliaN/Hajottaa/Hajottaa/Hajottaa/Hajottaa.cs @ 7024

Revision 7024, 9.4 KB checked in by jupipana, 6 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
9/// <summary>
10/// Ophioneus
11/// </summary>
12
13public class Hajottaa : PhysicsGame
14{
15    const double nopeus = 600;
16    const double hyppyNopeus = 850;
17    const int RUUDUN_KOKO = 40;
18
19    Font fontti = LoadFont("SpriteFont1");
20
21    PlatformCharacter pelaaja1;
22    int kenttaNro = 1;
23
24    bool MaaliAktivoitu = false;
25    bool BossiMusiikki = false;
26
27    Image piikkiKuva = LoadImage("Piikki");
28    Image hiiruKuva = LoadImage("Hiirus");
29    Image hahmoKuva = LoadImage("Sneik");
30    Image tasoKuva = LoadImage("Maa");
31    Image taustaKuva = LoadImage("Tausta");
32    Image maaliKuva = LoadImage("Maalii");
33    Image bossKuva = LoadImage("Asshat");
34    Image ruohoKuva = LoadImage("Maapaal");
35    Image ammusKuva = LoadImage("Nuoli");
36    Image voittoKuva = LoadImage("Voiddo");
37
38    public override void Begin()
39    {
40        SmoothTextures = false;
41        MediaPlayer.Play("Chibi");
42        MediaPlayer.IsRepeating = true;
43        AloitaPeli();
44    }
45
46    void AloitaPeli()
47    {
48        ClearAll();
49        Gravity = new Vector(0, -1000);
50
51        LuoPistelaskuri();
52
53        if (kenttaNro == 1) LuoKentta("FinalKentta1");
54        else if (kenttaNro == 2) LuoKentta("FinalKentta2");
55        else if (kenttaNro == 3) LuoKentta("FinalKentta3");
56        else if (kenttaNro == 4) LuoKentta("FinalKentta4");
57        else if (kenttaNro == 5)
58        {
59            if (!BossiMusiikki)
60            {
61                MediaPlayer.Play("Bossi");
62                MediaPlayer.IsRepeating = true;
63                BossiMusiikki = true;
64            }
65            LuoKentta("FinalKentta5");
66        }
67        else if (kenttaNro > 5) VoittoRuutu();
68
69        LisaaNappaimet();
70
71        pisteLaskuri.MaxValue--;
72
73        Camera.Follow(pelaaja1);
74        Camera.ZoomFactor = 1.2;
75        Camera.StayInLevel = true;
76    }
77
78    void LuoKentta(string kenttaTiedostonNimi)
79    {
80        ColorTileMap kentta = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
81        kentta.SetTileMethod(Color.Black, LisaaTaso);
82        kentta.SetTileMethod(Color.FromHexCode("FF00DC"), LisaaHiiru);
83        kentta.SetTileMethod(Color.FromHexCode("FF0000"), LisaaRuoho);
84        kentta.SetTileMethod(Color.FromHexCode("4CFF00"), LisaaPelaaja);
85        kentta.SetTileMethod(Color.FromHexCode("FFD800"), LisaaPiikki);
86        kentta.SetTileMethod(Color.FromHexCode("0026FF"), LisaaMaali);
87        kentta.SetTileMethod(Color.FromHexCode("00FFFF"), LisaaBoss);
88
89        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
90        Level.CreateBorders();
91        Level.Background.Color = Color.Blue;
92        Level.Background.Image = taustaKuva;
93        Level.Background.TileToLevel();
94    }
95
96    void LoppuValikko()
97    {
98        MultiSelectWindow alkuValikko = new MultiSelectWindow("\n\n     Haluatko lopettaa pelin?     ", "Kyllä", "Ei");
99        alkuValikko.AddItemHandler(0, Exit);
100        alkuValikko.Font = fontti;
101        alkuValikko.Color = Color.DarkGreen;
102        alkuValikko.Shape = Shape.Octagon;
103        alkuValikko.SelectionColor = Color.DarkForestGreen;
104        Add(alkuValikko);
105    }
106
107    void VoittoRuutu()
108    {
109        ClearAll();
110        Camera.Reset();
111        Label taustaKuva = new Label(voittoKuva);
112        taustaKuva.Width = Screen.Height;
113        taustaKuva.Height = Screen.Height;
114        Add(taustaKuva);
115        Level.Background.Color = Color.Black;
116
117        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
118    }
119
120    void LisaaRuoho(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject ruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        ruoho.Position = paikka;
124        ruoho.Image = ruohoKuva;
125        Add(ruoho);
126    }
127
128    void LisaaTaso(Vector paikka, double leveys, double korkeus)
129    {
130        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
131        taso.Position = paikka;
132        taso.Color = Color.Green;
133        taso.Image = tasoKuva;
134        Add(taso);
135    }
136
137    void LisaaBoss(Vector paikka, double leveys, double korkeus)
138    {
139        PlatformCharacter boss = new PlatformCharacter(leveys, korkeus);
140        boss.Tag = "boss";
141        boss.Image = bossKuva;
142        boss.Position = paikka;
143        boss.Size *= 2;
144        boss.FacingDirection = Direction.Left;
145        Add(boss);
146        AddCollisionHandler(boss, pelaaja1, BossOsuu);
147
148        AssaultRifle vihollisenAse = new AssaultRifle(30, 10);
149        vihollisenAse.Ammo.Value = 10000;
150        vihollisenAse.ProjectileCollision = AmmusOsui;
151        boss.Weapon = vihollisenAse;
152
153        Timer ajastin = new Timer();
154        ajastin.Interval = 0.75;
155        ajastin.Timeout += delegate
156        {
157            if (!boss.IsDestroyed)
158            {
159                PhysicsObject ammus = boss.Weapon.Shoot();
160                if (ammus != null)
161                {
162                    ammus.Image = ammusKuva;
163                }
164            }
165        };
166
167        ajastin.Start();
168    }
169
170    void LisaaMaali(Vector paikka, double leveys, double korkeus)
171    {
172        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
173        maali.Tag = "maali";
174        maali.Image = maaliKuva;
175        maali.Position = paikka;
176        Add(maali);
177    }
178
179    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
180    {
181        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
182        piikki.Color = Color.Blue;
183        piikki.Tag = "piikki";
184        piikki.Image = piikkiKuva;
185        piikki.Position = paikka;
186        Add(piikki);
187    }
188
189    void LisaaHiiru(Vector paikka, double leveys, double korkeus)
190    {
191        PhysicsObject hiiru = PhysicsObject.CreateStaticObject(leveys, korkeus);
192        hiiru.IgnoresCollisionResponse = true;
193        hiiru.Position = paikka;
194        hiiru.Image = hiiruKuva;
195        hiiru.Tag = "hiiru";
196        hiiru.IgnoresCollisionResponse = true;
197        Add(hiiru);
198
199        pisteLaskuri.MaxValue++;
200    }
201
202    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
203    {
204        pelaaja1 = new PlatformCharacter(leveys, korkeus);
205        pelaaja1.Position = paikka;
206        pelaaja1.Image = hahmoKuva;
207        pelaaja1.Tag = "hahmo";
208
209        AddCollisionHandler(pelaaja1, "hiiru", TormaaHiiruun);
210        AddCollisionHandler(pelaaja1, "hiiru", CollisionHandler.PlaySound("Eating"));
211        AddCollisionHandler(pelaaja1, "piikki", PelaajaOsuu);
212        AddCollisionHandler(pelaaja1, "piikki", CollisionHandler.PlaySound("Hmm"));
213        AddCollisionHandler(pelaaja1, "ammus", PelaajaOsuu);
214        AddCollisionHandler(pelaaja1, "ammus", CollisionHandler.PlaySound("Hmm"));
215        AddCollisionHandler(pelaaja1, "maali", TormasiMaaliin);
216        AddCollisionHandler(pelaaja1, "maali", CollisionHandler.PlaySound("Maaliaani"));
217
218        Add(pelaaja1);
219    }
220
221    void Liikuta(PlatformCharacter hahmo, double nopeus)
222    {
223        hahmo.Walk(nopeus);
224    }
225
226    void Hyppaa(PlatformCharacter hahmo, double nopeus)
227    {
228        hahmo.Jump(nopeus);
229    }
230    void LisaaNappaimet()
231    {
232        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
233        Keyboard.Listen(Key.Escape, ButtonState.Pressed, LoppuValikko, "Lopeta peli");
234        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
235        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
236        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
237    }
238
239    void TormaaHiiruun(PhysicsObject hahmo, PhysicsObject hiiru)
240    {
241        MessageDisplay.Add("Söit hiirun!");
242        hiiru.Destroy();
243        pisteLaskuri.Value++;
244    }
245
246    void PelaajaOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
247    {
248        AloitaPeli();
249        MessageDisplay.Add("Sinusta tehtiin käsilaukku");
250    }
251
252    void BossOsuu(PhysicsObject boss, PhysicsObject pelaaja1)
253    {
254        boss.Destroy();
255        Explosion rajahdys = new Explosion(50);
256        rajahdys.Position = boss.Position;
257        MessageDisplay.Add("Tapoit bossin!");
258        Add(rajahdys);
259
260        kenttaNro++;
261        Timer.SingleShot(2.0, AloitaPeli);
262    }
263
264    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
265    {
266        if (!kohde.Tag.Equals("hiiru"))
267        {
268            ammus.Destroy();
269            Explosion rajahdys = new Explosion(10);
270            rajahdys.Position = ammus.Position;
271            Add(rajahdys);
272        }
273    }
274
275    void TormasiMaaliin(PhysicsObject pelaaja1, PhysicsObject maali)
276    {
277        if (MaaliAktivoitu)
278        {
279            MaaliAktivoitu = false;
280            kenttaNro++;
281            AloitaPeli();
282        }
283    }
284
285    IntMeter pisteLaskuri;
286
287    void LuoPistelaskuri()
288    {
289        pisteLaskuri = new IntMeter(0);
290        pisteLaskuri.MaxValue = 1;
291
292        pisteLaskuri.UpperLimit += delegate
293        {
294            MaaliAktivoitu = true;
295        };
296
297        Label pisteNaytto = new Label();
298        pisteNaytto.Font = fontti;
299        pisteNaytto.X = Screen.Right - 600;
300        pisteNaytto.Y = Screen.Top - 100;
301        pisteNaytto.TextColor = Color.White;
302        pisteNaytto.Title = "Hiiruja syöty";
303        pisteNaytto.BindTo(pisteLaskuri);
304        Add(pisteNaytto);
305    }
306}
307
Note: See TracBrowser for help on using the repository browser.