source: 2014/23/TuukkaJ/ManaaniPage/ManaaniPage/ManaaniPage/ManaaniPage.cs @ 4900

Revision 4900, 8.0 KB checked in by jotapoti, 8 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
9
10public class ManaaniPage : PhysicsGame
11{
12    AssaultRifle pelaajan1Ase;
13    const double nopeus = 200;
14    const double hyppyNopeus = 750;
15
16    PeliHahmo pelaaja;
17    PhysicsObject Vastustaja;
18    Image kuvagroundimage = LoadImage("groundimage");
19    Image kuvalava = LoadImage("Lava");
20    Image kuvapelaaja = LoadImage("Pelaaja");
21    Image kuvavastustaja = LoadImage("Vastustaja");
22    Image kuvaammus = LoadImage("Ammus");
23    Image kuvapaavastustaja = LoadImage("hyyppa");
24
25    public override void Begin()
26    {
27        // TODO Kaikki viholliset pitää tappaa jotta voittaa ja sen jälkeen pääsee toiselle tasolle
28        // TODO Uusia kenttiä
29        // TODO Viholliset ampumaan ( Erillainen vihollinen )
30        // TODO Tee alkuvalikko
31        // TODO Tee aijan otto kello
32        // TODO Tee high score lista
33        // TODO Lisää hpta pelaajalle
34        // TODO Kun tiput laavaan niin ottaa sekunnissa 3hp
35        // TODO Kun otat vahainkoa vihollisesta 1hp
36        LuoAlkuvalikko();
37       
38    }
39    void LuoAlkuvalikko()
40    {
41        MultiSelectWindow alkuValikko = new MultiSelectWindow("ManaaniPage", "Start game", "High Score", "Exit");
42        Add(alkuValikko);
43        alkuValikko.AddItemHandler(0, AloitaAlusta);
44        alkuValikko.AddItemHandler(2, Exit);
45    }
46    void AloitaAlusta()
47    {
48        ClearAll();
49        LuoKentta();
50        LisaaNappaimet();
51        Gravity = new Vector(0, -2000);
52        Mouse.IsCursorVisible = true;
53        Camera.Follow(pelaaja);
54        Camera.Zoom(3);
55        Level.Background.CreateGradient(Color.BloodRed, Color.Black);
56        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
57        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
58    }
59    void LuoKentta()
60    {
61        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
62        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Untitled");
63
64        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
65        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
66        ruudut.SetTileMethod(Color.Black, LuoTaso);
67        ruudut.SetTileMethod(Color.FromHexCode("FFFF07"), LuoVastustaja);
68        ruudut.SetTileMethod(Color.Red, LuoLava);
69        ruudut.SetTileMethod(Color.FromHexCode("00FF00"), LuoPaavastustaja);
70
71        //3. Execute luo kentän
72        //   Parametreina leveys ja korkeus
73        ruudut.Execute(20, 20);
74    }
75
76    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
77    {
78        pelaaja = new PeliHahmo(30, 30, 3);
79        pelaaja.Position = paikka;
80        pelaaja.Image = kuvapelaaja;
81        AddCollisionHandler(pelaaja, "lava", TormaaLavaan);
82        AddCollisionHandler(pelaaja, "hemmo", TormaaHemmoon);
83        Add(pelaaja);
84        pelaajan1Ase = new AssaultRifle(30, 10);
85
86        //Ammusten määrä aluksi:
87        pelaajan1Ase.Ammo.Value = 1000;
88
89        //Mitä tapahtuu kun ammus osuu johonkin?
90        pelaajan1Ase.ProjectileCollision = AmmusOsui;
91
92        pelaaja.Weapon = pelaajan1Ase;
93        pelaaja.Destroyed += delegate { pelaaja.Weapon = null; };
94    }
95
96    void LuoTaso(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
99        taso.Position = paikka;
100        taso.Image = kuvagroundimage;
101        taso.CollisionIgnoreGroup = 2;
102        Add(taso);
103    }
104    void LuoVastustaja(Vector paikka, double leveys, double korkeus)
105    {
106        Vihu hemmo = new Vihu(leveys, korkeus);
107        hemmo.Position = paikka;
108        hemmo.Image = kuvavastustaja;
109        hemmo.CollisionIgnoreGroup = 1;
110        hemmo.CanRotate = false;
111        hemmo.Tag = "hemmo";
112        Add(hemmo);
113        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
114        tasoAivot.Speed = 100;
115        tasoAivot.TriesToJump = true;
116        tasoAivot.FallsOffPlatforms = true;
117
118        hemmo.Brain = tasoAivot;
119    }
120    void LuoLava(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        taso.Position = paikka;
124        taso.Image = kuvalava;
125        taso.CollisionIgnoreGroup = 1;
126        taso.Tag = "lava";
127        Add(taso);
128    }
129    void LuoPaavastustaja(Vector paikka, double leveys, double korkeus)
130    {
131        Vihu hemmo = new Vihu(leveys, korkeus);
132        hemmo.Position = paikka;
133        hemmo.Image = kuvapaavastustaja;
134        hemmo.CollisionIgnoreGroup = 1;
135        hemmo.CanRotate = false;
136        hemmo.Tag = "hemmo";
137        Add(hemmo);
138        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
139        tasoAivot.Speed = 100;
140        tasoAivot.TriesToJump = true;
141        tasoAivot.FallsOffPlatforms = true;
142
143        hemmo.Brain = tasoAivot;
144        hemmo.Destroyed += PeliPaattyy;
145    }
146
147    void PeliPaattyy()
148    {
149        ClearAll();
150        Label l = new Label("Voitit pelin.");
151        Add(l);
152    }
153
154    void LisaaNappaimet()
155    {
156        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
157
158        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeus);
159        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, nopeus);
160        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
161        Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", pelaaja);
162        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
163
164        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
165
166        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, -nopeus);
167        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja, nopeus);
168        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
169
170        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
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    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
182    {
183        if (kohde.Tag == "hemmo")
184        {
185            kohde.Destroy();
186        }
187        ammus.Destroy();
188    }
189    void TormaaLavaan(PhysicsObject pelaaja, PhysicsObject lava)
190    {
191        pelaaja.Destroy();
192        PeliLoppui();
193    }
194    void TormaaHemmoon(PhysicsObject pelaaja, PhysicsObject hemmo)
195    {
196        pelaaja.Destroy();
197        PeliLoppui();
198    }
199    void AmmuAseella(PeliHahmo pelaaja)
200    {
201        if (pelaaja.Weapon == null) return;
202
203        PhysicsObject ammus = pelaaja.Weapon.Shoot();
204
205        if (ammus != null)
206        {
207            ammus.Size *= 1;
208            ammus.Image = kuvaammus;
209            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
210        }
211    }
212    void Tahtaa(AnalogState hiirenLiike)
213    {
214        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
215        pelaajan1Ase.Angle = suunta.Angle;
216    }
217   
218    void PeliLoppui()
219    {
220        LuoAlkuvalikko();
221    }
222   
223}
224
225class Vihu : PlatformCharacter
226{
227    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
228    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
229
230    public Vihu(double leveys, double korkeus)
231        : base(leveys, korkeus)
232    {
233        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
234    }
235}
236class PeliHahmo : PlatformCharacter
237{
238    public int Elamat { get; set; }
239
240    public PeliHahmo(double leveys, double korkeus, int elamia)
241        : base(leveys, korkeus)
242    {
243        Elamat = elamia;
244    }
245}
Note: See TracBrowser for help on using the repository browser.