source: 2016/27/JouniP/VenienteFragore/VenienteFragore/VenienteFragore/VenienteFragore.cs @ 7927

Revision 7927, 9.5 KB checked in by jotapoti, 5 years ago (diff)

oma rajahdyskuva lisatty

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class VenienteFragore : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("advena");
18    Image tahtiKuva = LoadImage("tahti");
19    Image ruohonKuva = LoadImage("ruohotekstuuri");
20    Image luolanKuva = LoadImage("luola");
21    Image ilkeanOmenanKuva = LoadImage("ilkeaomena");
22    Image miinanKuva = LoadImage("mine");
23
24    Animation minimiinii;
25
26    SoundEffect maaliAani = LoadSoundEffect("maali");
27    SoundEffect hyppyaani = LoadSoundEffect("Jump11");
28
29    Vector aloituspaikka = Vector.Zero;
30
31    IntMeter pistelaskuri;
32
33    int kentanNumero = 1;
34
35    public override void Begin()
36    {
37        // TODO vihun litistaminen
38
39        ClearAll();
40       
41        SmoothTextures = false;
42
43        minimiinii = LoadAnimation("minimiiniianim");
44
45        LuoAlkuvalikko();
46
47    }
48
49    void AloitaPeli()
50    {
51        Gravity = new Vector(0, -1000);
52        LuoKentta();
53        LisaaNappaimet();
54        LuoPistelaskuri();
55
56        Camera.Follow(pelaaja1);
57        Camera.ZoomFactor = 1.2;
58        Camera.StayInLevel = true;
59
60    }
61    void LuoAlkuvalikko()
62    {
63        Level.Background.Color = Color.Black;
64
65        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
66"Aloita peli", "Lopeta");
67        Add(alkuValikko);
68        alkuValikko.AddItemHandler(0, AloitaPeli);
69        alkuValikko.AddItemHandler(1, Exit);
70
71    }
72    void LuoKentta()
73    {
74        TileMap kentta = TileMap.FromLevelAsset("kentta" + kentanNumero);
75        kentta.SetTileMethod('#', LisaaTaso);
76        kentta.SetTileMethod('*', LisaaTahti);
77        kentta.SetTileMethod('N', LisaaPelaaja);
78        kentta.SetTileMethod('O', LisaaLuola);
79        kentta.SetTileMethod('z', LisaaIlkeaTyyppi);
80        kentta.SetTileMethod('_', LisaaMiina);
81        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
82        Level.CreateBorders();
83        Level.Background.CreateGradient(Color.Gray, Color.SkyBlue);
84    }
85
86    void LisaaMiina(Vector paikka, double leveys, double korkeus)
87    {
88        PhysicsObject miina = new PhysicsObject(0.8*leveys, korkeus/4);
89        miina.MakeStatic();
90        miina.Position = paikka + new Vector(0.0, -(3.0/8.0)*korkeus);
91        miina.Image = miinanKuva;
92        miina.Tag = "miina";
93        Add(miina);
94    }
95
96    void LisaaIlkeaTyyppi(Vector paikka, double leveys, double korkeus)
97    {
98        // TODO lisaa tekoaly talle ilkealle tyypille!
99        Vihu tyyppi = new Vihu(leveys, korkeus);
100        tyyppi.Position = paikka;
101        //tyyppi.Image = ilkeanOmenanKuva;
102        tyyppi.AnimWalk = minimiinii;
103       
104        tyyppi.Tag = "pahis";
105        Add(tyyppi);
106
107        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
108        tasoAivot.Speed = 100;
109        tasoAivot.FallsOffPlatforms = true;
110        tasoAivot.TriesToJump = true;
111        tyyppi.Brain = tasoAivot;
112       
113
114    }
115    void LisaaLuola(Vector paikka, double leveys, double korkeus)
116    {
117        PhysicsObject luola = new PhysicsObject(2*leveys, 2*korkeus);
118        luola.MakeStatic();
119        luola.IgnoresCollisionResponse = true;
120        //luola.Color = Color.Black;
121        luola.Position = paikka + new Vector(0.0, korkeus/2);
122        luola.Tag = "luola";
123        luola.Image = luolanKuva;
124
125        Add(luola);
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 = ruohonKuva;
134        Add(taso);
135    }
136
137    void LisaaTahti(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        tahti.IgnoresCollisionResponse = true;
141        tahti.Position = paikka;
142        tahti.Image = tahtiKuva;
143        tahti.Tag = "tahti";
144        Add(tahti);
145    }
146
147    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
148    {
149        pelaaja1 = new PlatformCharacter(leveys, korkeus);
150        pelaaja1.Position = paikka;
151        aloituspaikka = paikka;
152        pelaaja1.Mass = 4.0;
153        pelaaja1.Image = pelaajanKuva;
154        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
155        AddCollisionHandler(pelaaja1, "luola", TormaaLuolaan);
156        AddCollisionHandler(pelaaja1, "pahis", TormaaPahikseen);
157        AddCollisionHandler(pelaaja1, "miina", TormaaMiinaan);
158        //AddCollisionHandler(pelaaja1, "miina", CollisionHandler.ExplodeTarget(100, true));
159        Add(pelaaja1);
160    }
161
162    void LisaaNappaimet()
163    {
164        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
165        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
166
167        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
168        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
169        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
170        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "Aloita peli alusta");
171        Keyboard.Listen(Key.A, ButtonState.Pressed, MuutaKenttanumeroa, null, -1);
172        Keyboard.Listen(Key.S, ButtonState.Pressed, MuutaKenttanumeroa, null, 1);
173
174        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
175
176        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
177        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
178        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
179
180        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
181    }
182
183    void MuutaKenttanumeroa(int muutosmaara)
184    {
185        kentanNumero += muutosmaara;
186        if (kentanNumero < 1)
187        {
188            kentanNumero = 1;
189        }
190        if (kentanNumero > 2)
191        {
192            kentanNumero = 2;
193        }
194        ClearAll();
195        AloitaPeli();
196    }
197
198    void LuoPistelaskuri()
199    {
200        pistelaskuri = new IntMeter(0);
201
202        Label pisteNaytto = new Label();
203        pisteNaytto.X = Screen.Right - 100;
204        pisteNaytto.Y = Screen.Top - 100;
205        pisteNaytto.TextColor = Color.Black;
206        pisteNaytto.Color = Color.White;
207
208        pisteNaytto.BindTo(pistelaskuri);
209        Add(pisteNaytto);
210    }
211
212    void Liikuta(PlatformCharacter hahmo, double nopeus)
213    {
214        hahmo.Walk(nopeus);
215    }
216
217    void Hyppaa(PlatformCharacter hahmo, double nopeus)
218    {
219        hahmo.Jump(nopeus);
220        hyppyaani.Play(0.4, 0.0, 0.0);
221    }
222
223    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
224    {
225        pistelaskuri.Value++;
226        maaliAani.Play(0.4, 0.0, 0.0);
227        MessageDisplay.Add("Keräsit tähden!");
228        tahti.Destroy();
229    }
230
231    void TormaaLuolaan(PhysicsObject hahmo, PhysicsObject luola)
232    {
233        MuutaKenttanumeroa(1);
234
235        //MessageDisplay.Add("Menit luolaan!");
236    }
237
238    void TormaaPahikseen(PhysicsObject hahmo, PhysicsObject pahis)
239    {
240
241        // TODO parantele tarkistusta:
242        if (hahmo.Bottom == pahis.Top)
243        {
244            Vihu ilkea = pahis as Vihu;
245            ilkea.ElamaLaskuri.Value -= 1;
246            (hahmo as PlatformCharacter).Jump(nopeus);
247        }
248        else
249        {
250            // Vihollinen vahingoittaa pelaajaa:
251
252            //MessageWindow ikkuna = new MessageWindow("Osuit vihuun!");
253            //Add(ikkuna);
254            //hahmo.Destroy();
255
256            //ikkuna.Closed += delegate
257            //{
258            //    Begin();
259            //};
260        }
261    }
262
263    void TormaaMiinaan(PhysicsObject hahmo, PhysicsObject miina)
264    {
265        if (hahmo.Bottom == miina.Top)
266        {
267            //Explosion rajahdys = new Explosion(100);
268            //rajahdys.UseShockWave = false;
269            //rajahdys.Force = 10;
270            //rajahdys.Position = miina.Position;
271            //Add(rajahdys);
272            //rajahdys.AddShockwaveHandler(hahmo, PaineaaltoOsuu);
273
274            int pMaxMaara = 200;
275            // Alustetaan räjähdysjärjestelmä
276            // Parametrit:
277            // * kuva: mitä tekstuuria räjähdyksen
278            //   hiukkasten halutaan käyttävän
279            // * pMaxMaara: räjähdyksen käyttämien
280            //   hiukkasten eli partikkeleiden maksimimäärä
281            ExplosionSystem rajahdys =
282              new ExplosionSystem(LoadImage("tulipallo"), pMaxMaara);
283
284            // Lisätään järjestelmä peliin
285            Add(rajahdys);
286
287            double x = miina.X;
288            double y = miina.Y;
289            int pMaara = 100;
290            // "Käynnistetään" räjähdys
291            rajahdys.AddEffect(x, y, pMaara);
292
293
294
295
296            miina.Destroy();
297            hahmo.Destroy();
298        }
299    }
300
301   
302
303}
304
305class Vihu : PlatformCharacter
306{
307    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
308    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
309
310    public Vihu(double leveys, double korkeus)
311        : base(leveys, korkeus)
312    {
313        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
314    }
315}
Note: See TracBrowser for help on using the repository browser.