source: 2013/23/AkuL/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 4010

Revision 4010, 9.8 KB checked in by aklaason, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tasohyppelypeli1 : PhysicsGame
10{
11    const double nopeus = 100;
12    const double hyppyNopeus = 350;
13    const int RUUDUN_KOKO = 20;
14
15    PlatformCharacter pelaaja1;
16    Image VihollisenKuva = LoadImage("vihollinen");
17    Image pelaajanKuva = LoadImage("pelaaja1");
18    Image lahjaKuva = LoadImage("lahja");
19    Image teleportKuva = LoadImage("teleport");
20    IntMeter pisteLaskuri;
21    SoundEffect maaliAani = LoadSoundEffect("maali");
22
23    DoubleMeter elamaLaskuri;
24
25    AssaultRifle pelaajan1Ase;
26
27    //MediaPlayer.PlayFromFile("Xilent-Boss Wave (offical video).mp3");
28    int kenttaNro = 1;
29    //private Brain satunnaisAivot;
30
31    public override void Begin()
32    {
33        SeuraavaKentta();
34
35    }
36
37    void SeuraavaKentta()
38    {
39        ClearAll();
40
41        if (kenttaNro == 1) LuoKentta("kentta1");
42        else if (kenttaNro == 2) LuoKentta("kentta2");
43        else if (kenttaNro > 2) Exit();
44        Gravity = new Vector(0, -1000);
45        LuoElamaLaskuri();
46        LisaaNappaimet();
47
48        Camera.Follow(pelaaja1);
49        Camera.ZoomFactor = 4.8;
50        Camera.StayInLevel = true;
51    }
52    void TormasiTeleporttiin(PhysicsObject pelaaja, PhysicsObject teleport)
53    {
54        kenttaNro++;
55        SeuraavaKentta();
56     }
57    void TormasiMaali(PhysicsObject pelaaja, PhysicsObject maali)
58    {
59        Exit();
60    }
61
62    void LuoKentta(string kenttaTiedosto)
63    {
64
65        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedosto);
66        kentta.SetTileMethod('#', LisaaTaso);
67        kentta.SetTileMethod('L', LisaaLahja);
68        kentta.SetTileMethod('V', LisaaVihollinen);
69        kentta.SetTileMethod('N', LisaaPelaaja);
70        kentta.SetTileMethod('T', LisaaTeleport);
71        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
72        Level.CreateBorders();
73        Level.Background.CreateGradient(Color.White, Color.Gray);
74        LuoPistelaskuri();
75
76
77    }
78
79    void LisaaTaso(Vector paikka, double leveys, double korkeus)
80    {
81        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
82        taso.Position = paikka;
83        taso.Color = Color.Gray;
84        Add(taso);
85    }
86
87    void LisaaLahja(Vector paikka, double leveys, double korkeus)
88    {
89        PhysicsObject lahja = PhysicsObject.CreateStaticObject(leveys, korkeus);
90        lahja.IgnoresCollisionResponse = true;
91        lahja.Position = paikka;
92        lahja.Image = lahjaKuva;
93        lahja.Tag = "lahja";
94
95
96        Add(lahja);
97
98
99    }
100    void LisaaTeleport(Vector paikka, double leveys, double korkeus)
101    {
102
103        PhysicsObject teleport = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        teleport.IgnoresCollisionResponse = true;
105        teleport.Position = paikka;
106        teleport.Image = teleportKuva;
107        teleport.Tag = "teleport";
108        AddCollisionHandler(pelaaja1, teleport, TormasiTeleporttiin);
109        Add(teleport);
110    }
111
112    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
113    {
114        pelaaja1 = new PlatformCharacter(leveys, korkeus);
115        pelaaja1.Position = paikka;
116        pelaaja1.Mass = 2.0;
117        pelaaja1.Image = pelaajanKuva;
118        AddCollisionHandler(pelaaja1, "lahja", TormaaLahjaan);
119
120        pelaajan1Ase = new AssaultRifle(5, 5);
121        pelaajan1Ase.Ammo.Value = 100000;
122        pelaajan1Ase.ProjectileCollision = AmmusOsui;
123        AddCollisionHandler(pelaaja1, "vihu", tormaus);
124        pelaaja1.Weapon = pelaajan1Ase;
125        Mouse.IsCursorVisible = true;
126        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
127        pelaajan1Ase.FireRate = 2;
128        pelaajan1Ase.Angle += Angle.FromDegrees(0);
129
130        Add(pelaaja1);
131
132     }
133
134    void Tahtaa(AnalogState hiirenLiike)
135    {
136        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.Weapon.AbsolutePosition).Normalize();
137        pelaaja1.Weapon.Angle = suunta.Angle;
138    }
139
140    void LuoPistelaskuri()
141    {
142        pisteLaskuri = new IntMeter(0);
143        pisteLaskuri.Changed += pisteetKasvoi;
144        pisteLaskuri.AddTrigger(10, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 2.5; });
145        pisteLaskuri.AddTrigger(20, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 4; });
146        pisteLaskuri.AddTrigger(30, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 6; });
147        pisteLaskuri.AddTrigger(40, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 8; });
148        pisteLaskuri.AddTrigger(50, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 10; });
149        pisteLaskuri.AddTrigger(60, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 12; });
150        pisteLaskuri.AddTrigger(70, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 14; });
151        pisteLaskuri.AddTrigger(80, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 16; });
152        pisteLaskuri.AddTrigger(90, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 18; });
153        pisteLaskuri.AddTrigger(100, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 20; });
154        pisteLaskuri.AddTrigger(120, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 200; });
155        pisteLaskuri.AddTrigger(180, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 600; });
156        pisteLaskuri.AddTrigger(300, TriggerDirection.Up, delegate() { pelaaja1.Weapon.FireRate = 1000; });
157
158        Label pisteNaytto = new Label();
159        pisteNaytto.X = Screen.Left + 100;
160        pisteNaytto.Y = Screen.Top - 100;
161        pisteNaytto.TextColor = Color.Yellow;
162        pisteNaytto.Color = Color.Black;
163
164
165        pisteNaytto.BindTo(pisteLaskuri);
166        Add(pisteNaytto);
167
168    }
169
170    void pisteetKasvoi(int oldValue, int newValue)
171    {
172
173    }
174
175    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
176    {
177        if (kohde.Tag == "vihu")
178        {
179            Vihollinen vihu = (Vihollinen)kohde;
180            vihu.Elamat.Value += -5;
181            pisteLaskuri.Value += 1;
182        }
183        ammus.Destroy();
184    }
185
186    void AmmuAseella(PlatformCharacter pelaaja)
187    {
188        PhysicsObject ammus = pelaaja.Weapon.Shoot();
189
190        if (ammus != null)
191        {
192            ammus.Size *= 0.4;
193            ammus.Tag = "ammus";
194            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
195        }
196    }
197
198
199    void LisaaNappaimet()
200    {
201        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
202        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
203        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
204        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
205        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
206        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
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, hyppyNopeus);
213
214        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
215    }
216
217    void Liikuta(PlatformCharacter hahmo, double nopeus)
218    {
219        hahmo.Walk(nopeus);
220    }
221
222    void Hyppaa(PlatformCharacter hahmo, double nopeus)
223    {
224        hahmo.Jump(nopeus);
225    }
226
227    void TormaaLahjaan(PhysicsObject hahmo, PhysicsObject Lahja)
228    {
229        maaliAani.Play();
230        MessageDisplay.Add("löysit lahjan!");
231        pisteLaskuri.Value += 1;
232        Lahja.Destroy();
233    }
234
235    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
236    {
237        Vihollinen vihollinen = new Vihollinen(28, 28);
238
239        vihollinen.Position = paikka;
240        vihollinen.Mass = 20;
241        vihollinen.Image = VihollisenKuva;
242        vihollinen.Tag = "vihu";
243
244        RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
245        satunnaisAivot.ChangeMovementSeconds = 3;
246        satunnaisAivot.WanderRadius = 100;
247        satunnaisAivot.WanderPosition = new Vector(100, 100);
248        vihollinen.Brain = satunnaisAivot;
249
250
251        Add(vihollinen);
252
253
254    }
255
256    void LuoElamaLaskuri()
257    {
258        elamaLaskuri = new DoubleMeter(100, 0, 100);
259        elamaLaskuri.LowerLimit += ElamaLoppui;
260
261        ProgressBar elamaPalkki = new ProgressBar(150, 20);
262        elamaPalkki.X = Screen.Left + 150;
263        elamaPalkki.Y = Screen.Top - 20;
264        elamaPalkki.BindTo(elamaLaskuri);
265        Add(elamaPalkki);
266        //elamaPalkki.Angle = Angle.RightAngle;
267
268    }
269
270    void ElamaLoppui()
271    {
272        pelaaja1.Destroy();
273        MessageDisplay.Add("Kuolit, luuseri, nössö!");
274        MediaPlayer.Play("Saw theme song");
275        MessageWindow pro = new MessageWindow("Faiiil!!");
276        Explosion rajahdys = new Explosion(50);
277        rajahdys.Position = pelaaja1.Position;
278        rajahdys.Speed = 500.0;
279        rajahdys.Force = 100.5;
280
281
282        Add(rajahdys);
283    }
284
285    void tormaus(PhysicsObject tormaaja, PhysicsObject kohde)
286    {
287        elamaLaskuri.Value += -5;
288
289
290
291    }
292}
293
294public class Vihollinen : PhysicsObject
295{
296    DoubleMeter elamat;
297    public DoubleMeter Elamat { get { return elamat; } }
298    public Vihollinen(double leveys, double korkeus)
299        : base(leveys, korkeus)
300    {
301        elamat = new DoubleMeter(20, 0, 20);
302        elamat.LowerLimit += delegate { this.Destroy(); };
303    }
304}
Note: See TracBrowser for help on using the repository browser.