source: 2018/26/LeoM/leonpeli1/leonpeli1/leonpeli1.cs @ 9799

Revision 9799, 9.8 KB checked in by mianhayr, 14 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7using Jypeli.Effects;
8
9
10
11
12
13
14
15public class leonpeli1 : PhysicsGame
16{
17    const float ASKEL = 20.0f;
18
19    PhysicsObject hahmo;
20    //ProgressBar elamaPalkki;
21    Image palikankuva = LoadImage("muuri");
22    Image pelaajankuvakuva = LoadImage("tankki");
23    Cannon Ase;
24    Image taustakuva = LoadImage("TAUSTA");
25    DoubleMeter elamalaskuri;
26    EasyHighScore topLista = new EasyHighScore();
27    Image kasvikuva = LoadImage("KASVI");
28    Image taustakuvareal = LoadImage("taustakuva");
29    SoundEffect Rajahdys = LoadSoundEffect("rock_breaking");
30    public override void Begin()
31    {
32        topLista.HighScoreWindow.Closed += loppuvalikko;
33
34
35
36
37
38
39
40        loppuvalikko();
41        //IsFullScreen = true;
42        //SetWindowSize(1920, 1080);
43    }
44
45    void luokentta()
46    {
47        TileMap ruudut = TileMap.FromLevelAsset("kentta1");
48        ruudut.SetTileMethod('P', lisaahahmo);
49        ruudut.SetTileMethod('V', lisaavihu);
50        ruudut.SetTileMethod('S', LuoPalikka);
51        ruudut.SetTileMethod('G', LuoPeitto);
52        ruudut.Execute(40, 40);
53        LuoElamaLaskuri();
54        LuoPistelaskuri();
55        Level.Background.CreateGradient(Color.White, Color.Blue);
56        MediaPlayer.Play("taustamusa");
57    }
58 
59    void lisaanappaimet()
60    {
61        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
62        double nopeus = 100;
63        Keyboard.Listen(Key.A, ButtonState.Down,
64    LiikutaPelaajaa, null, new Vector(-nopeus, 0));
65        Keyboard.Listen(Key.D, ButtonState.Down,
66          LiikutaPelaajaa, null, new Vector(nopeus, 0));
67        Keyboard.Listen(Key.W, ButtonState.Down,
68          LiikutaPelaajaa, null, new Vector(0, nopeus));
69        Keyboard.Listen(Key.S, ButtonState.Down,
70          LiikutaPelaajaa, null, new Vector(0, -nopeus));
71        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammuaseella, "ammutaan aseella");
72        Mouse.ListenMovement(0.5, Tahtaa, "Tähtää aseella");
73
74    }
75    void lisaavihu(Vector paikka, double leveys, double korkeus)
76    {
77        Vihu vihu = new Vihu(leveys, korkeus);
78        vihu.Shape = Shape.Circle;
79        vihu.CanRotate = false;
80        Add(vihu, 2);
81        vihu.Tag = "vihu";
82        vihu.LinearDamping = 0.69;
83        vihu.Position = paikka;
84       
85
86
87        vihu.Image = pelaajankuvakuva;
88        const int RUUDUN_KOKO = 20;
89
90        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO / 2, RUUDUN_KOKO / 2);
91        labyrinttiAivot.Speed = 100.0;
92        labyrinttiAivot.LabyrinthWallTag = "palikka";
93        vihu.Brain = labyrinttiAivot;
94        Cannon Ase = new Cannon(30, 10);
95
96        vihu.Destroyed += delegate {
97             Ase.Destroy();
98        };
99        Ase.CanHitOwner = false;
100        //Ase.IsVisible = false;
101        Ase.FireRate = 5.0;
102        Ase.Angle += Angle.FromDegrees(90);
103        Ase.ProjectileCollision = AmmusOsui;
104        vihu.Add(Ase);
105        vihu.AmpumisAjastin = Timer.CreateAndStart(0.5, () => { VihuAmpuu(vihu, Ase); });
106
107       
108
109    }
110
111    void VihuAmpuu(PhysicsObject vihu, Cannon ase)
112    {
113        Vector suunta = hahmo.Position - vihu.Position;
114        double pituus = suunta.Magnitude;
115        suunta = suunta.Normalize();
116
117
118
119        int i = 1;
120        while (true)
121        {
122            if (ASKEL * i > pituus)
123                break;
124
125            Vector lisa = suunta * ASKEL * i;
126
127            GameObject olio = GetObjectAt(vihu.Position + lisa, "palikka");
128            i++;
129
130            if (olio != null)
131                return;
132
133           
134        }
135
136        ase.Angle = (hahmo.Position - vihu.Position).Angle;
137       
138        PhysicsObject ammus = ase.Shoot();
139        ammus.CollisionIgnoreGroup = 2;
140        ammus.Mass = 0.00000001;
141        ammus.MaximumLifetime = TimeSpan.FromSeconds(0.3);
142        ammus.Tag = "ammmus";
143        AddCollisionHandler(ammus,"hahmo" , ammusosuipelaajaan);
144       
145
146    }
147    void lisaahahmo(Vector paikka, double leveys, double korkeus)
148    {
149        hahmo = new PhysicsObject(leveys,korkeus);
150        hahmo.Shape = Shape.Circle;
151        hahmo.CanRotate = false;
152        Add(hahmo,3);
153        hahmo.LinearDamping = 0.69;
154        hahmo.Position = paikka;
155        Camera.Follow(hahmo);
156        Camera.Zoom(2.0);
157        hahmo.Image = pelaajankuvakuva;
158        hahmo.KineticFriction = hahmo.StaticFriction = 0;
159        hahmo.Tag = "hahmo";
160
161        maski = new GameObject(Screen.Width, Screen.Height);
162        Add(maski, 3); maski.Image = taustakuva;
163
164        Ase = new Cannon(30, 10);
165        hahmo.Add(Ase);
166        Ase.CanHitOwner = false;
167        //Ase.IsVisible = false;
168        Ase.FireRate = 5.0;
169        //Ase.Angle += Angle.FromDegrees(90);
170        Ase.Width = 50;
171        Ase.ProjectileCollision = AmmusOsui;
172       
173        //Add(Ase, 3);
174       
175       
176       
177    }
178
179    void Ammuaseella()
180    {
181        PhysicsObject ammus = Ase.Shoot();
182        //ammus.IgnoresCollisionResponse = true;
183
184        if (ammus != null)
185        {
186           
187            ammus.CollisionIgnoreGroup = 2;
188            ammus.Tag = "ammus";
189           
190            AddCollisionHandler(ammus, "vihu", ammusosuivihuun);
191            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.4);
192        }
193    }
194
195    void LiikutaPelaajaa(Vector vektori)
196    {
197        hahmo.Hit(vektori);
198        Angle aseenkulma = Ase.AbsoluteAngle;
199        if (hahmo.Velocity.Magnitude < 10) return;
200        hahmo.Angle = hahmo.Velocity.Angle;
201        Ase.AbsoluteAngle = aseenkulma;
202    }
203
204    void Tahtaa(AnalogState hiirenLiike)
205    {
206        Vector suunta = (Mouse.PositionOnWorld - Ase.AbsolutePosition);
207        //Ase.Angle = suunta.Angle;
208        Ase.AbsoluteAngle = suunta.Angle;
209    }
210
211    void LuoPalikka(Vector paikka, double leveys, double korkeus)
212    {
213        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
214        palikka.Position = paikka;
215        palikka.KineticFriction = palikka.StaticFriction = 0;
216        palikka.Shape = Shape.Rectangle;
217        palikka.Color = Color.Gray;
218        palikka.Image = palikankuva;
219        palikka.Tag = "palikka";
220        Add(palikka,3);
221
222    }
223    void LuoPeitto(Vector paikka, double leveys, double korkeus)
224    {
225        GameObject palikka = new GameObject(leveys, korkeus);
226        palikka.Position = paikka;
227        palikka.Shape = Shape.Rectangle;
228        palikka.Image = kasvikuva;
229        Add(palikka,-1);
230       
231
232    }
233
234    GameObject maski;
235    protected override void Update(Time time)
236    {
237        if (hahmo != null)
238        maski.Position = hahmo.Position;
239       // Ase.Position = hahmo.Position;
240        //var v = GetObjectsAt(hahmo.Position, hahmo.Width*2);
241        //foreach (var p in v)
242        //{
243        //    if (Vector.Distance(hahmo.Position, p.Position) < (hahmo.Width / 2))
244        //        hahmo.Velocity = Vector.Zero;
245        //}
246        base.Update(time);
247    }
248    void AmmusOsui(PhysicsObject ammus, PhysicsObject palikka)
249    {
250        ammus.Destroy();
251       
252    }
253    void ammusosuivihuun(PhysicsObject ammus, PhysicsObject vihu)
254    {
255          Rajahdys.Play();
256        ammus.Destroy();
257        //int pMaxMaara = 200;
258
259        Explosion e = new Explosion(50);
260        //ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("rajahdys_kuva"), pMaxMaara);
261        e.Position = vihu.Position;
262        Add(e);
263        //double x = 0;
264        //double y = 0;
265        //int pMaara = 50;
266        //rajahdys.AddEffect(vihu.X, vihu.Y, pMaara);
267        vihu.Destroy();
268        pisteLaskuri.Value += 1;
269    }
270
271    class Vihu : PhysicsObject
272    {
273        public Vihu(double width, double height) : base(width, height)
274        {
275            Destroyed += () =>
276            {
277                AmpumisAjastin.Stop();
278            };
279        }
280
281        public Timer AmpumisAjastin;
282    }
283    IntMeter pisteLaskuri;
284
285    void LuoPistelaskuri()
286    {
287        pisteLaskuri = new IntMeter(0);
288
289        Label pisteNaytto = new Label();
290        pisteNaytto.X = Screen.Left + 100;
291        pisteNaytto.Y = Screen.Top - 100;
292        pisteNaytto.TextColor = Color.Black;
293        pisteNaytto.Color = Color.White;
294
295        pisteNaytto.BindTo(pisteLaskuri);
296        Add(pisteNaytto);
297        pisteNaytto.Title = "tankkeja tuhottu";
298
299   }
300   
301
302   
303   
304
305    void ammusosuipelaajaan(PhysicsObject ammus, PhysicsObject hahmo)
306    {
307        ammus.Destroy();
308       
309        elamalaskuri.Value -= 1;
310    }
311    void LuoElamaLaskuri()
312    {
313        elamalaskuri = new DoubleMeter(15);
314        elamalaskuri.MaxValue = 15;
315        elamalaskuri.LowerLimit += ElamaLoppui;
316       
317
318        ProgressBar elamaPalkki = new ProgressBar(300, 40);
319        elamaPalkki.X = Screen.Right -200;
320        elamaPalkki.Y = Screen.Top - 50;
321        elamaPalkki.BindTo(elamalaskuri);
322        Add(elamaPalkki);
323        elamaPalkki.Color = Color.BloodRed;
324       
325        elamaPalkki.BarColor = Color.LightGreen;
326
327        elamaPalkki.BorderColor = Color.Black;
328    }
329    void ElamaLoppui()
330    {
331
332        hahmo.Destroy();
333        topLista.EnterAndShow(pisteLaskuri.Value);
334    }
335
336
337    void loppuvalikko(Window sender = null)
338    {
339       
340        MultiSelectWindow loppuvalikko = new MultiSelectWindow("Valikko !",
341"Uusi peli","Parhaat pisteet ","Lopeta");
342        Add(loppuvalikko);
343        loppuvalikko.AddItemHandler(0, Uusipeli);
344        loppuvalikko.AddItemHandler(1, pisteet);
345        loppuvalikko.AddItemHandler(2, Exit);
346    }
347
348    void pisteet()
349    {
350        topLista.Show();
351    }
352   
353    void Uusipeli()
354    {
355        ClearAll();
356        luokentta();
357        lisaanappaimet();
358    }
359}
360
Note: See TracBrowser for help on using the repository browser.