source: 2010/30/oteimatt/taistelu-jaska/taistelu-jaska/Peli.cs @ 1469

Revision 1469, 8.4 KB checked in by oteimatt, 9 years ago (diff)

valmis

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8{
9    const int vihollisenElamat = 2;
10
11    const double nopeus = 200;
12    const double hyppyVoima = 4000;
13
14    const int ruudunLeveys = 50;
15    const int ruudunKorkeus = 50;
16
17    bool jaskaLyo;
18    PlatformCharacter pelaaja1;
19    //PlatformCharacter miniführer;
20
21    Image[] jaskaKuvat = LoadImages("taistelu-jaska", "taistelu-jaska1");
22    Image[] jaskaKuvatPeilattu;
23
24    Image[] miniführerkuvatL = LoadImages("mini führerl1", "mini führerl2");
25    Image[] miniführerkuvatLpeilattu;
26    Image[] miniführerkuvat = LoadImages( "mini führer juoksu 1", "mini führer juoksu 2");
27    Image[] miniführerkuvatpeilattu;
28    Image[] jaskaHyokkaa = LoadImages("taistelu-jaska tilanne 1 osa 2",
29            "taistelu-jaska tilanne 1 osa 3",
30            "taistelu-jaska tilanne 1 osa 4",
31            "taistelu-jaska tilanne 1 osa 5",
32            "taistelu-jaska tilanne 2 osa 1",
33            "taistelu-jaska tilanne 2 osa 2",
34            "taistelu-jaska tilanne 2 osa 3",
35            "taistelu-jaska tilanne 2 osa 4",
36            "taistelu-jaska tilanne 2 osa 5");
37
38    Image[] jaskaHyokkaaPeilattu;
39
40
41    protected override void Begin()
42    {
43        //pelaaja1.FacingDirection == Direction.Left
44
45        Gravity = new Vector(0, -1000);
46
47        LataaKuvat();
48
49        luoKentta();
50        lisaaNappaimet();
51
52        Timer ajastin = new Timer();
53        ajastin.Interval = 5.0;
54        ajastin.Trigger += lisaaMiniführer;
55        ajastin.Start();
56
57       
58
59        Camera.Follow(pelaaja1);
60        Camera.ZoomFactor = 1.2;
61        Camera.StayInLevel = true;
62    }
63
64    void LataaKuvat()
65    {
66        jaskaKuvatPeilattu = Image.Mirror(jaskaKuvat);
67        jaskaHyokkaaPeilattu = Image.Mirror(jaskaHyokkaa);
68        miniführerkuvatpeilattu = Image.Mirror(miniführerkuvat);
69        miniführerkuvatLpeilattu = Image.Mirror(miniführerkuvatL);
70
71    }
72   
73    void luoKentta()
74    {
75        TileMap ruudut = TileMap.FromFile("POHJA.txt");
76        ruudut['='] = LuoSeina;
77        ruudut['T'] = LuoTaisteluJaska;
78        ruudut['V'] = luoMiniFührer;
79        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
80
81        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
82    }
83
84    PhysicsObject LuoSeina()
85    {
86        PhysicsObject taso = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
87        taso.Color = Color.Black;
88        return taso;
89    }
90
91
92    void lisaaMiniführer(Timer ajastin)
93    {
94        PhysicsObject vihollinen = luoMiniFührer();
95        if (RandomGen.NextBool())
96        {
97            vihollinen.Position = new Vector(Level.Right - 100, -200);
98        }
99        else
100        {
101            vihollinen.Position = new Vector(Level.Left + 100, -200);
102        }
103        Add(vihollinen);
104    }
105
106
107    PhysicsObject luoMiniFührer()
108    {
109        PlatformCharacter miniführer = new PlatformCharacter(128, 128, Shapes.Circle);
110        miniführer.Mass = 4.0;
111        miniführer.Color = Color.Black;
112        miniführer.RightIdleAnimation = new Animation(miniführerkuvat);
113        //miniführer.RightWalkingAnimation = new Animation(miniführerkuvat);
114
115        miniführer.LeftIdleAnimation = new Animation(miniführerkuvatpeilattu);
116        //miniführer.LeftWalkingAnimation = new Animation(miniführerkuvatpeilattu);
117
118        FollowerBrain seuraajanAivot = new FollowerBrain();
119        seuraajanAivot.Target = pelaaja1;
120        miniführer.Brain = seuraajanAivot;
121        miniführer.Tag = vihollisenElamat;
122       
123        Timer aikaLaskuri = new Timer();
124        aikaLaskuri.Interval = 0.1;
125        aikaLaskuri.Trigger += Viholliskavely;
126        aikaLaskuri.Tag = miniführer;
127        //Add(aikaLaskuri);
128        aikaLaskuri.Start();
129        return (PhysicsObject)miniführer;
130    }
131 
132    void Viholliskavely(Timer ajastin)
133    { 
134        PlatformCharacter vihollinen = ((PlatformCharacter)ajastin.Tag);
135
136        Vector etaisyys = new Vector(pelaaja1.X - vihollinen.X, pelaaja1.Y - vihollinen.Y);
137
138        if (etaisyys.X < 0 && etaisyys.Magnitude < 150)
139        {
140            vihollinenLyo(vihollinen, miniführerkuvatLpeilattu);
141        }
142        else if (etaisyys.X > 0 && etaisyys.Magnitude < 150)
143        {
144            vihollinenLyo(vihollinen, miniführerkuvatL);
145        }
146        else if (etaisyys.X > 0 && etaisyys.Magnitude > 150)
147        {
148            vihollinen.Animation = new Animation(miniführerkuvat);
149            vihollinen.Animation.Start();
150        }
151        else if (etaisyys.X < 0 && etaisyys.Magnitude > 150)
152        {
153            vihollinen.Animation = new Animation(miniführerkuvatpeilattu);
154            vihollinen.Animation.Start();
155        }
156    }
157
158    void vihollinenLyo(PlatformCharacter vihu, Image[] lyontiKuvat)
159    {
160        vihu.Animation = new Animation(lyontiKuvat);
161        vihu.Animation.Start(1);
162    }
163
164    PhysicsObject LuoTaisteluJaska()
165    {
166        pelaaja1 = new PlatformCharacter(128, 128, Shapes.Circle);
167        jaskaLyo = false;
168        // Animaation asettaminen ei toimi jos pelaaja1 on alustettu näin
169         //pelaaja1 = new PlatformCharacter(128, 128, Shapes.Rectangle);
170
171        pelaaja1.Mass = 4.0;
172        pelaaja1.Color = Color.Black;
173       
174        pelaaja1.RightIdleAnimation = new Animation(LoadImage("taistelu-jaska"));
175        pelaaja1.LeftIdleAnimation = new Animation(Image.Mirror(LoadImage("taistelu-jaska")));
176        pelaaja1.RightWalkingAnimation = new Animation(jaskaKuvat);
177        pelaaja1.RightWalkingAnimation.FPS = 5;       
178        pelaaja1.LeftWalkingAnimation = new Animation(jaskaKuvatPeilattu);
179        pelaaja1.LeftWalkingAnimation.FPS = 5;
180
181        AddCollisionHandler(pelaaja1, JaskaOsuuJohonkin);
182
183        return (PhysicsObject)pelaaja1;
184    }
185
186
187    void lisaaPelaajat()
188    {
189        pelaaja1 = new PlatformCharacter(40, 40);
190        pelaaja1.Mass = 4.0;
191        pelaaja1.Image = LoadImage("norsu");
192        pelaaja1.X = 0;
193        pelaaja1.Y = Level.Bottom + 120;
194
195        Add(pelaaja1);
196    }
197
198    void lisaaNappaimet()
199    {
200        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
201        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
202
203        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
204        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
205        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
206        Keyboard.Listen(Key.Space, ButtonState.Pressed, lyo, "Lyö", pelaaja1, jaskaHyokkaaPeilattu, jaskaHyokkaa);
207
208        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
209
210        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
211        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
212        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
213    }
214
215    void lyo(PlatformCharacter hahmo, Image[] kuvatVasemmalle, Image[] kuvatOikealle)
216    {
217        if (hahmo.FacingDirection == Direction.Left)
218        {
219            hahmo.Animation = new Animation(kuvatVasemmalle);
220        }
221        if (hahmo.FacingDirection == Direction.Right)
222        {
223            hahmo.Animation = new Animation(kuvatOikealle);
224        }
225
226        hahmo.Animation.Start(1);
227
228        jaskaLyo = true;
229
230        Timer lyontiLoppuu = new Timer();
231        lyontiLoppuu.Interval = 0.3;
232        lyontiLoppuu.Trigger += JaskanLyontiLoppuu;
233        lyontiLoppuu.Start(1);
234    }
235
236    void JaskanLyontiLoppuu(Timer ajastin)
237    {
238        jaskaLyo = false;
239    }
240
241    void liikuta(PlatformCharacter hahmo, double nopeus)
242    {
243        hahmo.Walk(nopeus);
244    }
245
246    void hyppaa(PlatformCharacter hahmo, double voima)
247    {
248        hahmo.Jump(voima);
249    }
250
251    void JaskaOsuuJohonkin(PhysicsObject jaska, PhysicsObject kohde)
252    {
253        if (jaskaLyo)
254        {
255            if (kohde is PlatformCharacter)
256            {
257                int hipareita = (int)kohde.Tag;
258                hipareita--;
259                kohde.Tag = hipareita;
260                if (hipareita == 0)
261                    kohde.Destroy();
262            }
263        }
264    }
265}
Note: See TracBrowser for help on using the repository browser.