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

Revision 2247, 9.1 KB checked in by oteimatt, 8 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
45    Image[] jaskaHyokkaaPeilattu;
46
47
48   public override void Begin()
49    {
50        //pelaaja1.FacingDirection == Direction.Left
51
52        Gravity = new Vector(0, -1000);
53
54        LataaKuvat();
55
56        luoKentta();
57        lisaaNappaimet();
58
59        LuoLaskuri();
60
61        Timer ajastin = new Timer();
62        ajastin.Interval = 10.0;
63        ajastin.Trigger += lisaaMiniFührerA;
64        ajastin.Start();
65
66       
67
68        Camera.Follow(pelaaja1);
69        Camera.ZoomFactor = 1.2;
70        Camera.StayInLevel = true;
71    }
72
73    void LataaKuvat()
74    {
75        jaskaKuvatPeilattu = Image.Mirror(jaskaKuvat);
76        jaskaHyokkaaPeilattu = Image.Mirror(jaskaHyokkaa);
77        miniführerkuvatpeilattu = Image.Mirror(miniführerkuvat);
78        miniführerkuvatLpeilattu = Image.Mirror(miniführerkuvatL);
79
80    }
81   
82    void luoKentta()
83    {
84        TileMap ruudut = TileMap.FromFile("POHJA.txt");
85        ruudut['='] = LuoSeina;
86        ruudut['T'] = LuoTaisteluJaska;
87        ruudut['V'] = luoMiniFührer;
88        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
89
90        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
91    }
92
93    PhysicsObject LuoSeina()
94    {
95        PhysicsObject taso = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
96        taso.Color = Color.Black;
97        return taso;
98    }
99
100
101    void lisaaMiniFührerA(Timer ajastin)
102    {
103        PhysicsObject vihollinen = luoMiniFührer();
104        if (RandomGen.NextInt(100) < 50)
105        {
106            vihollinen.Position = new Vector(Level.Right - 100, -200);
107        }
108        else
109        {
110            vihollinen.Position = new Vector(Level.Left + 100, -200);
111        }
112        Add(vihollinen);
113    }
114
115
116    PhysicsObject luoMiniFührer()
117    {
118        PlatformCharacter miniführer = new PlatformCharacter(128, 128, Shape.Circle);
119        miniführer.Mass = 4.0;
120        miniführer.Color = Color.Black;
121        vihuhahmo = new Animation(miniführerkuvat);
122        vihuhahmo.FPS = 5.0;
123        miniführer.RightIdleAnimation = vihuhahmo;
124
125        //miniführer.RightWalkingAnimation = new Animation(miniführerkuvat);
126
127        vihuhahmo2 = new Animation(miniführerkuvatpeilattu);
128        vihuhahmo2.FPS = 5.0;
129        miniführer.LeftIdleAnimation = vihuhahmo2;
130   
131        //miniführer.LeftWalkingAnimation = new Animation(miniführerkuvatpeilattu);
132
133        FollowerBrain seuraajanAivot = new FollowerBrain( pelaaja1 , 100.0 );
134        seuraajanAivot.Target = pelaaja1;
135        miniführer.Brain = seuraajanAivot;
136        miniführer.Tag = vihollisenElamat;
137       
138        Timer aikaLaskuri = new Timer();
139        aikaLaskuri.Interval = 0.5;
140        aikaLaskuri.Trigger += Viholliskavely;
141        aikaLaskuri.Tag = miniführer;
142        //Add(aikaLaskuri);
143        aikaLaskuri.Start();
144        return (PhysicsObject)miniführer;
145    }
146 
147    void Viholliskavely(Timer ajastin)
148    { 
149        PlatformCharacter vihollinen = ((PlatformCharacter)ajastin.Tag);
150
151        Vector etaisyys = new Vector(pelaaja1.X - vihollinen.X, pelaaja1.Y - vihollinen.Y);
152
153        if (etaisyys.X < 0 && etaisyys.Magnitude < 130)
154        {
155            vihollinenLyo(vihollinen, miniführerkuvatLpeilattu);
156        }
157        else if (etaisyys.X > 0 && etaisyys.Magnitude < 130)
158        {
159            vihollinenLyo(vihollinen, miniführerkuvatL);
160        }
161        else if (etaisyys.X > 0 && etaisyys.Magnitude > 100)
162        {
163            vihollinen.Animation = vihuhahmo;
164            //vihollinen.Animation.Start();
165        }
166        else if (etaisyys.X < 0 && etaisyys.Magnitude > 100)
167        {
168            vihollinen.Animation = vihuhahmo2;
169            //vihollinen.Animation.Start();
170        }
171    }
172
173    void vihollinenLyo(PlatformCharacter vihu, Image[] lyontiKuvat)
174    {
175        vihu.Animation = new Animation(lyontiKuvat);
176        vihu.Animation.Start(1);
177        vihu.Animation.FPS = 10.0;
178        pisteLaskuri.Value--;
179    }
180
181    PhysicsObject LuoTaisteluJaska()
182    {
183        pelaaja1 = new PlatformCharacter(128, 128, Shape.Circle);
184        jaskaLyo = false;
185        // Animaation asettaminen ei toimi jos pelaaja1 on alustettu näin
186         //pelaaja1 = new PlatformCharacter(128, 128, Shapes.Rectangle);
187
188        pelaaja1.Mass = 4.0;
189        pelaaja1.Color = Color.Black;
190       
191        pelaaja1.RightIdleAnimation = new Animation(LoadImage("taistelu-jaska"));
192        pelaaja1.LeftIdleAnimation = new Animation(Image.Mirror(LoadImage("taistelu-jaska")));
193        pelaaja1.RightWalkingAnimation = new Animation(jaskaKuvat);
194        pelaaja1.RightWalkingAnimation.FPS = 5;       
195        pelaaja1.LeftWalkingAnimation = new Animation(jaskaKuvatPeilattu);
196        pelaaja1.LeftWalkingAnimation.FPS = 5;
197
198        AddCollisionHandler(pelaaja1, JaskaOsuuJohonkin);
199
200        return (PhysicsObject)pelaaja1;
201    }
202
203
204    void lisaaPelaajat()
205    {
206        pelaaja1 = new PlatformCharacter(40, 40);
207        pelaaja1.Mass = 4.0;
208        pelaaja1.Image = LoadImage("norsu");
209        pelaaja1.X = 0;
210        pelaaja1.Y = Level.Bottom + 120;
211
212        Add(pelaaja1);
213    }
214
215    void lisaaNappaimet()
216    {
217        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
218        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
219
220        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
221        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
222        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
223        Keyboard.Listen(Key.Space, ButtonState.Pressed, lyo, "Lyö", pelaaja1, jaskaHyokkaaPeilattu, jaskaHyokkaa);
224
225        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
226
227        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
228        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
229        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
230    }
231
232    void lyo(PlatformCharacter hahmo, Image[] kuvatVasemmalle, Image[] kuvatOikealle)
233    {
234        if (hahmo.FacingDirection == Direction.Left)
235        {
236            hahmo.Animation = new Animation(kuvatVasemmalle);
237        }
238        if (hahmo.FacingDirection == Direction.Right)
239        {
240            hahmo.Animation = new Animation(kuvatOikealle);
241        }
242
243        hahmo.Animation.Start(1);
244
245        jaskaLyo = true;
246
247        Timer lyontiLoppuu = new Timer();
248        lyontiLoppuu.Interval = 0.3;
249        lyontiLoppuu.Trigger += JaskanLyontiLoppuu;
250        lyontiLoppuu.Start(1);
251    }
252
253    void LuoLaskuri()
254    {
255        pisteLaskuri = new IntMeter(100);
256
257        pisteLaskuri.LowerLimit += delegate { Begin(); };
258        Label pisteNaytto = new Label();
259        pisteNaytto.X = Screen.Left + 100;
260        pisteNaytto.Y = Screen.Top - 100;
261        pisteNaytto.TextColor = Color.Red;
262
263        pisteNaytto.BindTo(pisteLaskuri);
264        Add(pisteNaytto);
265    }
266
267
268    void JaskanLyontiLoppuu(Timer ajastin)
269    {
270        jaskaLyo = false;
271    }
272
273    void liikuta(PlatformCharacter hahmo, double nopeus)
274    {
275        hahmo.Walk(nopeus);
276    }
277
278    void hyppaa(PlatformCharacter hahmo, double voima)
279    {
280        hahmo.Jump(voima);
281
282    }
283
284    void JaskaOsuuJohonkin(PhysicsObject jaska, PhysicsObject kohde)
285    {
286        if (jaskaLyo)
287        {
288            if (kohde is PlatformCharacter)
289            {
290                int hipareita = (int)kohde.Tag;
291                hipareita--;
292                kohde.Tag = hipareita;
293                if (hipareita == 0)
294                    kohde.Destroy();
295            }
296        }
297    }
298}
Note: See TracBrowser for help on using the repository browser.