source: 2014/26/KirmoN/kanapeli/kanapeli/kanapeli/kanapeli.cs @ 5135

Revision 5135, 11.3 KB checked in by kivijuno, 7 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 kanapeli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 500;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("pelaaja");
18    Image tahtiKuva = LoadImage("tahti");
19    Image betoniseina1kuva = LoadImage("betoniseina1");
20    Image metalliseina1kuva = LoadImage("metalliseina1");
21    Image metalliseina2kuva = LoadImage("metalliseina2");
22    Image ammuskuva = LoadImage("ammus");
23    Image hylsynkuva = LoadImage("hylsy");
24    Image taustakuva = LoadImage("taustakuva");
25    Image vihollisenkuva = LoadImage("vihollinen");
26    Image ketsuppiakuva = LoadImage("ketsuppia");
27    Image houhenkuva = LoadImage("houhen");
28
29    AssaultRifle pelaajan1Ase;
30
31    SoundEffect maaliAani = LoadSoundEffect("maali");
32
33    double lataus = 0;
34
35    static readonly SoundEffect minigunaani = LoadSoundEffect("minigunaani");
36
37    public override void Begin()
38    {
39        Gravity = new Vector(0, -1000);
40
41        LuoKentta();
42        LisaaNappaimet();
43
44        MediaPlayer.Play("taustamusiikki");
45
46        Camera.Follow(pelaaja1);
47        Camera.ZoomFactor = 4.0;
48        Camera.StayInLevel = false;
49
50        LuoAikaLaskuri();
51    }
52
53    void LuoKentta()
54    {
55        TileMap kentta = TileMap.FromLevelAsset("kentta1");
56        kentta.SetTileMethod('#', LisaaTaso);
57        kentta.SetTileMethod('*', LisaaTahti);
58        kentta.SetTileMethod('N', LisaaPelaaja);
59        kentta.SetTileMethod('@', Lisaabetoniseina1);
60        kentta.SetTileMethod('A', Lisaabetoniseina2);
61        kentta.SetTileMethod('&', Lisaametalliseina1);
62        kentta.SetTileMethod('T', Lisaametalliseina2);
63        kentta.SetTileMethod('V', LisaaVihollinen);
64        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
65        Level.Background.CreateGradient(Color.White, Color.Red);
66        //Level.Background.Image = taustakuva;
67        //Level.Background.TileToLevel();
68        //Level.Background.FitToLevel();
69        Level.Background.Color = Color.Black;
70        Level.AmbientLight = 0.6;
71    }
72
73    void LisaaTaso(Vector paikka, double leveys, double korkeus)
74    {
75        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
76        taso.Position = paikka;
77        taso.Color = Color.Green;
78        Add(taso);
79    }
80
81    void LisaaTahti(Vector paikka, double leveys, double korkeus)
82    {
83        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
84        tahti.IgnoresCollisionResponse = true;
85        tahti.Position = paikka;
86        tahti.Image = tahtiKuva;
87        tahti.Tag = "tahti";
88        Add(tahti);
89    }
90
91    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
92    {
93        pelaaja1 = new PlatformCharacter(leveys, korkeus);
94        pelaaja1.Position = paikka;
95        pelaaja1.Mass = 4.0;
96        pelaaja1.Image = pelaajanKuva;
97        pelaajan1Ase = new AssaultRifle(30, 10);
98        pelaajan1Ase.Ammo.Value = 3000;
99        pelaajan1Ase.ProjectileCollision = AmmusOsui;
100        pelaaja1.Add(pelaajan1Ase);
101        pelaajan1Ase.Y = 11;
102        pelaajan1Ase.IsVisible = false;
103        pelaajan1Ase.FireRate = 15.0;
104        pelaajan1Ase.AmmoIgnoresGravity = true;
105        pelaajan1Ase.CanHitOwner = true;
106        pelaajan1Ase.Power.DefaultValue = 200;
107        pelaajan1Ase.AttackSound = null;
108        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
109        pelaaja1.Restitution = 0;
110        pelaaja1.CollisionIgnoreGroup = 1;
111        Add(pelaaja1);
112    }
113
114    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
115    {
116        Vihollinen vihollinen1 = new Vihollinen(leveys, korkeus);
117        vihollinen1.Shape = Shape.Rectangle;
118        vihollinen1.Mass = 10.0;
119        Add(vihollinen1);
120        vihollinen1.Image = vihollisenkuva;
121        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
122        tasoAivot.Speed = 100;
123        vihollinen1.Tag = "jonnekana";
124
125        vihollinen1.Brain = tasoAivot;
126        vihollinen1.Position = paikka;
127
128        vihollinen1.ElamaLaskuri.LowerLimit += delegate {
129            vihollinen1.Destroy();
130            /*Explosion e = new Explosion(200);
131            e.Position = vihollinen1.Position;
132            e.Image = vihollisenkuva;
133            Add(e);
134            */
135            Explosion e2 = new Explosion(100);
136            e2.Position = vihollinen1.Position;
137            e2.Image = ketsuppiakuva;
138            e2.UseShockWave = false;
139            e2.Speed = 1000;
140            Add(e2);
141
142            int i = 0;
143            while (i < 20)
144            {
145                Heitahouhen(vihollinen1.Position);
146                i++;
147            }
148        };
149       
150    }
151
152    void HeitaHylsy()
153    {
154        PhysicsObject hylsy = new PhysicsObject(3.0, 1.0);
155        hylsy.IgnoresCollisionResponse = false;
156        pelaaja1.Throw(hylsy, Angle.FromDegrees(150 + RandomGen.NextDouble(-10, 10)), 250);
157        hylsy.IgnoresGravity = false;
158        hylsy.Image = hylsynkuva;
159        hylsy.CanRotate = true;
160        hylsy.MaximumLifetime = TimeSpan.FromSeconds(2.0);
161        hylsy.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * -20 + new Vector(0, -2);
162        hylsy.AbsoluteAngle = pelaaja1.FacingDirection.Angle;
163        hylsy.CollisionIgnoreGroup = 1;
164    }
165
166    void Heitahouhen(Vector paikka)
167    {
168        PhysicsObject houhen = new PhysicsObject(4.0, 12.0);
169        houhen.CollisionIgnoreGroup = 1;
170        houhen.MaximumLifetime = TimeSpan.FromSeconds(10.0);
171        houhen.Image = houhenkuva;
172        Add(houhen);
173        houhen.Hit(RandomGen.NextVector(150, 300));
174        houhen.Position = paikka;
175        houhen.Angle = RandomGen.NextAngle();
176    }
177
178    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
179    {
180        ammus.Destroy();
181        if (kohde.Tag == "jonnekana")
182        {
183            (kohde as Vihollinen).ElamaLaskuri.Value--;
184        }
185
186    }
187
188    void LopetaAmmu(AssaultRifle ase)
189    {
190        lataus = 0;
191    }
192
193    void AmmuAseella(AssaultRifle ase)
194    {
195        lataus += 0.05;
196
197        if (lataus > 2.0)
198        {
199            ase.AbsoluteAngle = pelaaja1.FacingDirection.Angle;
200            PhysicsObject ammus = ase.Shoot();
201            HeitaHylsy();
202
203            if (ammus != null)
204            {
205                ammus.Size *= 0.3;
206                ammus.Height = 1.5;
207                ammus.Image = ammuskuva;
208                ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
209            }
210        }
211
212       
213    }
214
215    void pysautaminigunaani()
216    {
217        minigunaani.Stop();
218    }
219
220    void soitaminigunaani()
221    {
222        minigunaani.Play();
223    }
224
225    void LuoAikaLaskuri()
226    {
227        Timer aikaLaskuri = new Timer();
228        aikaLaskuri.Start();
229
230        Label aikaNaytto = new Label();
231        aikaNaytto.TextColor = Color.DarkBlue;
232        aikaNaytto.DecimalPlaces = 1;
233        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
234        aikaNaytto.X = -900;
235        aikaNaytto.Y = 500;
236        Add(aikaNaytto);
237        double aikaaKulunut = aikaLaskuri.SecondCounter.Value;
238    }
239
240    IntMeter pisteLaskuri;
241
242    void LuoPistelaskuri()
243    {
244        pisteLaskuri = new IntMeter(0);
245
246        Label pisteNaytto = new Label();
247        pisteNaytto.X = Screen.Left + 100;
248        pisteNaytto.Y = Screen.Top - 100;
249        pisteNaytto.TextColor = Color.Black;
250        pisteNaytto.Color = Color.White;
251
252        pisteNaytto.BindTo(pisteLaskuri);
253        Add(pisteNaytto);
254        LuoPistelaskuri();
255
256        pisteNaytto.Title = "Pisteet";
257    }
258
259    void Lisaabetoniseina1(Vector paikka, double leveys, double korkeus)
260    {
261        PhysicsObject betoniseina1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
262        betoniseina1.IgnoresCollisionResponse = false;
263        betoniseina1.Position = paikka;
264        betoniseina1.Image = betoniseina1kuva;
265        betoniseina1.Tag = "betoniseina1";
266        Add(betoniseina1);
267    }
268
269    void Lisaabetoniseina2(Vector paikka, double leveys, double korkeus)
270    {
271        GameObject betoniseina2 = new GameObject(leveys, korkeus);
272        betoniseina2.Position = paikka;
273        betoniseina2.Image = betoniseina1kuva;
274        betoniseina2.Tag = "betoniseina2";
275        Add(betoniseina2);
276    }
277
278    void Lisaametalliseina1(Vector paikka, double leveys, double korkeus)
279    {
280        PhysicsObject metalliseina1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
281        metalliseina1.IgnoresCollisionResponse = false;
282        metalliseina1.Position = paikka;
283        metalliseina1.Image = metalliseina1kuva;
284        metalliseina1.Tag = "metalliseina1";
285        Add(metalliseina1);
286    }
287
288    void Lisaametalliseina2(Vector paikka, double leveys, double korkeus)
289    {
290        PhysicsObject metalliseina2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
291        metalliseina2.IgnoresCollisionResponse = true;
292        metalliseina2.Position = paikka;
293        metalliseina2.Image = metalliseina2kuva;
294        metalliseina2.Tag = "metalliseina2";
295        Add(metalliseina2);
296    }
297
298    void LisaaNappaimet()
299    {
300        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
301        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
302
303        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
304        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
305        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
306
307        Keyboard.Listen(Key.Space, ButtonState.Up, pysautaminigunaani, "aanipysahtyy");
308
309        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
310
311        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
312        Keyboard.Listen(Key.Space, ButtonState.Pressed, soitaminigunaani, "soitaminigunaani");
313        Keyboard.Listen(Key.Space, ButtonState.Released, LopetaAmmu, "Ammu", pelaajan1Ase);       
314
315        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
316        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
317        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
318
319        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
320    }
321
322    void Liikuta(PlatformCharacter hahmo, double nopeus)
323    {
324        hahmo.Walk(nopeus);
325    }
326
327    void Hyppaa(PlatformCharacter hahmo, double nopeus)
328    {
329        hahmo.ForceJump(nopeus);
330    }
331
332    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
333    {
334        maaliAani.Play();
335        MessageDisplay.Add("Keräsit tähden!");
336        tahti.Destroy();
337    }
338
339    class Vihollinen : PlatformCharacter
340    {
341        private IntMeter elamaLaskuri = new IntMeter(7, 0, 7);
342        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
343
344        public Vihollinen(double leveys, double korkeus)
345            : base(leveys, korkeus)
346        {
347           
348        }
349    }
350}
Note: See TracBrowser for help on using the repository browser.