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

Revision 6240, 6.9 KB checked in by akpaloka, 6 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
28    Pelaaja pelaaja1;
29    Pelaaja pelaaja2;
30
31    Image pelaajanKuva = LoadImage("hahmo");
32    Image tahtiKuva = LoadImage("tahti");
33    Image maakuva = LoadImage("ruoho");
34    Image multakuva = LoadImage("multa");
35    Image asekuva = LoadImage("ak47");
36    private Image[] ukkelinKavely = LoadImages("hahmo", "hahmo2", "hahmo3");
37
38
39    Image[] kolikkokuvat = LoadImages("coin1", "coin2", "coin3", "coin4", "coin4", "coin5", "coin6", "coin7", "coin8", "coin9", "coin10");
40
41    SoundEffect maaliAani = LoadSoundEffect("maali");
42
43    public override void Begin()
44    {
45        Gravity = new Vector(0, -1000);
46
47        LuoKentta();
48        LisaaNappaimet();
49
50        Camera.Follow(pelaaja1, pelaaja2);
51        Camera.FollowXMargin = 100;
52        Camera.FollowYMargin = 100;
53
54        IsMouseVisible = true;
55    }
56
57    void LuoKentta()
58    {
59        TileMap kentta = TileMap.FromLevelAsset("kentta1");
60        kentta.SetTileMethod('#', LisaaTaso);
61        kentta.SetTileMethod('*', LisaaTahti);
62        kentta.SetTileMethod('N', LisaaPelaaja1);
63        kentta.SetTileMethod('o', LisaaPelaaja2);
64        kentta.SetTileMethod('m', LisaaMulta);
65        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
66        Level.CreateBorders();
67        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
68    }
69
70    void LisaaTaso(Vector paikka, double leveys, double korkeus)
71    {
72        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
73        taso.Position = paikka;
74        //taso.Color = Color.Blue;
75        taso.Image = maakuva;
76        Add(taso);
77    }
78
79    void LisaaTahti(Vector paikka, double leveys, double korkeus)
80    {
81        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys * 0.5, korkeus * 0.5);
82        tahti.IgnoresCollisionResponse = true;
83        tahti.Position = paikka;
84        tahti.Animation = new Animation(kolikkokuvat);
85        tahti.Animation.FPS = 15;
86        tahti.Animation.Start();
87        tahti.Tag = "tahti";
88        Add(tahti);
89    }
90
91    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus)
92    {
93        Pelaaja pelaaja = new Pelaaja(leveys * 0.6, korkeus * 1.5);
94        pelaaja.Position = paikka;
95        pelaaja.Tag = "pelaaja";
96        pelaaja.Mass = 4.0;
97        pelaaja.Image = pelaajanKuva;
98        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
99        Add(pelaaja);
100        pelaaja.Animation = new Animation(ukkelinKavely);
101        pelaaja.AnimWalk = new Animation(ukkelinKavely);
102        //pelaaja1 on PlatformCharacter-tyyppinen
103        //pelaaja1.Animation.Start();
104        pelaaja.AnimIdle = pelaajanKuva;
105        pelaaja.Animation.FPS = 1;
106        pelaaja.Weapon = new AssaultRifle(30, 30);
107        pelaaja.Weapon.Image = asekuva;
108        pelaaja.Weapon.X = 5;
109        pelaaja.Weapon.Y = -4;
110
111        //Ammusten määrä aluksi:
112        pelaaja.Weapon.Ammo.Value = 1000;
113
114        //Mitä tapahtuu kun ammus osuu johonkin?
115        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
116        return pelaaja;
117    }
118
119    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
120    {
121        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus);
122    }
123
124    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
125    {
126        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus);
127    }
128
129    void LisaaNappaimet()
130    {
131        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
132        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
133        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja1);
134        Mouse.ListenMovement(0.0, tähtääaseella1, "");
135
136        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
137        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
138        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
139
140        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
141
142        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
143        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
144        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
145        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja2);
146        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, tähtääaseella2, "");
147
148        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
149    }
150
151    void Liikuta(PlatformCharacter hahmo, double nopeus)
152    {
153        hahmo.Walk(nopeus);
154    }
155
156    void Hyppaa(PlatformCharacter hahmo, double nopeus)
157    {
158        hahmo.Jump(nopeus);
159    }
160
161    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
162    {
163        maaliAani.Play();
164        MessageDisplay.Add("Keräsit tähden!");
165        tahti.Destroy();
166    }
167
168    void LisaaMulta(Vector paikka, double leveys, double korkeus)
169    {
170
171        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
172        taso.Position = paikka;
173        //taso.Color = Color.Blue;
174        taso.Image = multakuva;
175        Add(taso);
176    }
177
178    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
179    {
180        ammus.Destroy();
181
182        if (kohde.Tag.Equals("pelaaja"))
183        {
184            ((Pelaaja)kohde).ElamaLaskuri.Value -= 1;
185        }
186    }
187
188    void AmmuAseella(Pelaaja pelaaja)
189    {
190        if (pelaaja.ElamaLaskuri.Value == 0)
191        {
192            return;
193        }
194
195        PhysicsObject ammus = pelaaja.Weapon.Shoot();
196
197        if (ammus != null)
198        {
199            ammus.Size *= 0.5;
200            //ammus.Image = ...
201            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
202        }
203
204    }
205
206    void tähtääaseella1(AnalogState hiiri)
207    {
208        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
209
210    }
211
212    void tähtääaseella2(AnalogState tatti)
213    {
214        pelaaja2.Weapon.AbsoluteAngle = tatti.StateVector.Angle;
215
216    }
217
218   
219
220}
Note: See TracBrowser for help on using the repository browser.