source: 2015/26/AkseliP/ekapeli2/ekapeli2/ekapeli2/ekapeli2.cs @ 6264

Revision 6264, 8.3 KB checked in by akpaloka, 5 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 Pelaaja : PlatformCharacter
10{
11    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Pelaaja(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19}
20
21
22public class ekapeli2 : PhysicsGame
23{
24    const double nopeus = 200;
25    const double hyppyNopeus = 750;
26    const int RUUDUN_KOKO = 40;
27    const double maxZoom = 3.0;
28
29    Pelaaja pelaaja1;
30    Pelaaja pelaaja2;
31    Image elämäkuva = LoadImage("elämät");
32    Image elämäkuva2 = LoadImage("elämät2");
33    Image pelaajanKuva = LoadImage("hahmo");
34    Image tahtiKuva = LoadImage("tahti");
35    Image maakuva = LoadImage("ruoho");
36    Image multakuva = LoadImage("multa");
37    Image asekuva = LoadImage("ak47");
38    Image puukuva = LoadImage("puu");
39    private Image[] ukkelinKavely = LoadImages("hahmo", "hahmo2", "hahmo3");
40
41
42    Image[] kolikkokuvat = LoadImages("coin1", "coin2", "coin3", "coin4", "coin4", "coin5", "coin6", "coin7", "coin8", "coin9", "coin10");
43
44    SoundEffect maaliAani = LoadSoundEffect("maali");
45
46    public override void Begin()
47    {
48        Gravity = new Vector(0, -1000);
49
50        LuoKentta();
51        LisaaNappaimet();
52
53        //Camera.Follow(pelaaja1, pelaaja2);
54        //Camera.FollowXMargin = 100;
55        //Camera.FollowYMargin = 100;
56
57        Camera.StayInLevel = true;
58
59        IsMouseVisible = true;
60    }
61
62    void LuoKentta()
63    {
64        TileMap kentta = TileMap.FromLevelAsset("kentta1");
65        kentta.SetTileMethod('#', LisaaTaso);
66        kentta.SetTileMethod('*', LisaaTahti);
67        kentta.SetTileMethod('N', LisaaPelaaja1);
68        kentta.SetTileMethod('o', LisaaPelaaja2);
69        kentta.SetTileMethod('m', LisaaMulta);
70        kentta.SetTileMethod('p', LisaaPuu);
71        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
72        Level.CreateBorders();
73        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
74    }
75
76    void LisaaTaso(Vector paikka, double leveys, double korkeus)
77    {
78        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
79        taso.Position = paikka;
80        //taso.Color = Color.Blue;
81        taso.Image = maakuva;
82        Add(taso);
83    }
84
85    void LisaaTahti(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys * 0.5, korkeus * 0.5);
88        tahti.IgnoresCollisionResponse = true;
89        tahti.Position = paikka;
90        tahti.Animation = new Animation(kolikkokuvat);
91        tahti.Animation.FPS = 15;
92        tahti.Animation.Start();
93        tahti.Tag = "tahti";
94        Add(tahti);
95    }
96
97    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus)
98    {
99        Pelaaja pelaaja = new Pelaaja(leveys * 0.6, korkeus * 1.5);
100        pelaaja.Position = paikka;
101        pelaaja.Tag = "pelaaja";
102        pelaaja.Mass = 4.0;
103        pelaaja.Image = pelaajanKuva;
104        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
105        Add(pelaaja);
106        pelaaja.CanMoveOnAir = true
107   
108
109        pelaaja.Animation = new Animation(ukkelinKavely);
110        pelaaja.AnimWalk = new Animation(ukkelinKavely);
111        //pelaaja1 on PlatformCharacter-tyyppinen
112        //pelaaja1.Animation.Start();
113        pelaaja.AnimIdle = pelaajanKuva;
114        pelaaja.Animation.FPS = 1;
115
116        pelaaja.Weapon = new AssaultRifle(30, 30);
117        pelaaja.Weapon.Image = asekuva;
118        pelaaja.Weapon.X = 5;
119        pelaaja.Weapon.Y = -4;
120        pelaaja.Weapon.Ammo.Value = 1000;
121        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
122
123        ProgressBar elamaPalkki = new ProgressBar(45, 15);
124        elamaPalkki.Y = 50;
125        elamaPalkki.BarImage = elämäkuva;
126        elamaPalkki.Image = elämäkuva2;
127        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
128        pelaaja.Add(elamaPalkki);
129
130        pelaaja.Destroyed += delegate
131        {
132            Explosion räjähdys = new Explosion(100);
133            räjähdys.Position = pelaaja.Position;
134            Add(räjähdys);
135        };
136
137        return pelaaja;
138    }
139
140    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
141    {
142        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus);
143    }
144
145    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
146    {
147        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus);
148    }
149
150    void LisaaNappaimet()
151    {
152        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
153        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
154        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja1);
155        Mouse.ListenMovement(0.0, tähtääaseella1, "");
156
157        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
158        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
159        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
160
161        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
162
163        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
164        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
165        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
166        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja2);
167        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, tähtääaseella2, "");
168
169        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
170    }
171
172    void Liikuta(PlatformCharacter hahmo, double nopeus)
173    {
174        hahmo.Walk(nopeus);
175    }
176
177    void Hyppaa(PlatformCharacter hahmo, double nopeus)
178    {
179        hahmo.Jump(nopeus);
180    }
181
182    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
183    {
184        maaliAani.Play();
185        MessageDisplay.Add("Keräsit tähden!");
186        tahti.Destroy();
187    }
188
189    void LisaaMulta(Vector paikka, double leveys, double korkeus)
190    {
191
192        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
193        taso.Position = paikka;
194        //taso.Color = Color.Blue;
195        taso.Image = multakuva;
196        Add(taso);
197    }
198
199    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
200    {
201        ammus.Destroy();
202
203        if (kohde.Tag.Equals("pelaaja"))
204        {
205            ((Pelaaja)kohde).ElamaLaskuri.Value -= 1;
206        }
207    }
208
209    void AmmuAseella(Pelaaja pelaaja)
210    {
211        if (pelaaja.ElamaLaskuri.Value == 0)
212        {
213            return;
214        }
215
216        PhysicsObject ammus = pelaaja.Weapon.Shoot();
217
218        if (ammus != null)
219        {
220            ammus.Size *= 0.5;
221            //ammus.Image = ...
222            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
223        }
224
225    }
226
227    void tähtääaseella1(AnalogState hiiri)
228    {
229        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
230
231    }
232
233    void tähtääaseella2(AnalogState tatti)
234    {
235        pelaaja2.Weapon.AbsoluteAngle = tatti.StateVector.Angle;
236
237    }
238
239    void LisaaPuu(Vector paikka, double leveys, double korkeus)
240    {
241        GameObject taso = new GameObject(leveys*4, korkeus*6);
242        taso.Position = paikka;
243        taso.Y += korkeus *2;
244        taso.Image = puukuva;
245        Add(taso, -1);
246    }
247
248    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
249    {
250        Vector zoomi = pelaaja2.Position - pelaaja1.Position;
251
252        Camera.Position = pelaaja1.Position + zoomi / 2;
253
254        double zoomiKerroin = 1500 / zoomi.Magnitude;
255
256        if (zoomiKerroin < maxZoom)
257        {
258            Camera.ZoomFactor = zoomiKerroin;
259        }
260        else
261        {
262            Camera.ZoomFactor = maxZoom;
263        }
264       
265        base.Update(gameTime);
266    }
267
268}
Note: See TracBrowser for help on using the repository browser.