source: 2013/30/RikoV/PerusPeli4/PerusPeli3/PerusPeli3/PerusPeli3.cs.mine @ 4706

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