source: 2015/23/HenriK/dungeoncrawlar/dungeoncrawlar/dungeoncrawlar/dungeoncrawlar.cs @ 5872

Revision 5872, 15.8 KB checked in by sieerinn, 8 years ago (diff)

random huoneen lattia textuuri ja huoneen randomisoinnin aloitus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8class Pelihahmo : PhysicsObject
9{
10    private IntMeter elamaLaskuri;
11    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
12
13    public Pelihahmo(double leveys, double korkeus, int elämät)
14        : base(leveys, korkeus)
15    {
16        elamaLaskuri = new IntMeter(elämät, 0, elämät);
17       
18    }
19}
20
21public class dungeoncrawlar : PhysicsGame
22{
23    PhysicsObject ovi;
24    Pelihahmo player;
25    PhysicsObject ammus;
26    PhysicsObject miekka;
27    PhysicsObject avain;
28    PhysicsObject l96wallbuy;
29    PhysicsObject wallbuymp5;
30    PhysicsObject m1911;
31    PhysicsObject thecharacterpistol;
32    PhysicsObject ase96;
33    PhysicsObject staminup;
34
35    Listener aseNyt;
36    Image[] lattiatext = LoadImages("blackwhitegorund bloody1", "blackwhitegorund bloody2", "blackwhitegorund");
37
38    Image[] ruumisvihu = LoadImages("zombi1","zombi2","zombi3", "zombi4", "zombi5", "zombi6", "zombi7");
39
40    int avaintenLkm;
41    int l96 = 0;
42    int kilpi = 0;
43     
44
45   
46
47    public override void Begin()
48    {
49        SmoothTextures = false;
50        luohuone(1);
51       
52       
53        avaintenLkm = 0;
54       
55
56        //AddCollisionHandler(player, "seina", PelaajaTormaaSeinaan);
57
58        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
59       
60    }
61    void LuoAse96(Vector paikka, double leveys, double korkeus)
62    {
63        ase96 = new PhysicsObject(100, 100);
64        Image c = LoadImage("l96");
65       
66       
67        ase96.Image = c;
68        ase96.Tag = "ase96";
69        Add(ase96);
70
71       
72    }
73    void PoimiAse(PhysicsObject tormaaja, PhysicsObject tormatty)
74    {
75       
76        l96 += 1;
77        aseet();
78    }
79    void luoruumis(Vector paikka,Image kuva)
80    {
81        GameObject ruumis = new GameObject(60*1.5, 60*1.5);
82        ruumis.Image = kuva;
83        ruumis.Position = paikka;
84        Add(ruumis, -1);
85        ruumis.MaximumLifetime = TimeSpan.FromSeconds(200);
86        ruumis.Animation = new Animation(ruumisvihu);
87        ruumis.Animation.FPS = 7;
88        ruumis.Animation.Start();
89    }
90    void Vihu(Vector paikka, double leveys, double korkeus)
91    {
92        arvotext(paikka, leveys, korkeus);
93        Pelihahmo vihu = new Pelihahmo(50, 50, 20);
94        vihu.Position = paikka;
95        vihu.LinearDamping = 0.5;
96        Add(vihu);
97       
98       
99        Image c = LoadImage("zombi");
100        vihu.Shape = Shape.FromImage(c);
101        vihu.Image = c;
102        vihu.ElamaLaskuri.LowerLimit += delegate
103           
104        { 
105            vihu.Destroy();
106            luoruumis(vihu.Position, ruumisvihu[0]);
107        };
108
109        FollowerBrain aivo = new FollowerBrain(player);
110        aivo.Speed = 200;
111        vihu.Brain = aivo;
112        vihu.Tag = "vihu";
113        aivo.TurnWhileMoving = true;
114        AddCollisionHandler(vihu, "player", vahinko);
115
116        Timer ajastin = new Timer();
117        ajastin.Interval = 0.05;
118        ajastin.Timeout += delegate
119        {
120            GameObject väistä = null;
121            double väistöEtäisyys = 10;
122            foreach (GameObject ammus in GetObjectsWithTag("ammus"))
123            {
124                double etäisyys = Vector.Distance(ammus.Position, vihu.Position);
125                if (Vector.Distance(ammus.Position, vihu.Position) < väistöEtäisyys)
126                {
127                    väistöEtäisyys = etäisyys;
128                    väistä = ammus;
129                }
130            }
131
132            if (väistä != null)
133            {
134                vihu.Brain = null;
135                vihu.Push((vihu.Position - väistä.Position) * 500);
136            }
137            else
138            {
139                vihu.Brain = aivo;
140            }
141        };
142        ajastin.Start();
143    }
144   
145    void aseet()
146    {
147
148        if (l96 > 0)
149        {
150            Keyboard.Listen(Key.D1, ButtonState.Pressed, aseenVaihto, "aseen vaihto", 1);
151        }   
152           
153       
154        Keyboard.Listen(Key.D2, ButtonState.Pressed, aseenVaihto, "aseen vaihto", 2);
155        Keyboard.Listen(Key.D3, ButtonState.Pressed, aseenVaihto, "aseen vaihto", 3);
156        Keyboard.Listen(Key.D4, ButtonState.Pressed, aseenVaihto, "aseen vaihto", 4);
157
158       
159       
160    }
161    void aseenVaihto(int ase)
162    {
163        if (aseNyt != null)
164        {
165            aseNyt.Destroy();
166        }
167       
168        switch (ase)
169        {
170            case 1:         
171                aseNyt = Mouse.Listen(MouseButton.Left, ButtonState.Pressed, ammu, "pum pum");
172                break;
173            case 2:
174                aseNyt = Mouse.Listen(MouseButton.Left, ButtonState.Pressed, lyö, "pum pum");
175                break;
176            case 3:
177                aseNyt = Mouse.Listen(MouseButton.Left, ButtonState.Down, block, "pum pum");
178                break;
179            case 4:
180                aseNyt = Mouse.Listen(MouseButton.Left, ButtonState.Pressed, ammupistol, "pum pum");
181                break;
182        }   
183    }
184    void block()
185    {     
186        Image c = LoadImage("characterovi");
187        player.Shape = Shape.FromImage(c);
188        player.Image = c;
189
190        ammus = new PhysicsObject(10.0, 100.0);
191        ammus.Shape = Shape.Rectangle;
192        ammus.Color = Color.Gray;
193        ammus.Position = player.Position + Vector.FromLengthAndAngle(40, player.Angle);
194        ammus.CollisionIgnoreGroup = 2;
195        ammus.Angle = player.Angle;
196        Add(ammus);
197        ammus.Tag = "ammus";
198        ammus.IsVisible = false;
199       
200        //ammus.Hit(impulssi);
201        ammus.MaximumLifetime = new TimeSpan(20000);
202
203    }
204    void lyö()
205    {
206        Image c = LoadImage("charactersword");
207        player.Shape = Shape.FromImage(c);
208        player.Image = c;
209
210        miekka = new PhysicsObject(50.0, 5.0);
211        miekka.Shape = Shape.Circle;
212        miekka.Color = Color.Gray;
213        Image y = LoadImage("sword");
214        miekka.Image = y;
215        miekka.Position = player.Position + (player.Angle + Angle.FromDegrees(90)).GetVector()*-20 + player.Angle.GetVector()*10;
216        miekka.CollisionIgnoreGroup = 1;
217        miekka.Angle = player.Angle + Angle.FromDegrees(45);
218       
219        Add(miekka);
220        Vector impulssi = Vector.FromLengthAndAngle(50, player.Angle + Angle.FromDegrees(45));
221        miekka.Hit(impulssi);
222        miekka.MaximumLifetime = new TimeSpan(2000000);
223        AddCollisionHandler(miekka, "vihu", vahinko);
224
225    }
226    void ammu()
227    {
228       
229        Image c = LoadImage("characterl96");
230        player.Shape = Shape.FromImage(c);
231        player.Image = c;
232       
233       
234
235        ammus = new PhysicsObject(5.0, 5.0);
236        ammus.Shape = Shape.Circle;
237        ammus.Color = Color.Gold;
238        ammus.Position = player.Position;
239        ammus.CollisionIgnoreGroup = 1;
240        Image d = LoadImage("bullet");
241        ammus.Shape = Shape.FromImage(d);
242        ammus.Image = d;
243        ammus.Angle = player.Angle;
244        ammus.Tag = "ammus";
245        Add(ammus);
246
247        Vector impulssi = Vector.FromLengthAndAngle(2500, player.Angle);
248        ammus.Hit(impulssi);
249        ammus.MaximumLifetime = new TimeSpan(20000000);
250
251        AddCollisionHandler(ammus, "vihu", vahinko);
252       
253    }
254    void ammupistol()
255    {
256
257        Image i = LoadImage("thecharacterpistol");
258        player.Shape = Shape.FromImage(i);
259        player.Image = i;
260
261
262
263        ammus = new PhysicsObject(10.0, 10.0);
264        ammus.Shape = Shape.Circle;
265        ammus.Color = Color.Gold;
266        ammus.Position = player.Position;
267        ammus.CollisionIgnoreGroup = 1;
268        Image d = LoadImage("bullet");
269        ammus.Shape = Shape.FromImage(d);
270        ammus.Image = d;
271        ammus.Angle = player.Angle;
272        ammus.Tag = "ammus";
273        Add(ammus);
274
275        Vector impulssi = Vector.FromLengthAndAngle(2500, player.Angle);
276        ammus.Hit(impulssi);
277        ammus.MaximumLifetime = new TimeSpan(20000000);
278        AddCollisionHandler(ammus, "vihu", vahinko);
279
280    }
281    void vahinko(PhysicsObject ammus,PhysicsObject vihu  )
282    {
283        Pelihahmo hahmo = vihu as Pelihahmo;
284        if(hahmo != null)
285        {
286            hahmo.ElamaLaskuri.Value -= 10;
287        }
288
289    }
290
291    void luohuone(int huoneNumero)
292    {
293        Window.Width = 800;
294        Window.Height = 800;
295        Camera.Zoom(0.5);
296
297       
298        //Level.Background.Image = lattiatext[0];
299        //Level.Background.TileToLevel();
300
301       
302       
303       
304        TileMap ruudut = TileMap.FromLevelAsset("huone" + huoneNumero);
305        TileMap ruudut2 = TileMap.FromLevelAsset("huone" + huoneNumero);
306
307       
308           
309       
310        //3. Execute luo kentän
311        //   Parametreina leveys ja korkeus
312       
313       
314        ruudut.SetTileMethod('p', LuoPelaaja);
315        ruudut.SetTileMethod('w', LuoTaso);
316        ruudut.SetTileMethod('k', LuoOvi, Angle.FromDegrees(180));
317        ruudut.SetTileMethod('u', LuoOvi, Angle.FromDegrees(180));
318        ruudut.SetTileMethod('h', LuoOvi, Angle.FromDegrees(180));
319        ruudut.SetTileMethod('m', LuoOvi, Angle.FromDegrees(180));
320        ruudut.SetTileMethod('r', luoAvain);
321        ruudut.SetTileMethod('t', LuoL96wallbuy);
322        ruudut.SetTileMethod('y', luowallbuymp5);
323        //ruudut.SetTileMethod('i', luom1911);
324        ruudut.SetTileMethod('s', Staminup);
325        ruudut.SetTileMethod('_', arvotext);
326
327        ruudut.SetTileMethod('a', LuoAse96);
328        ruudut2.SetTileMethod('v', Vihu);
329        ruudut.Execute(64, 64);
330        ruudut2.Execute(64, 64);
331        Random r = new Random(345356346);
332        r.NextDouble();
333        r.NextDouble();
334
335        Camera.StayInLevel = true;
336        näppäimet();
337        aseet();
338        avaintenLkm = 0;
339       
340       
341       
342
343    }
344   
345    void AvaintenKerays(PhysicsObject tormaaja, PhysicsObject tormatty)
346    {
347       /*witch(kohde)
348        {
349            case "avain":
350                avaintenLkm += 1;
351                tormatty.Destroy();
352
353                break;
354            default:
355                break;
356        }*/
357
358        avaintenLkm++;
359        tormatty.Destroy();
360           
361    }
362
363    void arvotext(Vector paikka, double leveys, double korkeus)
364    {
365        GameObject taso = new GameObject(leveys, korkeus);
366        taso.Position = paikka;
367        //taso.CollisionIgnoreGroup = 1;
368        if (RandomGen.NextDouble(0, 100) < 95)
369        {
370            taso.Image = lattiatext[2];
371        }
372        else
373        {
374            int x = RandomGen.NextInt(2);
375            taso.Image = lattiatext[x];
376        }
377
378
379
380
381       
382        Add(taso, -2);
383    }
384    void LuoTaso(Vector paikka, double leveys, double korkeus)
385    {
386        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
387        taso.Position = paikka; 
388        //taso.CollisionIgnoreGroup = 1;
389        taso.Color = Color.Gray;
390        Image a = LoadImage("wall");
391       
392        taso.Image = a;
393        Add(taso);
394    }
395    void luoAvain(Vector paikka, double leveys, double korkeus)
396    {
397        arvotext(paikka, leveys, korkeus);
398        if (RandomGen.NextDouble(0, 100) < 80)
399        {
400            avain = new PhysicsObject(50, 50);
401            Image c = LoadImage("gaykey");
402
403            avain.Image = c;
404            avain.Position = paikka;
405            avain.Tag = "avain";
406            Add(avain);
407        }
408       
409
410
411        //delegate(PhysicsObject a, PhysicsObject b) {kerays(a, b, "avain");}
412    }
413    void OvenAvaus(PhysicsObject tormaaja, PhysicsObject ovi)
414    {
415        if (Keyboard.GetKeyState(Key.E)==ButtonState.Down)
416        {
417            ClearAll();
418            luohuone(2);
419
420
421        }
422    }
423    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
424    {
425        arvotext(paikka, leveys, korkeus);
426        player = new Pelihahmo(45, 50, 10);
427        Image c = LoadImage("thecharacter");
428        player.Shape = Shape.FromImage(c);
429        player.Image = c;
430        player.ElamaLaskuri.LowerLimit += delegate
431        {
432            player.Destroy();
433            luoruumis(player.Position, ruumisvihu[0]);
434        };
435       
436        //player.
437     
438        player.Position = paikka;
439        player.LinearDamping = 0.6;
440        player.AngularDamping = 0.6;
441        player.CollisionIgnoreGroup = 1;
442       
443        player.MaxAngularVelocity = 8000.0;
444        player.Color = Color.Brown;
445        player.Mass = 1;
446        Add(player);
447        player.Tag="player";
448        AddCollisionHandler(player, "avain", AvaintenKerays);
449        AddCollisionHandler(player, "ovi", OvenAvaus);
450        AddCollisionHandler(player, "l96wallbuy", PoimiAse);
451       
452
453       
454       
455       
456
457        //player.CollisionIgnoreGroup = 1;
458        Camera.Follow(player);
459    }
460    void näppäimet()
461    {
462        //Keyboard.Listen(Key.W, ButtonState.Down, liike, "liiku", Vector.FromLengthAndAngle(1500, player.Angle));
463        //Keyboard.Listen(Key.S, ButtonState.Down, liike, "liiku", Vector.FromLengthAndAngle(-500, player.Angle));
464        //Keyboard.Listen(Key.D, ButtonState.Down, liike, "liiku", Vector.FromLengthAndAngle(-1000, player.Angle + Angle.FromDegrees(90)));
465        //Keyboard.Listen(Key.A, ButtonState.Down, liike, "liiku", Vector.FromLengthAndAngle(1000, player.Angle + Angle.FromDegrees(90)));
466
467        Keyboard.Listen(Key.W, ButtonState.Down, liike, "liiku", new Vector(0, 500));
468        Keyboard.Listen(Key.S, ButtonState.Down, liike, "liiku", new Vector(0, -250));
469        Keyboard.Listen(Key.D, ButtonState.Down, liike, "liiku", new Vector(500, 0));
470        Keyboard.Listen(Key.A, ButtonState.Down, liike, "liiku", new Vector(-500, 0));
471
472        Mouse.IsCursorVisible = true;
473        Mouse.ListenMovement(0.0, kaanny, "");
474       
475        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
476    }
477    void kaanny(AnalogState hiirenLiike)
478    {
479        Vector suunta = Mouse.PositionOnWorld - player.AbsolutePosition;
480
481        if (suunta.Magnitude != 0)
482        {
483            suunta.Normalize();
484            player.Angle = suunta.Angle;
485        }
486    }
487    void liike(Vector vektori)
488    {
489        player.Move((player.Angle + vektori.Angle + Angle.FromDegrees(-90)).GetVector() * vektori.Magnitude);
490    }
491
492    void LuoOvi(Vector paikka, double leveys, double korkeus, Angle Kulma)
493    {
494        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
495        ovi.Position = paikka;
496        Image c = LoadImage("door");
497       
498        ovi.Image = c;
499        ovi.Tag = "ovi";
500       
501
502       
503        Add(ovi);
504
505    }
506    void LuoL96wallbuy(Vector paikka, double leveys, double korkeus)
507    {
508        PhysicsObject l96wallbuy = PhysicsObject.CreateStaticObject(leveys, korkeus);
509        l96wallbuy.Position = paikka;
510        Image t = LoadImage("l96wallbuy");
511
512        l96wallbuy.Image = t;
513        l96wallbuy.Tag = "l96wallbuy";
514
515
516
517        Add(l96wallbuy);
518       
519
520
521    }
522    void luowallbuymp5(Vector paikka, double leveys, double korkeus)
523    {
524        PhysicsObject wallbuymp5 = PhysicsObject.CreateStaticObject(leveys, korkeus);
525        wallbuymp5.Position = paikka;
526        Image y = LoadImage("wallbuymp5");
527
528        wallbuymp5.Image = y;
529        wallbuymp5.Tag = "wallbuymp5";
530
531
532
533        Add(wallbuymp5);
534
535
536    }
537    void Staminup(Vector paikka, double leveys, double korkeus)
538    {
539        arvotext(paikka, leveys, korkeus);
540        PhysicsObject staminup = PhysicsObject.CreateStaticObject(leveys, korkeus);
541        staminup.Position = paikka;
542        Image s = LoadImage("staminup");
543
544        staminup.Image = s;
545        staminup.Tag = "staminup";
546
547
548        Add(staminup);
549
550
551    }
552
553}
Note: See TracBrowser for help on using the repository browser.