source: 2011/26/OttoM/taistelu-jaska/taistelu-jaska/Peli.cs @ 2352

Revision 2352, 10.2 KB checked in by oteimatt, 10 years ago (diff)

Talletus.

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8
9{
10    IntMeter pisteLaskuri;
11
12    Animation vihuhahmo;
13
14    Animation vihuhahmo2;
15
16    const int vihollisenElamat = 2;
17
18    const double nopeus = 200;
19    const double hyppyVoima = 1000;
20
21    const int ruudunLeveys = 50;
22    const int ruudunKorkeus = 50;
23
24    bool jaskaLyo;
25    PlatformCharacter pelaaja1;
26    //PlatformCharacter miniführer;
27
28    Image[] jaskaKuvat = LoadImages("taistelu-jaska", "taistelu-jaska1");
29    Image[] jaskaKuvatPeilattu;
30
31    Image[] miniführerkuvatL = LoadImages("mini führerl1", "mini führerl2");
32    Image[] miniführerkuvatLpeilattu;
33    Image[] miniführerkuvat = LoadImages("mini führer juoksu 1", "mini führer juoksu 2");
34    Image[] miniführerkuvatpeilattu;
35    Image[] jaskaHyokkaa = LoadImages("taistelu-jaska tilanne 1 osa 2",
36            "taistelu-jaska tilanne 1 osa 3",
37            "taistelu-jaska tilanne 1 osa 4",
38            "taistelu-jaska tilanne 1 osa 5",
39            "taistelu-jaska tilanne 2 osa 1",
40            "taistelu-jaska tilanne 2 osa 2",
41            "taistelu-jaska tilanne 2 osa 3",
42            "taistelu-jaska tilanne 2 osa 4",
43            "taistelu-jaska tilanne 2 osa 5");
44    Image ristikuva = LoadImage("risti");
45    Image lippu = LoadImage("Nazi");
46    Image esittely = LoadImage("etusivu");
47    Image[] jaskaHyokkaaPeilattu;
48
49
50   public override void Begin()
51    {
52        //pelaaja1.FacingDirection == Direction.Left
53
54       
55
56        LataaKuvat();
57
58        Timer.SingleShot(5.0, aloitapeli);
59        Level.Background.Image = esittely;
60
61
62    }
63
64   private void aloitapeli()
65   {
66
67       luoKentta("POHJA.txt");
68       Level.Background.Image = lippu;
69
70
71
72       Level.Background.MovesWithCamera = false;
73   }
74
75    void LataaKuvat()
76    {
77        jaskaKuvatPeilattu = Image.Mirror(jaskaKuvat);
78        jaskaHyokkaaPeilattu = Image.Mirror(jaskaHyokkaa);
79        miniführerkuvatpeilattu = Image.Mirror(miniführerkuvat);
80        miniführerkuvatLpeilattu = Image.Mirror(miniführerkuvatL);
81
82    }
83   
84    void luoKentta(string kenttaTiedosto)
85    {
86        ClearAll();
87        TileMap ruudut = TileMap.FromFile(kenttaTiedosto);
88        ruudut.SetTileMethod('=', LuoSeina);
89        ruudut.SetTileMethod('T', LuoTaisteluJaska);
90        ruudut.SetTileMethod('V', luoMiniFührer);
91        ruudut.SetTileMethod('F', luoristi);
92        ruudut.Execute(ruudunLeveys, ruudunKorkeus);
93        Camera.Follow(pelaaja1);
94        Camera.ZoomFactor = 1.2;
95        Camera.StayInLevel = true;
96        lisaaNappaimet();
97        Gravity = new Vector(0, -1000);
98
99        LuoLaskuri();
100
101        Timer ajastin = new Timer();
102        ajastin.Interval = 10.0;
103        ajastin.Trigger += lisaaMiniFührerA;
104        ajastin.Start();
105
106        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
107    }
108
109    void LuoSeina(Vector paikka, double leveys, double korkeus)
110    {
111        PhysicsObject taso = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
112        taso.Color = Color.Black;
113        taso.Position = paikka;
114        Add (taso);
115    }
116
117    void luoristi(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject risti = PhysicsObject.CreateStaticObject(leveys*1, korkeus*2);
120        risti.Position = paikka;
121        risti.Image = ristikuva;
122        risti.Tag = "risti";
123        Add(risti);
124    }
125
126
127    void lisaaMiniFührerA(Timer ajastin)
128    {
129        Vector paikka;
130
131        if (RandomGen.NextInt(100) < 50)
132        {
133            paikka = new Vector(Level.Right - 100, -200);
134        }
135        else
136        {
137            paikka = new Vector(Level.Left + 100, -200);
138        }
139
140        luoMiniFührer(paikka, 128, 128);
141 
142    }
143
144
145    void luoMiniFührer(Vector paikka, double leveys, double korkeus)
146    {
147        PlatformCharacter miniführer = new PlatformCharacter(128, 128, Shape.Circle);
148        miniführer.Mass = 4.0;
149        miniführer.Color = Color.Black;
150        vihuhahmo = new Animation(miniführerkuvat);
151        vihuhahmo.FPS = 5.0;
152        miniführer.RightIdleAnimation = vihuhahmo;
153        miniführer.Position = paikka;
154
155        //miniführer.RightWalkingAnimation = new Animation(miniführerkuvat);
156
157        vihuhahmo2 = new Animation(miniführerkuvatpeilattu);
158        vihuhahmo2.FPS = 5.0;
159        miniführer.LeftIdleAnimation = vihuhahmo2;
160   
161        //miniführer.LeftWalkingAnimation = new Animation(miniführerkuvatpeilattu);
162
163        FollowerBrain seuraajanAivot = new FollowerBrain( pelaaja1 , 100.0 );
164        seuraajanAivot.Target = pelaaja1;
165        miniführer.Brain = seuraajanAivot;
166        miniführer.Tag = vihollisenElamat;
167       
168        Timer aikaLaskuri = new Timer();
169        aikaLaskuri.Interval = 0.5;
170        aikaLaskuri.Trigger += Viholliskavely;
171        aikaLaskuri.Tag = miniführer;
172        //Add(aikaLaskuri);
173        aikaLaskuri.Start();
174        Add(miniführer);
175     
176    }
177 
178    void Viholliskavely(Timer ajastin)
179    { 
180        PlatformCharacter vihollinen = ((PlatformCharacter)ajastin.Tag);
181
182        Vector etaisyys = new Vector(pelaaja1.X - vihollinen.X, pelaaja1.Y - vihollinen.Y);
183
184        if (etaisyys.X < 0 && etaisyys.Magnitude < 130)
185        {
186            vihollinenLyo(vihollinen, miniführerkuvatLpeilattu);
187        }
188        else if (etaisyys.X > 0 && etaisyys.Magnitude < 130)
189        {
190            vihollinenLyo(vihollinen, miniführerkuvatL);
191        }
192        else if (etaisyys.X > 0 && etaisyys.Magnitude > 100)
193        {
194            vihollinen.Animation = vihuhahmo;
195            //vihollinen.Animation.Start();
196        }
197        else if (etaisyys.X < 0 && etaisyys.Magnitude > 100)
198        {
199            vihollinen.Animation = vihuhahmo2;
200            //vihollinen.Animation.Start();
201        }
202    }
203
204    void vihollinenLyo(PlatformCharacter vihu, Image[] lyontiKuvat)
205    {
206        vihu.Animation = new Animation(lyontiKuvat);
207        vihu.Animation.Start(1);
208        vihu.Animation.FPS = 10.0;
209        pisteLaskuri.Value--;
210    }
211
212    void LuoTaisteluJaska(Vector paikka, double leveys, double korkeus)
213    {
214        pelaaja1 = new PlatformCharacter(128, 128, Shape.Circle);
215        jaskaLyo = false;
216        // Animaation asettaminen ei toimi jos pelaaja1 on alustettu näin
217         //pelaaja1 = new PlatformCharacter(128, 128, Shapes.Rectangle);
218
219        pelaaja1.Mass = 4.0;
220        pelaaja1.Color = Color.Black;
221        pelaaja1.Position = paikka;
222       
223        pelaaja1.RightIdleAnimation = new Animation(LoadImage("taistelu-jaska"));
224        pelaaja1.LeftIdleAnimation = new Animation(Image.Mirror(LoadImage("taistelu-jaska")));
225        pelaaja1.RightWalkingAnimation = new Animation(jaskaKuvat);
226        pelaaja1.RightWalkingAnimation.FPS = 5;       
227        pelaaja1.LeftWalkingAnimation = new Animation(jaskaKuvatPeilattu);
228        pelaaja1.LeftWalkingAnimation.FPS = 5;
229
230        AddCollisionHandler(pelaaja1, JaskaOsuuJohonkin);
231        Add(pelaaja1);
232    }
233
234
235    void lisaaPelaajat()
236    {
237        pelaaja1 = new PlatformCharacter(40, 40);
238        pelaaja1.Mass = 4.0;
239        pelaaja1.Image = LoadImage("norsu");
240        pelaaja1.X = 0;
241        pelaaja1.Y = Level.Bottom + 120;
242
243        Add(pelaaja1);
244    }
245
246    void lisaaNappaimet()
247    {
248        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
249        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
250
251        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
252        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
253        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
254        Keyboard.Listen(Key.Space, ButtonState.Pressed, lyo, "Lyö", pelaaja1, jaskaHyokkaaPeilattu, jaskaHyokkaa);
255
256        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
257
258        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
259        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
260        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
261    }
262
263    void lyo(PlatformCharacter hahmo, Image[] kuvatVasemmalle, Image[] kuvatOikealle)
264    {
265        if (hahmo.FacingDirection == Direction.Left)
266        {
267            hahmo.Animation = new Animation(kuvatVasemmalle);
268        }
269        if (hahmo.FacingDirection == Direction.Right)
270        {
271            hahmo.Animation = new Animation(kuvatOikealle);
272        }
273
274        hahmo.Animation.Start(1);
275
276        jaskaLyo = true;
277
278        Timer lyontiLoppuu = new Timer();
279        lyontiLoppuu.Interval = 0.3;
280        lyontiLoppuu.Trigger += JaskanLyontiLoppuu;
281        lyontiLoppuu.Start(1);
282    }
283
284    void LuoLaskuri()
285    {
286        pisteLaskuri = new IntMeter(100);
287
288        pisteLaskuri.LowerLimit += delegate { Begin(); };
289        Label pisteNaytto = new Label();
290        pisteNaytto.X = Screen.Left + 100;
291        pisteNaytto.Y = Screen.Top - 100;
292        pisteNaytto.TextColor = Color.Red;
293
294        pisteNaytto.BindTo(pisteLaskuri);
295        Add(pisteNaytto);
296    }
297
298
299    void JaskanLyontiLoppuu(Timer ajastin)
300    {
301        jaskaLyo = false;
302    }
303
304    void liikuta(PlatformCharacter hahmo, double nopeus)
305    {
306        hahmo.Walk(nopeus);
307    }
308
309    void hyppaa(PlatformCharacter hahmo, double voima)
310    {
311        hahmo.Jump(voima);
312
313    }
314
315    void JaskaOsuuJohonkin(PhysicsObject jaska, PhysicsObject kohde)
316    {
317        if (jaskaLyo)
318        {
319            if (kohde is PlatformCharacter)
320            {
321                int hipareita = (int)kohde.Tag;
322                hipareita--;
323                kohde.Tag = hipareita;
324                if (hipareita == 0)
325                    kohde.Destroy();
326            }
327        }
328        if (kohde.Tag.ToString() == "risti")
329        {
330            luoKentta("POHJA2.txt");
331            Level.Background.Image = lippu;
332        }
333       
334
335
336    }
337
338
339
340
341}
342
Note: See TracBrowser for help on using the repository browser.