source: 2014/26/OttoK/Jump/Jump/Jump/Jump.cs @ 5139

Revision 5139, 9.9 KB checked in by otoskinn, 9 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
9class Norsu : PlatformCharacter
10{
11    private IntMeter pisteLaskuri = new IntMeter(0);
12    public IntMeter PisteLaskuri { get { return pisteLaskuri; } }
13
14    private IntMeter kranaattiLaskuri = new IntMeter(1000, 0, 1000);
15    public IntMeter KranaattiLaskuri { get { return kranaattiLaskuri; } }
16
17    private IntMeter nopeus = new IntMeter(200);
18    public IntMeter Nopeus { get { return nopeus; } }
19
20    public bool onkoautossa = false;
21
22    public Norsu(double leveys, double korkeus)
23        : base(leveys, korkeus)
24    {
25        Weapon = new AssaultRifle(40, 20);
26        Weapon.Ammo.Value = 10000;
27        Weapon.InfiniteAmmo = true;
28        Tag = "norsu";
29    }
30}
31
32
33public class Jump : PhysicsGame
34{
35    const double nopeus = 200;
36    const double hyppyNopeus = 750;
37    const int RUUDUN_KOKO = 40;
38
39    Norsu pelaaja1;
40    Norsu pelaaja2;
41
42    //IntMeter pisteLaskuri1;
43    //IntMeter pisteLaskuri2;
44
45    Image pelaajanKuva = LoadImage("norsu");
46    Image tahtiKuva = LoadImage("tahti");
47    Image autonKuva = LoadImage("auto");
48
49    SoundEffect maaliAani = LoadSoundEffect("maali");
50
51    public override void Begin()
52    {
53        Gravity = new Vector(0, -1000);
54
55        LuoKentta();
56        LisaaNappaimet();
57        LuoPistelaskuri(pelaaja1);
58        LuoPistelaskuri(pelaaja2);
59
60
61        Camera.Follow(pelaaja1, pelaaja2);
62        //Camera.ZoomFactor = 1.2;
63        //Camera.StayInLevel = true;
64    }
65
66    void LuoAseValikko(Norsu pelaaja)
67    {
68        MultiSelectWindow alkuValikko = new MultiSelectWindow("valitse ase", "Assault Rifle", "Kranaatit");
69        Add(alkuValikko);
70    }
71
72    void LuoKentta()
73    {
74        TileMap kentta = TileMap.FromLevelAsset("kentta1");
75        kentta.SetTileMethod('#', LisaaTaso);
76        kentta.SetTileMethod('*', LisaaTahti);
77        kentta.SetTileMethod('N', LisaaPelaaja);
78        kentta.SetTileMethod('C', LisaaPelaaja2);
79        kentta.SetTileMethod('F', LuoAuto);
80        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
81        Level.CreateBorders();
82        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
83    }
84
85    void LisaaTaso(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
88        taso.Position = paikka;
89        taso.Color = Color.Green;
90        Add(taso);
91    }
92
93    void LisaaTahti(Vector paikka, double leveys, double korkeus)
94    {
95        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
96        tahti.IgnoresCollisionResponse = true;
97        tahti.Position = paikka;
98        tahti.Image = tahtiKuva;
99        tahti.Tag = "tahti";
100        Add(tahti);
101    }
102
103    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
104    {
105        pelaaja1 = new Norsu(leveys, korkeus);
106        pelaaja1.Position = paikka;
107        pelaaja1.Mass = 4.0;
108        pelaaja1.Image = pelaajanKuva;
109        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
110        Add(pelaaja1);
111        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
112
113    }
114
115    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
116    {
117        pelaaja2 = new Norsu(leveys, korkeus);
118        pelaaja2.Position = paikka;
119        pelaaja2.Mass = 4.0;
120        pelaaja2.Image = pelaajanKuva;
121        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
122        Add(pelaaja2);
123        pelaaja2.Weapon.ProjectileCollision = AmmusOsui;
124
125    }
126
127    void LisaaNappaimet()
128    {
129        Keyboard.Listen(Key.Tab, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
130        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
131
132        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
133        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
134        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
135        Keyboard.Listen(Key.NumPad2, ButtonState.Pressed , HeitaKranaatti, "Heitä Kranaatti", pelaaja1);
136        Keyboard.Listen(Key.NumPad1, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
137        Keyboard.Listen(Key.NumPad3, ButtonState.Pressed, OtaAuto, "Nouse auton kyytiin", pelaaja1);
138
139        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -1.0);
140        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, 1.0);
141        Keyboard.Listen(Key.W,ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
142        Keyboard.Listen(Key.F, ButtonState.Pressed, HeitaKranaatti, "Heitä Kranaatti", pelaaja2);
143        Keyboard.Listen(Key.G, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
144        Keyboard.Listen(Key.H, ButtonState.Pressed, OtaAuto, "Nouse auton kyytiin", pelaaja2);
145
146        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
147
148        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
149        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
150        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
151
152        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
153   
154    }
155
156    void UlosAuto(Norsu pelaaja)
157    {
158        pelaaja.Image = pelaajanKuva;
159        pelaaja.Width = RUUDUN_KOKO;
160        pelaaja.Height = RUUDUN_KOKO;
161        pelaaja.Mass = 4.0;
162        pelaaja.Nopeus.Value = 200;
163        pelaaja.onkoautossa = false;
164    }
165
166    void OtaAuto(Norsu pelaaja)
167    {
168        if (pelaaja.onkoautossa)
169        {
170            UlosAuto(pelaaja);
171            LuoAuto(pelaaja.Position, RUUDUN_KOKO, RUUDUN_KOKO);
172        }
173        else
174        {
175            foreach (PhysicsObject auto in GetObjectsWithTag("Auto"))
176            {
177                if (Vector.Distance(auto.Position, pelaaja.Position) < 100)
178                {
179                    pelaaja.Image = auto.Image;
180                    pelaaja.Width = auto.Width;
181                    pelaaja.Height = auto.Height;
182                    pelaaja.Position = auto.Position;
183                    //pelaaja.Mass = auto.Mass;
184                    pelaaja.Nopeus.Value = 600;
185                    pelaaja.onkoautossa = true;
186                    auto.Destroy();
187                    return;
188                }
189            }
190        }
191    }
192
193    void HeitaKranaatti(Norsu pelaaja)
194    {
195        if (pelaaja.KranaattiLaskuri.Value > 0)
196        {
197            Grenade kranu = new Grenade(4.0);
198            pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
199            pelaaja.KranaattiLaskuri.Value--;
200           // kranu.Mass = 1000.0;
201            kranu.Explosion.AddShockwaveHandler("Auto", KranaattiOsui);
202            kranu.Explosion.AddShockwaveHandler("norsu", KranaattiOsui);
203
204        }
205    }
206
207    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
208    {
209        if (rajahdyksenKohde.Tag == "norsu")
210        {
211            UlosAuto(rajahdyksenKohde as Norsu);
212        }
213        else
214        {
215            rajahdyksenKohde.Destroy();
216        }
217
218        Explosion rajahdys = new Explosion(500);
219        rajahdys.Position = rajahdyksenKohde.Position;
220        Add(rajahdys);
221    }
222
223    void AmmuAseella(Norsu pelaaja)
224    {
225        PhysicsObject ammus = pelaaja.Weapon.Shoot();
226     
227        if (ammus != null)
228   
229        {
230            ammus.Mass = 10;
231            //ammus.Size *=
232            //ammus.Image = ...
233            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
234        }
235    }
236
237    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
238    {
239        ammus.Destroy();
240
241    }
242
243
244    void Liikuta(Norsu hahmo, double suunta)
245    {
246        hahmo.Walk(hahmo.Nopeus.Value * suunta);
247    }
248
249    void Hyppaa(Norsu hahmo, double nopeus)
250    {
251        if (!hahmo.onkoautossa)
252        {
253            hahmo.Jump(nopeus);
254        }
255    }
256
257    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
258    {
259        maaliAani.Play();
260        MessageDisplay.Add("Keräsit tähden!");
261        tahti.Destroy();
262
263        if (hahmo == pelaaja1)
264        {
265            pelaaja1.PisteLaskuri.Value += 1;
266        }
267        else
268        {
269            pelaaja2.PisteLaskuri.Value += 1;
270        }
271    }
272
273    void LuoPistelaskuri(Norsu pelaaja)
274    {
275        Label pisteNaytto = new Label();
276        pisteNaytto.TextColor = Color.Black;
277        pisteNaytto.Color = Color.White;
278        Add(pisteNaytto);
279        pisteNaytto.BindTo(pelaaja.PisteLaskuri);
280
281        Label kranaattiNaytto = new Label();
282        kranaattiNaytto.TextColor = Color.Black;
283        kranaattiNaytto.Color = Color.Green;
284        Add(kranaattiNaytto);
285        kranaattiNaytto.BindTo(pelaaja.KranaattiLaskuri);
286
287        Timer ajastin = new Timer();
288        ajastin.Interval = 0.01;
289        ajastin.Timeout += delegate
290        {
291            pisteNaytto.Position = Camera.WorldToScreen(pelaaja.Position) + new Vector(0, 40);
292            kranaattiNaytto.Position = Camera.WorldToScreen(pelaaja.Position) + new Vector(0, 65);
293        };
294        ajastin.Start(); 
295       
296    }
297
298    void LuoAuto(Vector paikka, double leveys, double korkeus)
299    {
300        PhysicsObject Auto = new PhysicsObject(leveys*4, korkeus*2);
301        //PhysicsObject Auto = PhysicsObject.CreateStaticObject(leveys * 4, korkeus * 2);
302        //Auto.Shape = Shape.FromImage(autonKuva);
303        Auto.Position = paikka;
304        Auto.Color = Color.Green;
305        Auto.Tag = "Auto";
306        Auto.Mass = 1000;
307        Auto.LinearDamping = 0.7;
308        Auto.AngularDamping = 0.5;
309        Auto.Image = autonKuva;
310        Add(Auto);
311    }
312
313
314}
Note: See TracBrowser for help on using the repository browser.