source: 2013/30/LauriY/PerusPeli3/PerusPeli3/PerusPeli3/PerusPeli3.cs @ 4654

Revision 4654, 9.4 KB checked in by rikvalko, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class PerusPeli3 : PhysicsGame
10{
11    Image pelaajanKuva = LoadImage("kuva2");
12    Image vihollisenkuva = LoadImage("poliisi2");
13    Image medkit = LoadImage("medkits");
14    Image ruoho = LoadImage("grass");
15    Image server = LoadImage("server");
16    Pyssymies pelaaja;
17    Image taustakuva = LoadImage("kentta1");
18    Image muurinKuva = LoadImage("muuri");
19    IntMeter pisteLaskuri = new IntMeter(0);
20    EasyHighScore topLista = new EasyHighScore();
21
22    SoundEffect ak47 = LoadSoundEffect("ak-47");
23
24
25    int vihollislaskuri = 0;
26    int kenttänumero = 1;
27
28    public override void Begin()
29    {
30        alkuvalikko();
31    }
32
33    void aloitapeli()
34    {
35        ClearAll();
36        Mouse.IsCursorVisible = true;
37        Level.BackgroundColor = Color.Black;
38
39        Luokentta();
40        LuoPistelaskuri();
41        Camera.Follow(pelaaja);
42
43        Keyboard.Listen(Key.Escape, ButtonState.Pressed, pausevalikko, "Lopeta peli");
44
45        Keyboard.Listen(Key.Up, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, 80));
46        Keyboard.Listen(Key.Down, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(0, -80));
47        Keyboard.Listen(Key.Left, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(-80, 0));
48        Keyboard.Listen(Key.Right, ButtonState.Down, Liikutapelaajaa, "liikuttaa pelaajaa", pelaaja, new Vector(80, 0));
49
50        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
51        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "Ammu aseella.", pelaaja.Ase);
52    }
53
54    void seuraavakentta()
55    {
56        kenttänumero++;
57        aloitapeli();
58    }
59
60    void pausevalikko()
61    {
62        Pause();
63        MultiSelectWindow pausevalikko = new MultiSelectWindow("taukovalikko", "Jatka peliä", "lopeta");
64        Add(pausevalikko);
65        pausevalikko.AddItemHandler(0, Pause);
66        pausevalikko.AddItemHandler(1, alkuvalikko);
67           
68    }
69
70    void alkuvalikko()
71    {
72        ClearAll();
73        Level.Background.Image = taustakuva;
74        Level.Background.FitToLevel();
75        MultiSelectWindow alkuValikko = new MultiSelectWindow("Alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
76        alkuValikko.DefaultCancel = 2;
77        Add(alkuValikko);
78
79        pisteLaskuri.Value = 0;
80        kenttänumero = 1;
81       
82        alkuValikko.AddItemHandler(0, aloitapeli);
83        alkuValikko.AddItemHandler(1, ParhaatPisteet);
84        alkuValikko.AddItemHandler(2, Exit);
85    }
86
87    void ParhaatPisteet()
88    {
89        topLista.Show();
90        topLista.HighScoreWindow.Closed += delegate(Window w) { alkuvalikko(); };
91    }
92
93    void LuoPistelaskuri()
94    {
95        Label pisteNaytto = new Label();
96        pisteNaytto.X = Screen.Left + 100;
97        pisteNaytto.Y = Screen.Top - 100;
98        pisteNaytto.TextColor = Color.Black;
99        pisteNaytto.Color = Color.White;
100
101        pisteNaytto.BindTo(pisteLaskuri);
102        Add(pisteNaytto);
103    }
104
105    void KuunteleLiiketta(AnalogState hiirenTila)
106    {
107        pelaaja.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
108    }
109
110    void Liikutapelaajaa(PhysicsObject pelaaja, Vector suunta)
111    {
112        pelaaja.Hit(suunta);
113    }
114
115    void Luokentta()
116    {
117
118        vihollislaskuri = 0;
119       
120        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta"+kenttänumero);
121        //ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta6");
122
123
124        ruudut.SetTileMethod(Color.Black, LuoTaso);
125        ruudut.SetTileMethod("4CFF00", LuoPelaaja);
126        ruudut.SetTileMethod("FF0000", luovihollinen);
127        ruudut.SetTileMethod("0094FF", luoserver);
128        ruudut.SetTileMethod("FFD800", luohplisaaja);
129        ruudut.Execute(60, 60);
130        Level.Background.Image = ruoho;
131        Level.Background.TileToLevel();
132
133
134        LuoElamaLaskuri();
135    }
136
137    void LuoElamaLaskuri()
138    {
139        ProgressBar elamaPalkki = new ProgressBar(150, 20);
140        elamaPalkki.X = Screen.Left + 150;
141        elamaPalkki.Y = Screen.Top - 20;
142        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
143        Add(elamaPalkki);
144    }
145
146    void ElamaLoppui()
147    {
148        MessageDisplay.Add("Elämät loppuivat, voi voi.");
149    }
150
151    void luovihollinen(Vector paikka, double levelys, double korkeus)
152    {
153        Pyssymies vihollinen = new Pyssymies(levelys, korkeus, 1);
154        vihollinen.Shape = Shape.Circle;
155        vihollinen.Position = paikka;
156        vihollinen.Image = vihollisenkuva;
157        vihollinen.LinearDamping = 0.8;
158        vihollinen.Tag = "vihollinen";
159        vihollinen.ElamaLaskuri.LowerLimit += delegate { vihollinenkuoli(vihollinen); };
160        Add(vihollinen);
161        vihollinen.Ase.ProjectileCollision = vihollisenAmmusOsui;
162
163        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
164        seuraajanAivot.Speed = 300;     
165        seuraajanAivot.DistanceFar = 600;
166        seuraajanAivot.DistanceClose = 200;
167        seuraajanAivot.StopWhenTargetClose = true;
168
169        vihollinen.Brain = seuraajanAivot;
170
171        Timer ajastin = new Timer();
172        ajastin.Interval = 1.0;
173        ajastin.Timeout += delegate {
174            if (!vihollinen.IsDestroyed)
175                vihollinen.Ase.Shoot();
176        };
177        ajastin.Start();
178
179        vihollislaskuri++;
180    }
181
182    void LuoPelaaja(Vector paikka, double levelys, double korkeus)
183    {
184        pelaaja = new Pyssymies(levelys, korkeus, 3);
185        pelaaja.Shape = Shape.Circle;
186        pelaaja.Position = paikka;
187        pelaaja.Image = pelaajanKuva;
188        pelaaja.LinearDamping = 0.8;
189        pelaaja.Tag = "pelaaja";
190        Add(pelaaja);
191        pelaaja.Ase.AttackSound = ak47;
192        pelaaja.Ase.ProjectileCollision = pelaajanAmmusOsui;
193        pelaaja.ElamaLaskuri.LowerLimit += pelaajakuoli;
194
195        AddCollisionHandler(pelaaja, "medkit", osuumedkit);
196    }
197
198    void vihollinenkuoli(Pyssymies vihollinen)
199    {
200        vihollislaskuri--;
201
202        Explosion rajahdys = new Explosion(50);
203        rajahdys.Position = vihollinen.Position;
204        Add(rajahdys);
205
206        if (vihollislaskuri == 0)
207        {
208           
209        }
210    }
211
212    void pelaajakuoli()
213    {
214        Label teksti = new Label("Game Over");
215        Add(teksti);
216        teksti.TextColor = Color.Red;
217        //Timer.SingleShot(3, alkuvalikko);
218        topLista.EnterAndShow(pisteLaskuri.Value);
219        topLista.HighScoreWindow.Closed += delegate(Window w) { alkuvalikko(); };
220    }
221
222    void osuumedkit(PhysicsObject pelaajaolio, PhysicsObject kohde)
223    {
224        kohde.Destroy();
225        pelaaja.ElamaLaskuri.Value += 2;
226
227    }
228
229    void vihollisenAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
230    {
231        ammus.Destroy();
232        if (kohde is Pyssymies && kohde.Tag=="pelaaja")
233        {
234            ((Pyssymies)kohde).ElamaLaskuri.Value--;
235        }
236    }
237
238    void pelaajanAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
239    {
240        ammus.Destroy();
241        if (kohde is Pyssymies && kohde.Tag == "vihollinen")
242        {
243            ((Pyssymies)kohde).ElamaLaskuri.Value--;
244            pisteLaskuri.Value += 1;
245        }
246        if (kohde.Tag == "server")
247        {
248            kohde.Destroy();
249            Explosion rajahdys = new Explosion(250);
250            rajahdys.Position = kohde.Position;
251            Add(rajahdys);
252            Timer.SingleShot(2, seuraavakentta);
253        }
254    }
255
256    void LuoTaso(Vector paikka, double leveys, double korkeus)
257    {
258        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
259        taso.Position = paikka;
260        taso.Image = muurinKuva;
261        taso.CollisionIgnoreGroup = 1;
262        taso.Color = Color.Brown;
263        Add(taso);
264    }
265
266    void luohplisaaja(Vector paikka, double leveys, double korkeus)
267    {
268        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
269        taso.Position = paikka;
270        taso.Image = medkit;
271        taso.CollisionIgnoreGroup = 1;
272        taso.Tag = "medkit";
273        Add(taso);
274    }
275
276    void luoserver(Vector paikka, double leveys, double korkeus)
277    {
278        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
279        taso.Position = paikka;
280        taso.Image = server;
281        taso.CollisionIgnoreGroup = 1;
282        taso.Color = Color.Brown;
283        taso.Tag = "server";
284        Add(taso);
285    }
286
287    void Ammu(AssaultRifle ase)
288    {
289        PhysicsObject ammus = ase.Shoot();
290
291        if (ammus != null)
292        {
293            //ammus.Size *= 50000000000000;
294            //ammus.Image = ...
295            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
296        }
297
298
299    }
300}
301
302class Pyssymies : PhysicsObject
303{
304    private IntMeter elamaLaskuri;
305    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
306
307    public AssaultRifle Ase;
308
309
310    public Pyssymies(double leveys, double korkeus, int elamat)
311        : base(leveys, korkeus)
312    {
313        elamaLaskuri = new IntMeter(elamat, 0, elamat);
314        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
315
316        Ase = new AssaultRifle(30, 10);
317        Ase.Ammo.Value = 1000;
318        Ase.IsVisible = false;
319        Add(Ase);
320
321}
322
323    }
Note: See TracBrowser for help on using the repository browser.