source: 2017/30/JouniP/Syomispeli/Syomispeli/Syomispeli/Syomispeli.cs @ 9110

Revision 9110, 5.8 KB checked in by nupeohje, 2 years ago (diff)

Seuraaja-aivot vihollisille

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Syomispeli : PhysicsGame
10{
11    PhysicsObject pelaaja1;
12
13    Image pahiksenNollailukuva = LoadImage("pahisnollailee");
14    Image pahiksenVihaisuuskuva = LoadImage("pahisvihaisena");
15
16    public override void Begin()
17    {
18
19        LisaaPelaaja1();
20        LisaaOhjaimet();
21
22        LisaaKaikkiViholliset();
23
24
25        LuoKentta();
26
27        //LuoPongmaila(200.0, 0.0);
28       
29       
30    }
31
32    void LisaaKaikkiViholliset()
33    {
34        //LisaaPahis(100.0, 0.0);
35        //LisaaPahis(-100.0, 0.0);
36        //LisaaPahis(0.0, 200.0);
37
38        for (int i = 0; i < 3; i++)
39        {
40            LisaaPahis(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
41        }
42    }
43
44    void LisaaPahis(double x, double y)
45    {
46        PhysicsObject pahis = new PhysicsObject(40.0, 40.0);
47        pahis.X = x;
48        pahis.Y = y;
49        pahis.CanRotate = false;
50        pahis.Image = pahiksenNollailukuva;
51        pahis.Tag = "ilkee tyyppi";
52        Add(pahis);
53
54        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
55        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
56        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
57        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
58        //seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
59        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
60
61        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
62        seuraajanAivot.TargetClose += delegate {
63           
64            // Asetetaan vihaiseksi:
65            pahis.Image = pahiksenVihaisuuskuva;
66
67            // Asettaa hetken kuluttua normaalin kuvan:
68            //Timer.SingleShot(1.0, delegate { pahis.Image = pahiksenNollailukuva; });
69
70        };
71       
72        seuraajanAivot.Active = true;
73        pahis.Brain = seuraajanAivot;
74    }
75
76    void LuoKentta()
77    {
78        Level.CreateBorders();
79        Level.Background.CreateGradient(Color.Black, Color.Gray);
80        LisaaRuokapalat();
81
82        //LuoOlio(Shape.Diamond, Color.Blue, 0.0, 0.0);
83        //LuoOlio(Shape.Circle, Color.White, 100.0, 20.0);
84        //LuoOlio(Shape.Rectangle, Color.Brown, 50.0, 150.0);
85
86        //LuoPallo(Color.White, 50.0, 47.8);
87        //LuoPallo(Color.Yellow, 30.0, 30.0);
88        //LuoPallo(Color.Yellow, 70.0, 80.0);
89
90    }
91
92    void LisaaPelaaja1()
93    {
94        pelaaja1 = new PhysicsObject(40.0, 40.0);
95        pelaaja1.CanRotate = false;
96        Add(pelaaja1);
97
98        AddCollisionHandler(pelaaja1, "ruoka", PelaajaKasvaaIsommaksi);
99        AddCollisionHandler(pelaaja1, "ilkee tyyppi", PelaajaTormasiViholliseen);
100    }
101
102    void LisaaRuokapalat()
103    {
104        //LuoSyotavaJuttu(10.0, 10.0);
105        //LuoSyotavaJuttu(90.0, 90.0);
106        //LuoSyotavaJuttu(100.0, 340.0);
107        //LuoSyotavaJuttu(300.0, 390.0);
108        //LuoSyotavaJuttu(200.0, 10.0);
109        //LuoSyotavaJuttu(-200.0, 90.0);
110
111        for (int i = 0; i < 50; i++)
112        {
113            double xKoordinaatti = RandomGen.NextDouble(Level.Left, Level.Right);
114            double yKoordinaatti = RandomGen.NextDouble(Level.Bottom, Level.Top);
115            LuoSyotavaJuttu(xKoordinaatti, yKoordinaatti);
116
117        }
118
119
120    }
121
122    void LisaaOhjaimet()
123    {
124        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000.0, 0.0));
125        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000.0, 0.0));
126        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0.0, 1000.0));
127        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0.0, -1000.0));
128
129        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
130    }
131
132    void LiikutaPelaajaa(Vector vektori)
133    {
134        pelaaja1.Push(vektori);
135    }
136
137    void PelaajaKasvaaIsommaksi(PhysicsObject pelaajaJokaTormasi, PhysicsObject tormayksenKohde)
138    {
139        pelaajaJokaTormasi.Width = pelaajaJokaTormasi.Width + 10.0;
140        pelaajaJokaTormasi.Height = pelaajaJokaTormasi.Height + 10.0;
141
142        tormayksenKohde.Destroy();
143    }
144
145    void PelaajaTormasiViholliseen(PhysicsObject pelaajaJokaTormasi, PhysicsObject vihuJohonTormattiin)
146    {
147        if (pelaajaJokaTormasi.Width - 10.0 <= 0.0 || pelaajaJokaTormasi.Height - 10.0 <= 0.0)
148        {
149            return;
150        }
151        pelaajaJokaTormasi.Width -= 10.0;
152        pelaajaJokaTormasi.Height -= 10.0;
153    }
154    void LuoOlio(Shape muoto, Color vari, double x, double y, double leveys = 40.0, double korkeus = 40.0)
155    {
156        PhysicsObject otus = new PhysicsObject(leveys, korkeus);
157        otus.Shape = muoto;
158        otus.Color = vari;
159        otus.X = x;
160        otus.Y = y;
161        Add(otus);
162    }
163
164    void LuoPallo(Color vari, double x, double y)
165    {
166        LuoOlio(Shape.Circle, vari, x, y);
167    }
168
169    void LuoSyotavaJuttu(double x, double y)
170    {
171        //LuoOlio(Shape.Circle, Color.Yellow, x, y, 10.0, 10.0);
172
173        PhysicsObject syotava = new PhysicsObject(10.0, 10.0);
174        syotava.Shape = Shape.Circle;
175        syotava.Color = Color.Yellow;
176        syotava.X = x;
177        syotava.Y = y;
178        Add(syotava);
179        syotava.Tag = "ruoka";
180
181    }
182
183    void LuoPongmaila(double x, double y)
184    {
185        //PhysicsObject maila = new PhysicsObject(20.0, 80.0);
186        //maila.X = x;
187        //maila.Y = y;
188        //Add(maila);
189
190        LuoOlio(Shape.Rectangle, Color.White, x, y, 20.0, 80.0);
191    }
192}
Note: See TracBrowser for help on using the repository browser.