source: 2013/26/ChristianS/Testi/Testi/Testi/Testi.cs @ 4264

Revision 4264, 10.5 KB checked in by chsarre, 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 Testi : PhysicsGame
10{
11    AssaultRifle rambonAse;
12
13    const double perusNopeus = 150;
14    const double hyppyNopeus = 850;
15    const int RUUDUN_KOKO = 50;
16
17   
18
19    EasyHighScore topLista = new EasyHighScore();
20
21
22    Vector nopeusX = new Vector(perusNopeus, 0);
23    Vector nopeusYlos = new Vector(0, perusNopeus);
24    Vector nopeusAlas = new Vector(0, -perusNopeus+15);
25
26    Pelaaja pelaaja;
27
28    IntMeter pistelaskuri;
29
30    Image pelaajanKuva = LoadImage("steve");
31    Image tahtiKuva = LoadImage("tahti");
32    Image seinaKuva = LoadImage("glass");
33    Image zombi = LoadImage("zombi");
34   
35
36    public override void Begin()
37    {
38        MediaPlayer.Play("taustamusa2");
39        MediaPlayer.IsRepeating = true;
40       
41        ClearAll();
42        Mouse.IsCursorVisible = true;
43        LuoKentta();
44        LisaaNappaimet();
45        LisaaLaskurit();
46        PhysicsObject randomOlio = new PhysicsObject(20.0, 20.0);
47
48        Camera.Follow(pelaaja);
49        Camera.ZoomFactor = 0.7;
50        Camera.StayInLevel = true;
51
52        int laskuri = 0;
53
54        while (laskuri < 100)
55        {
56            LuoSatunnainenOlio();
57            laskuri++;
58        }
59
60        Timer ajastin = new Timer();
61        ajastin.Interval = 1;
62        ajastin.Timeout += delegate { LuoSatunnainenOlio(); };
63        ajastin.Start();
64    }
65
66    void LuoKentta()
67    {
68        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
69        ruudut.SetTileMethod(Color.Green, LuoPelaaja);
70        ruudut.SetTileMethod(Color.Black, LuoTaso);
71        ruudut.SetTileMethod(Color.Yellow, LuoTahti);
72        ruudut.Execute(55, 55);
73        Level.CreateBorders();
74        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
75
76    }
77
78    private void LuoSatunnainenOlio()
79    {
80        double x = RandomGen.NextDouble(Level.Left, Level.Right);
81        double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
82        double r = RandomGen.NextDouble(10, 50);
83        // Color vari = RandomGen.NextColor();
84        LuoMuoto(x, y, r);
85    }
86
87    void LuoTaso(Vector paikka, double leveys, double korkeus)
88    {
89        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
90        taso.Position = paikka;
91        taso.CollisionIgnoreGroup = 1;
92        taso.Image = seinaKuva;
93        Add(taso);
94    }
95
96    void LuoTahti(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject tahti = new PhysicsObject(25, 25);
99        //tahti.IgnoresCollisionResponse = true;
100        tahti.Position = paikka;
101        tahti.Image = tahtiKuva;
102        tahti.Tag = "tahti";
103        Add(tahti, 1);
104    }
105
106    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
107    {
108        pelaaja = new Pelaaja(50, 50);
109        //pelaaja.MakeStatic();
110        pelaaja.CanRotate = false;
111        pelaaja.Position = paikka;
112        pelaaja.Image = pelaajanKuva;
113        pelaaja.CollisionIgnoreGroup = 2;
114        pelaaja.LinearDamping = 0.6;
115        pelaaja.Tag = "rambo";
116        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
117        AddCollisionHandler(pelaaja, "tahti", CollisionHandler.AddMeterValue(pelaaja.ElamaLaskuri, 2));
118        rambonAse = new AssaultRifle(30, 10);
119        rambonAse.Ammo.Value = int.MaxValue;
120        rambonAse.FireRate = 10;
121        rambonAse.ProjectileCollision = AmmusOsui;
122        pelaaja.Add(rambonAse);
123        AddCollisionHandler(pelaaja, "pahis", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { LuoSatunnainenOlio(); });
124        AddCollisionHandler(pelaaja, PelaajaTormasi);
125        Add(pelaaja);
126
127        pelaaja.ElamaLaskuri.LowerLimit += Kuolit;
128
129        ProgressBar elamaPalkki = new ProgressBar(150, 20);
130        elamaPalkki.X = Screen.Left + 150;
131        elamaPalkki.Y = Screen.Top - 20;
132        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
133        Add(elamaPalkki);
134
135        LuoAmmusLaskuri(0, 0);
136    }
137
138    void JatketaankoValinta()
139    {
140        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Uusi peli", "Lopeta peli");
141        valikko.AddItemHandler(0, Begin);
142        valikko.AddItemHandler(1, Exit);
143        Add(valikko);
144    }
145
146
147    void Kuolit()
148    {
149        MessageDisplay.Add("Zombi söi sinut!");
150        pelaaja.Destroy();
151        topLista.EnterAndShow(pistelaskuri.Value);
152        topLista.HighScoreWindow.Closed += delegate { JatketaankoValinta(); };
153    }
154
155    void LisaaNappaimet()
156    {
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
158        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
159       
160
161        Mouse.ListenMovement(0.1, KuunteleHiirenLiiketta, null);
162
163        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaOikealle, "Liikkuu oikealle", pelaaja);
164        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaVasemmalle, "Liikkuu vasemmalle", pelaaja);
165        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaYlos, "Liikkuu eteen", pelaaja);
166        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaAlas, "Liikkuu taakse", pelaaja);
167
168        /*
169        Keyboard.Listen(Key.D, ButtonState.Pressed, Liikuta, "Liikkuu oikealle", pelaaja, nopeusX);
170        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, "Liikkuu oikealle", pelaaja, new Vector(-nopeusX.X, pelaaja.Velocity.Y));
171        Keyboard.Listen(Key.A, ButtonState.Pressed, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeusX);
172        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, "Liikkuu vasemmalle", pelaaja, new Vector(nopeusX.X, pelaaja.Velocity.Y));
173        Keyboard.Listen(Key.W, ButtonState.Pressed, Liikuta, "Liikkuu eteen", pelaaja, nopeusYlos);
174        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, "Liikkuu eteen", pelaaja, new Vector(pelaaja.Velocity.X, -nopeusYlos.Y));
175        Keyboard.Listen(Key.S, ButtonState.Pressed, Liikuta, "Liikkuu taakse", pelaaja, nopeusAlas);
176        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, "Liikkuu taakse", pelaaja, new Vector(pelaaja.Velocity.X, -nopeusAlas.Y));
177         */
178        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", rambonAse);
179
180    }
181
182    void KuunteleHiirenLiiketta(AnalogState a)
183    {
184        Vector suunta = (Mouse.PositionOnWorld - rambonAse.AbsolutePosition).Normalize();
185        rambonAse.Angle = suunta.Angle;
186    }
187
188    void LiikutaYlos(PhysicsObject hahmo)
189    {
190        hahmo.Push(nopeusYlos * 30);
191    }
192
193    void LiikutaAlas(PhysicsObject hahmo)
194    {
195        hahmo.Push(nopeusAlas * 30);
196    }
197
198
199    void LiikutaVasemmalle(PhysicsObject hahmo)
200    {
201        //hahmo.Velocity += nopeus;
202        hahmo.Push(-nopeusX * 30);
203    }
204
205
206    void LiikutaOikealle(PhysicsObject hahmo)
207    {
208        //hahmo.Velocity += nopeus;
209        hahmo.Push(nopeusX * 30);
210    }
211
212    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
213    {
214        MessageDisplay.Add("Keräsit tähden!");
215
216        nopeusAlas *= 1.5;
217        nopeusX *= 1.5;
218        nopeusYlos *= 1.5;
219
220        Timer ajastin = new Timer();
221        ajastin.Interval = 15;
222        ajastin.Timeout += delegate {
223            nopeusAlas /= 1.5;
224            nopeusX /= 1.5;
225            nopeusYlos /= 1.5;
226            //nopeusYlos.Y = perusNopeus; nopeusX.X = perusNopeus; nopeusAlas.Y = -perusNopeus + 15;
227        };
228        ajastin.Start(1);
229
230
231        tahti.Destroy();
232    }
233    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
234    {
235        ammus.Destroy();
236        if (kohde.Image == null) return;
237        if (kohde.Image.Equals(zombi))
238        {
239            //if(kohde.Color.Equals(zombi))
240            pistelaskuri.Value++;
241            kohde.Destroy();
242        }
243    }
244    void AmmuAseella(AssaultRifle ase)
245    {
246        PhysicsObject ammus = ase.Shoot();
247
248        if (ammus != null)
249        {
250            ammus.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
251            ammus.Size *= 3;
252            //ammus.Image = ...
253            ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
254        }
255    }
256    void LuoMuoto(double x, double y, double sade)
257    {
258        PhysicsObject olio = new PhysicsObject(sade, sade);
259        //olio.Shape = muoto;
260        //olio.Color = vari;
261        olio.Restitution = 1.0;
262        olio.Y = y;
263        olio.X = x;
264        olio.CanRotate = false;
265        //olio.Tag = tagi;
266        olio.Image = zombi;
267        olio.Hit(RandomGen.NextVector(10, 100));
268        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
269        seuraajanAivot.Speed = 100;
270        seuraajanAivot.DistanceFar = 600;
271        seuraajanAivot.DistanceClose = 2;
272        seuraajanAivot.StopWhenTargetClose = false;
273        olio.Brain = seuraajanAivot;
274        Add(olio);
275
276    }
277    void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
278    {
279        if (kohde.Image == null) return;
280        if (kohde.Image.Equals(zombi))
281        {
282            //Tässä vähennetään elämää esim elamat.Value -= 5;
283            if (tormaaja is Pelaaja)
284            {
285                ((Pelaaja)tormaaja).ElamaLaskuri.Value -= 2;
286            }
287        }
288
289    }
290
291    void LisaaLaskurit()
292    {
293        pistelaskuri = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
294    }
295    IntMeter LuoPisteLaskuri(double x, double y)
296    {
297        IntMeter laskuri = new IntMeter(0);
298        laskuri.MaxValue = int.MaxValue;
299
300        Label naytto = new Label();
301        naytto.BindTo(laskuri);
302        naytto.X = x;
303        naytto.Y = y;
304        naytto.TextColor = Color.White;
305        naytto.BorderColor = Level.BackgroundColor;
306        naytto.Color = Level.BackgroundColor;
307        Add(naytto);
308
309        return laskuri;
310    }
311    void LuoAmmusLaskuri(double x, double y)
312    {
313        Label naytto = new Label();
314        naytto.BindTo(rambonAse.Ammo);
315        naytto.X = x;
316        naytto.Y = y;
317        naytto.TextColor = Color.White;
318        naytto.BorderColor = Level.BackgroundColor;
319        naytto.Color = Level.BackgroundColor;
320        Add(naytto);
321    }
322    void KasitteleammusOsui(PhysicsObject pallo, PhysicsObject kohde)
323    {
324
325    }
326}
327
328class Pelaaja : PhysicsObject
329{
330    private IntMeter elamaLaskuri = new IntMeter(10, 0, 16);
331    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
332
333    public Pelaaja(double leveys, double korkeus)
334        : base(leveys, korkeus)
335    {
336
337    }
338   
339
340}
Note: See TracBrowser for help on using the repository browser.