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

Revision 7925, 8.2 KB checked in by jotapoti, 5 years ago (diff)

Hypylle aaniefekti lisatty.
Miina 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        Add(miina);
93    }
94
95    void LisaaIlkeaTyyppi(Vector paikka, double leveys, double korkeus)
96    {
97        // TODO lisaa tekoaly talle ilkealle tyypille!
98        Vihu tyyppi = new Vihu(leveys, korkeus);
99        tyyppi.Position = paikka;
100        //tyyppi.Image = ilkeanOmenanKuva;
101        tyyppi.AnimWalk = minimiinii;
102       
103        tyyppi.Tag = "pahis";
104        Add(tyyppi);
105
106        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
107        tasoAivot.Speed = 100;
108        tasoAivot.FallsOffPlatforms = true;
109        tasoAivot.TriesToJump = true;
110        tyyppi.Brain = tasoAivot;
111       
112
113    }
114    void LisaaLuola(Vector paikka, double leveys, double korkeus)
115    {
116        PhysicsObject luola = new PhysicsObject(2*leveys, 2*korkeus);
117        luola.MakeStatic();
118        luola.IgnoresCollisionResponse = true;
119        //luola.Color = Color.Black;
120        luola.Position = paikka + new Vector(0.0, korkeus/2);
121        luola.Tag = "luola";
122        luola.Image = luolanKuva;
123
124        Add(luola);
125    }
126
127    void LisaaTaso(Vector paikka, double leveys, double korkeus)
128    {
129        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        taso.Position = paikka;
131        taso.Color = Color.Green;
132        taso.Image = ruohonKuva;
133        Add(taso);
134    }
135
136    void LisaaTahti(Vector paikka, double leveys, double korkeus)
137    {
138        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
139        tahti.IgnoresCollisionResponse = true;
140        tahti.Position = paikka;
141        tahti.Image = tahtiKuva;
142        tahti.Tag = "tahti";
143        Add(tahti);
144    }
145
146    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
147    {
148        pelaaja1 = new PlatformCharacter(leveys, korkeus);
149        pelaaja1.Position = paikka;
150        aloituspaikka = paikka;
151        pelaaja1.Mass = 4.0;
152        pelaaja1.Image = pelaajanKuva;
153        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
154        AddCollisionHandler(pelaaja1, "luola", TormaaLuolaan);
155        AddCollisionHandler(pelaaja1, "pahis", TormaaPahikseen);
156        Add(pelaaja1);
157       
158    }
159
160    void LisaaNappaimet()
161    {
162        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
163        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
164
165        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
166        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
167        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
168        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "Aloita peli alusta");
169        Keyboard.Listen(Key.A, ButtonState.Pressed, MuutaKenttanumeroa, null, -1);
170        Keyboard.Listen(Key.S, ButtonState.Pressed, MuutaKenttanumeroa, null, 1);
171
172        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
173
174        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
175        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
176        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
177
178        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
179    }
180
181    void MuutaKenttanumeroa(int muutosmaara)
182    {
183        kentanNumero += muutosmaara;
184        if (kentanNumero < 1)
185        {
186            kentanNumero = 1;
187        }
188        if (kentanNumero > 2)
189        {
190            kentanNumero = 2;
191        }
192        ClearAll();
193        AloitaPeli();
194    }
195
196    void LuoPistelaskuri()
197    {
198        pistelaskuri = new IntMeter(0);
199
200        Label pisteNaytto = new Label();
201        pisteNaytto.X = Screen.Right - 100;
202        pisteNaytto.Y = Screen.Top - 100;
203        pisteNaytto.TextColor = Color.Black;
204        pisteNaytto.Color = Color.White;
205
206        pisteNaytto.BindTo(pistelaskuri);
207        Add(pisteNaytto);
208    }
209
210    void Liikuta(PlatformCharacter hahmo, double nopeus)
211    {
212        hahmo.Walk(nopeus);
213    }
214
215    void Hyppaa(PlatformCharacter hahmo, double nopeus)
216    {
217        hahmo.Jump(nopeus);
218        hyppyaani.Play(0.4, 0.0, 0.0);
219    }
220
221    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
222    {
223        pistelaskuri.Value++;
224        maaliAani.Play(0.4, 0.0, 0.0);
225        MessageDisplay.Add("Keräsit tähden!");
226        tahti.Destroy();
227    }
228
229    void TormaaLuolaan(PhysicsObject hahmo, PhysicsObject luola)
230    {
231        MuutaKenttanumeroa(1);
232
233        //MessageDisplay.Add("Menit luolaan!");
234    }
235
236    void TormaaPahikseen(PhysicsObject hahmo, PhysicsObject pahis)
237    {
238
239        // TODO parantele tarkistusta:
240        if (hahmo.Bottom == pahis.Top)
241        {
242            Vihu ilkea = pahis as Vihu;
243            ilkea.ElamaLaskuri.Value -= 1;
244            (hahmo as PlatformCharacter).Jump(nopeus);
245        }
246        else
247        {
248            // Vihollinen vahingoittaa pelaajaa:
249
250            //MessageWindow ikkuna = new MessageWindow("Osuit vihuun!");
251            //Add(ikkuna);
252            //hahmo.Destroy();
253
254            //ikkuna.Closed += delegate
255            //{
256            //    Begin();
257            //};
258        }
259    }
260
261}
262
263class Vihu : PlatformCharacter
264{
265    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
266    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
267
268    public Vihu(double leveys, double korkeus)
269        : base(leveys, korkeus)
270    {
271        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
272    }
273}
Note: See TracBrowser for help on using the repository browser.