source: 2014/27/KatjuL/OmaPeli/OmaPeli/OmaPeli/OmaPeli.cs @ 5437

Revision 5437, 6.3 KB checked in by katleino, 6 years ago (diff)

Valmis peli

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class OmaPeli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja;
16    IntMeter pisteLaskuri = new IntMeter(0);
17    List<Label> valikonKohdat = new List<Label>();
18    EasyHighScore topLista = new EasyHighScore();
19
20    public override void Begin()
21    {
22        Mouse.IsCursorVisible = true;
23       
24        Valikko();
25    }
26
27    void LuoKentta()
28    {
29        TileMap kentta = TileMap.FromLevelAsset("kentta1");
30        kentta.SetTileMethod('#', LisaaTaso);
31        kentta.SetTileMethod('P', LisaaPelaaja);
32        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
33        Level.CreateBorders();
34        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
35
36        Viholliset();
37    }
38
39    void LisaaTaso(Vector paikka, double leveys, double korkeus)
40    {
41        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
42        taso.Position = paikka;
43        taso.Color = Color.Green;
44        Add(taso);
45    }
46
47    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
48    {
49        pelaaja = new PlatformCharacter(leveys, korkeus);
50        pelaaja.Position = paikka;
51        pelaaja.Mass = 4.0;
52        pelaaja.Shape = Shape.Circle;
53        pelaaja.Color = Color.Black;
54        Add(pelaaja);
55
56        pelaaja.Weapon = new AssaultRifle(30, 10);
57        pelaaja.Weapon.Tag = "ase";
58        pelaaja.Weapon.InfiniteAmmo = true;
59        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
60        pelaaja.Weapon.AmmoIgnoresGravity = true;
61        pelaaja.Weapon.CanHitOwner = false;
62
63        AddCollisionHandler(pelaaja, "pahis", PelaajaTormasi);
64    }
65
66    void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject vihu)
67    {
68        if (vihu.Tag.Equals("pahis"))
69        {
70            pelaaja.Destroy();
71            GameOver();
72        }
73    }
74
75    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
76    {
77        ammus.Destroy();
78        if (kohde.Tag.Equals("pahis"))
79        {
80            kohde.Destroy();
81            pisteLaskuri.Value += 1;
82        }
83    }
84
85    void AmmuAseella(PlatformCharacter pelaaja)
86    {
87        PhysicsObject ammus = pelaaja.Weapon.Shoot();
88
89        if (ammus != null)
90        {
91            //ammus.Size *= 3;
92            //ammus.Image = ...
93            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
94        }
95    }
96
97    void LisaaNappaimet()
98    {
99        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101
102        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeus);
103        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja, nopeus);
104        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
105
106
107        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja);
108    }
109
110    void Liikuta(PlatformCharacter hahmo, double nopeus)
111    {
112        hahmo.Walk(nopeus);
113    }
114
115    void Hyppaa(PlatformCharacter hahmo, double nopeus)
116    {
117        hahmo.Jump(nopeus);
118    }
119
120    void Viholliset()
121    {
122        PlatformCharacter vihollinen = new PlatformCharacter(30, 30);
123        vihollinen.Shape = Shape.Rectangle;
124        vihollinen.Color = Color.Black;
125        vihollinen.Tag = "pahis";
126        Add(vihollinen);
127        vihollinen.LifetimeLeft = TimeSpan.FromSeconds(25.0);
128
129        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
130        tasoAivot.Speed = 100;
131        vihollinen.Brain = tasoAivot;
132
133        tasoAivot.FallsOffPlatforms = true;
134        tasoAivot.JumpSpeed = 600;
135        tasoAivot.TriesToJump = true;
136        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
137
138        if (RandomGen.NextBool() == true)
139        {
140            vihollinen.X = Level.Left;
141        }
142        else
143        {
144            vihollinen.X = Level.Right;
145        }
146    }
147
148    void LuoPistelaskuri()
149    {
150        pisteLaskuri = new IntMeter(0);
151
152        Label pisteNaytto = new Label();
153        pisteNaytto.X = Screen.Left + 100;
154        pisteNaytto.Y = Screen.Top - 100;
155        pisteNaytto.TextColor = Color.Black;
156        pisteNaytto.Color = Color.White;
157
158        pisteNaytto.BindTo(pisteLaskuri);
159        Add(pisteNaytto);
160
161        pisteNaytto.IntFormatString = "Pisteitä: {0:D3}";
162
163        pisteNaytto.Title = "pisteet";
164    }
165
166    void LuoVihollisAjastin()
167    {
168        Timer ajastin = new Timer();
169        ajastin.Interval = 0.9;
170        ajastin.Timeout += Viholliset;
171        ajastin.Start();
172    }
173
174    void Valikko()
175    {
176        ClearAll();
177
178        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
179        Add(alkuValikko);
180
181        alkuValikko.AddItemHandler(0, AloitaPeli);
182        alkuValikko.AddItemHandler(1, ParhaatPisteet);
183        alkuValikko.AddItemHandler(2, Exit);
184    }
185
186    void ValikossaLiikkuminen(AnalogState hiirenTila)
187    {
188        foreach (Label kohta in valikonKohdat)
189        {
190            if (Mouse.IsCursorOn(kohta))
191            {
192                kohta.TextColor = Color.Red;
193            }
194            else
195            {
196                kohta.TextColor = Color.Black;
197            }
198        }
199    }
200
201    void AloitaPeli()
202    {
203        ClearAll();
204
205        Gravity = new Vector(0, -1000);
206
207        LuoKentta();
208        LisaaNappaimet();
209        LuoPistelaskuri();
210        LuoVihollisAjastin();
211
212        Camera.Follow(pelaaja);
213        Camera.ZoomFactor = 1.2;
214        Camera.StayInLevel = true;
215    }
216
217    void ParhaatPisteet(Window sender = null)
218    {
219        //...
220    }
221
222    void ParhaatPisteet()
223    {
224        topLista.EnterAndShow(pisteLaskuri.Value);
225        topLista.HighScoreWindow.Closed += ParhaatPisteet;
226        topLista.Show();
227    }
228
229    void GameOver()
230    {
231        GameObject loppuTeksti = new GameObject(LoadImage("GameOver"));
232        Add(loppuTeksti);
233        Timer.SingleShot(5.0, delegate { Valikko(); });
234    }
235}
Note: See TracBrowser for help on using the repository browser.