source: 2013/30/RikoV/PerusPeli3 (oikea)/PerusPeli3/PerusPeli3/PerusPeli3.cs @ 4648

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