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

Revision 5112, 7.4 KB checked in by kivijuno, 7 years ago (diff)

Hyvää kanaa!

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
25    AssaultRifle pelaajan1Ase;
26
27    SoundEffect maaliAani = LoadSoundEffect("maali");
28
29    public override void Begin()
30    {
31        Gravity = new Vector(0, -1000);
32
33        LuoKentta();
34        LisaaNappaimet();
35
36        Camera.Follow(pelaaja1);
37        Camera.ZoomFactor = 4.0;
38        Camera.StayInLevel = false;
39    }
40
41    void LuoKentta()
42    {
43        TileMap kentta = TileMap.FromLevelAsset("kentta1");
44        kentta.SetTileMethod('#', LisaaTaso);
45        kentta.SetTileMethod('*', LisaaTahti);
46        kentta.SetTileMethod('N', LisaaPelaaja);
47        kentta.SetTileMethod('@', Lisaabetoniseina1);
48        kentta.SetTileMethod('&', Lisaametalliseina1);
49        kentta.SetTileMethod('£', Lisaametalliseina2);
50        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
51        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
52    }
53
54    void LisaaTaso(Vector paikka, double leveys, double korkeus)
55    {
56        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
57        taso.Position = paikka;
58        taso.Color = Color.Green;
59        Add(taso);
60    }
61
62    void LisaaTahti(Vector paikka, double leveys, double korkeus)
63    {
64        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
65        tahti.IgnoresCollisionResponse = true;
66        tahti.Position = paikka;
67        tahti.Image = tahtiKuva;
68        tahti.Tag = "tahti";
69        Add(tahti);
70    }
71
72    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
73    {
74        pelaaja1 = new PlatformCharacter(leveys, korkeus);
75        pelaaja1.Position = paikka;
76        pelaaja1.Mass = 4.0;
77        pelaaja1.Image = pelaajanKuva;
78        pelaajan1Ase = new AssaultRifle(30, 10);
79        pelaajan1Ase.Ammo.Value = 3000;
80        pelaajan1Ase.ProjectileCollision = AmmusOsui;
81        pelaaja1.Add(pelaajan1Ase);
82        pelaajan1Ase.Y = 11;
83        pelaajan1Ase.IsVisible = false;
84        pelaajan1Ase.FireRate = 15.0;
85        pelaajan1Ase.AmmoIgnoresGravity = true;
86        pelaajan1Ase.CanHitOwner = true;
87        pelaajan1Ase.Power.DefaultValue = 200; 
88        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
89        pelaaja1.Restitution = 0;
90        pelaaja1.CollisionIgnoreGroup = 1;
91        Add(pelaaja1);
92       }
93
94    void LisääVihollinen(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject vihollinen1 = new PhysicsObject(40, 20);
97        vihollinen1.Shape = Shape.Rectangle;
98        vihollinen1.Mass = 10.0;
99        Add(vihollinen1);
100    }
101
102    void HeitaHylsy()
103    {
104        PhysicsObject hylsy = new PhysicsObject(3.0, 1.0);
105        hylsy.IgnoresCollisionResponse = false;
106        pelaaja1.Throw(hylsy, Angle.FromDegrees(150 + RandomGen.NextDouble(-10, 10)), 250);
107        hylsy.IgnoresGravity = false;
108        hylsy.Image = hylsynkuva;
109        hylsy.CanRotate = true;
110        hylsy.MaximumLifetime = TimeSpan.FromSeconds(2.0);
111        hylsy.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * -20 + new Vector(0, -2);
112        hylsy.AbsoluteAngle = pelaaja1.FacingDirection.Angle;
113        hylsy.CollisionIgnoreGroup = 1;
114    }
115
116
117    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
118    {
119        //ammus.Destroy();
120    }
121
122
123    void AmmuAseella(AssaultRifle ase)
124    {
125        ase.AbsoluteAngle = pelaaja1.FacingDirection.Angle;
126        PhysicsObject ammus = ase.Shoot();
127        HeitaHylsy();
128
129        if (ammus != null)
130        {
131            ammus.Size *= 0.3;
132            ammus.Height = 1.5;
133            ammus.Image = ammuskuva;
134            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
135        }
136    }
137
138    void LuoAikaLaskuri()
139    {
140        Timer aikaLaskuri = new Timer();
141        aikaLaskuri.Start();
142
143        Label aikaNaytto = new Label();
144        aikaNaytto.TextColor = Color.White;
145        aikaNaytto.DecimalPlaces = 1;
146        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
147        Add(aikaNaytto);
148        double aikaaKulunut = aikaLaskuri.SecondCounter.Value;
149    }
150
151    void Lisaabetoniseina1(Vector paikka, double leveys, double korkeus)
152    {
153        PhysicsObject betoniseina1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
154        betoniseina1.IgnoresCollisionResponse = false;
155        betoniseina1.Position = paikka;
156        betoniseina1.Image = betoniseina1kuva;
157        betoniseina1.Tag = "betoniseina1";
158        Add(betoniseina1);
159    }
160
161    void Lisaametalliseina1(Vector paikka, double leveys, double korkeus)
162    {
163        PhysicsObject metalliseina1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
164        metalliseina1.IgnoresCollisionResponse = false;
165        metalliseina1.Position = paikka;
166        metalliseina1.Image = metalliseina1kuva;
167        metalliseina1.Tag = "metalliseina1";
168        Add(metalliseina1);
169    }
170
171    void Lisaametalliseina2(Vector paikka, double leveys, double korkeus)
172    {
173        PhysicsObject metalliseina2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
174        metalliseina2.IgnoresCollisionResponse = true;
175        metalliseina2.Position = paikka;
176        metalliseina2.Image = metalliseina2kuva;
177        metalliseina2.Tag = "metalliseina2";
178        Add(metalliseina2);
179    }
180
181    void LisaaNappaimet()
182    {
183        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
184        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
185
186        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
187        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
188        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
189
190        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
191
192        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
193
194        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
195        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
196        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
197
198        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
199    }
200
201    void Liikuta(PlatformCharacter hahmo, double nopeus)
202    {
203        hahmo.Walk(nopeus);
204    }
205
206    void Hyppaa(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.ForceJump(nopeus);
209    }
210
211    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
212    {
213        maaliAani.Play();
214        MessageDisplay.Add("Keräsit tähden!");
215        tahti.Destroy();
216    }
217}
Note: See TracBrowser for help on using the repository browser.