source: 2017/31/JohannesL/dodh2/dodh2/dodh2/dodh2.cs @ 9381

Revision 9381, 8.3 KB checked in by npo17_87, 6 years ago (diff)

2 tekoälyä ja monkas naamoja

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class dodh2 : PhysicsGame
10{
11    const double nopeus = 100;
12    const double hyppyNopeus = 700;
13    const int RUUDUN_KOKO = 10;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("snoopgas");
18    Image tahtiKuva = LoadImage("monkas");
19    Image vihaajakuva = LoadImage("vihaa");
20    Image rajahdyskuva = LoadImage("vihaa");
21    Image vihaaja2kuva = LoadImage("toinenmonk");
22    Image rajahdys2kuva = LoadImage("toinenmonk");
23
24    SoundEffect maaliAani = LoadSoundEffect("maali");
25
26    bool saakoRajahtaa = true;
27    bool saako2Rajahtaa = true;
28
29    public override void Begin()
30    {
31        Gravity = new Vector(0.0, -1400.0);
32
33       
34        LuoKentta();
35        LisaaNappaimet();
36        LuoAikaLaskuri();
37        vihaaja();
38        vihaaja2();
39        valikko();
40
41
42
43
44
45
46        Camera.Follow(pelaaja1);
47        Camera.ZoomFactor = 1.5;
48        Camera.StayInLevel = true;
49 
50    }
51
52    void LuoKentta()
53    {
54        TileMap kentta = TileMap.FromLevelAsset("kentta1");
55        kentta.SetTileMethod('#', LisaaTaso);
56        kentta.SetTileMethod('*', LisaaTahti);
57        kentta.SetTileMethod('N', LisaaPelaaja);
58        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
59        Level.CreateBorders();
60        Level.Background.CreateGradient(Color.Wheat, Color.ForestGreen);
61    }
62
63    void LisaaTaso (Vector paikka, double leveys, double korkeus)
64    {
65        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
66        taso.Position = paikka;
67        taso.Color = Color.Green;
68        Add(taso);
69    }
70
71    void LisaaTahti(Vector paikka, double leveys, double korkeus)
72    {
73        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
74        tahti.IgnoresCollisionResponse = true;
75        tahti.Position = paikka;
76        tahti.Image = tahtiKuva;
77        tahti.Tag = "tahti";
78
79
80
81
82        Add(tahti);
83    }
84
85    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
86    {
87        pelaaja1 = new PlatformCharacter(leveys, korkeus);
88        pelaaja1.Position = paikka;
89        pelaaja1.Mass = 4.0;
90        pelaaja1.Image = pelaajanKuva;
91        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
92        pelaaja1.Weapon = new AssaultRifle(10, 10);
93        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
94        Add(pelaaja1);
95    }
96
97    void LisaaNappaimet()
98    {
99        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101
102        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
103        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
104        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
105
106        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
107
108        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
109        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
110        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
111        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
112
113        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
114    }
115
116    void Liikuta(PlatformCharacter hahmo, double nopeus)
117    {
118        pelaaja1.Walk(nopeus);
119    }
120
121    void Hyppaa(PlatformCharacter hahmo, double nopeus)
122    {
123        pelaaja1.Jump(nopeus);
124    }
125
126    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
127    {
128        maaliAani.Play();
129        MessageDisplay.Add("Kerätty!");
130        tahti.Destroy();
131    }
132    void LuoAikaLaskuri()
133    {
134        Timer aikaLaskuri = new Timer();
135        aikaLaskuri.Start();
136
137        Label aikaNaytto = new Label();
138        aikaNaytto.TextColor = Color.Black;
139        aikaNaytto.DecimalPlaces = 1;
140        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
141        Add(aikaNaytto);
142        aikaNaytto.X = 700.0;
143        aikaNaytto.Y = 450.0;
144    }
145    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
146    {
147        //ammus.Destroy();
148    }
149    void AmmuAseella(PlatformCharacter pelaaja)
150    {
151        PhysicsObject ammus = pelaaja.Weapon.Shoot();
152
153        if (ammus != null)
154        {
155            ammus.Size *= 0.5;
156            //ammus.Image =()
157            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
158
159        }
160
161
162    }
163    void vihaaja()
164    {
165        PhysicsObject vihaajaa = new PhysicsObject(20, 20);
166        vihaajaa.Shape = Shape.Rectangle;
167        vihaajaa.Mass = 10.0;
168        vihaajaa.Image = vihaajakuva;
169       
170        Add(vihaajaa);
171        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
172
173        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
174        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
175        seuraajanAivot.DistanceClose = 50;         // Etäisyys jolloin ollaan lähellä kohdetta
176        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
177        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
178       
179        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
180        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
181        vihaajaa.Brain = seuraajanAivot;
182    }
183
184    void mitaTapahtuuKunOllaanLahella()
185    {
186        if (!saakoRajahtaa) return;
187        saakoRajahtaa = false;
188        Timer.SingleShot(5, () => { saakoRajahtaa = true; });
189
190        Explosion rajahdys = new Explosion(50);
191        rajahdys.Image = rajahdyskuva;   
192        rajahdys.Position = pelaaja1.Position;
193        rajahdys.Speed = 100;
194        rajahdys.Force = 5000;
195        Add(rajahdys);
196       
197    }
198    void vihaaja2()
199    {
200        PhysicsObject vihaaja2 = new PhysicsObject(5, 5);
201        vihaaja2.X = -100;
202        vihaaja2.Y = 100;
203        vihaaja2.Shape = Shape.Rectangle;
204        vihaaja2.Mass = 10.0;
205        vihaaja2.Image = vihaaja2kuva;
206
207        Add(vihaaja2);
208        FollowerBrain seuraajan2Aivot = new FollowerBrain(pelaaja1);
209
210        seuraajan2Aivot.Speed = 30;                 // Millä nopeudella kohdetta seurataan
211        seuraajan2Aivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
212        seuraajan2Aivot.DistanceClose = 150;         // Etäisyys jolloin ollaan lähellä kohdetta
213        seuraajan2Aivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
214                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
215
216        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
217        seuraajan2Aivot.TargetClose += mitaKunOllaanLahella;
218        vihaaja2.Brain = seuraajan2Aivot;
219    }
220
221    void mitaKunOllaanLahella()
222    {
223        if (!saako2Rajahtaa) return;
224        saako2Rajahtaa = false;
225        Timer.SingleShot(15, () => { saako2Rajahtaa = true; });
226
227        Explosion rajahdys = new Explosion(150);
228        rajahdys.Image = rajahdys2kuva;
229        rajahdys.Position = pelaaja1.Position;
230        rajahdys.Speed = 15;
231        rajahdys.Force = 5000;
232        Add(rajahdys);
233
234    }
235    void valikko()
236    {
237        ClearAll();
238
239        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
240"Aloita peli", "Lopeta");
241        Add(alkuValikko);
242
243
244        alkuValikko.AddItemHandler(0, alotapeli);
245        alkuValikko.AddItemHandler(1, Exit);
246        alkuValikko.Color = Color.ForestGreen;
247       
248    }
249    void alotapeli()
250    {
251        LuoKentta();
252        LisaaNappaimet();
253        LuoAikaLaskuri();
254        vihaaja();
255        vihaaja2();
256        Gravity = new Vector(0.0, -1400.0);
257
258
259        Camera.Follow(pelaaja1);
260        Camera.ZoomFactor = 1.5;
261        Camera.StayInLevel = true;
262
263
264    }
265}
Note: See TracBrowser for help on using the repository browser.