source: 2015/24/OttoK/Grand Theft Norsu II/Grand Theft Norsu II/Grand Theft Norsu II/Grand_Theft_Norsu_II.cs @ 5987

Revision 5987, 11.4 KB checked in by otoskinn, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Grand_Theft_Norsu_II : PhysicsGame
10{
11   
12    Image kaupunkitausta = LoadImage("kaupunkitausta");
13   
14    double nopeus = 750;
15    const double hyppyNopeus = 1000;
16    const int RUUDUN_KOKO = 42;
17    DoubleMeter zoomaus = new DoubleMeter(1.0, 0.5, 4.0);
18    //GameObject tahtain;
19
20    PlatformCharacter pelaaja1;
21
22    Image pelaajanKuva = LoadImage("norsu");
23    Image tahtiKuva = LoadImage("tahti");
24    Image auto1kuva = LoadImage("auto1kuva");
25    Image kursorinkuva = LoadImage("kursori1");
26    Image panoksenkuba = LoadImage("panos");
27    Image liekinkuva = LoadImage("liekki");
28    Image rajahdys_kuva = LoadImage("rajahdys_kuva");
29
30    double hyppykerroin = 1.0;
31    AssaultRifle pelaajan1Ase;
32
33    ExplosionSystem rajahdys;
34
35
36    SoundEffect maaliAani = LoadSoundEffect("maali");
37
38    bool Autossa = false;
39
40    public override void Begin()
41    {
42        IsFullScreen = false;
43        SetWindowSize(1024, 768, true); 
44        Gravity = new Vector(0, -1000);
45       
46
47
48        Mouse.IsCursorVisible = true;
49        Vector paikkaRuudulla = Mouse.PositionOnScreen;
50        Vector paikkaKentalla = Mouse.PositionOnWorld;
51       // tahtain = new GameObject(50, 50);
52        //Add(tahtain);
53
54        LuoKentta();
55        LisaaNappaimet();
56
57        Camera.Follow(pelaaja1);
58        Camera.ZoomFactor = 1.2;
59        Camera.StayInLevel = false;
60    }
61
62    void LuoKentta()
63    {
64        TileMap kentta = TileMap.FromLevelAsset("kentta1");
65        kentta.SetTileMethod('#', LisaaTaso);
66        kentta.SetTileMethod('*', LisaaTahti);
67        kentta.SetTileMethod('N', LisaaPelaaja);
68        kentta.SetTileMethod('A', LuoAuto);
69        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
70        Level.CreateBorders();
71        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
72        Level.Background.Image = kaupunkitausta;
73
74        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
75        "Aloita peli","Lopeta");
76        Add(alkuValikko);
77
78        int pMaxMaara = 200;
79        rajahdys = new ExplosionSystem(LoadImage("rajahdys_kuva"), pMaxMaara);
80        Add(rajahdys);
81       
82    }
83
84    void LisaaTaso(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
87        taso.Position = paikka;
88        taso.Color = Color.Green;
89        taso.IgnoresExplosions = true;
90        Add(taso);
91    }
92
93    void LisaaTahti(Vector paikka, double leveys, double korkeus)
94    {
95        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
96        tahti.IgnoresCollisionResponse = true;
97        tahti.Position = paikka;
98        tahti.Image = tahtiKuva;
99        tahti.Tag = "tahti";
100        Add(tahti);
101    }
102
103    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
104    {
105        pelaaja1 = new PlatformCharacter(leveys, korkeus);
106        pelaaja1.Position = paikka;
107        pelaaja1.Mass = 4.0;
108        pelaaja1.Image = pelaajanKuva;
109        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
110        pelaajan1Ase = new AssaultRifle(30, 10);
111
112        //Ammusten määrä aluksi:
113        pelaajan1Ase.Ammo.Value = 1000;
114
115        //Mitä tapahtuu kun ammus osuu johonkin?
116        pelaajan1Ase.ProjectileCollision = AmmusOsui;
117
118        pelaaja1.Add(pelaajan1Ase);
119        Add(pelaaja1);
120     
121
122
123       
124    }
125    void MeneAutoon(PhysicsObject auto)
126    {
127        pelaaja1.Image = auto1kuva;
128        //pelaaja1.Shape = Shape.FromImage(auto1kuva);
129
130        pelaaja1.Position = auto.Position;
131        pelaaja1.Size = auto.Size;
132        auto.Destroy();
133
134        Autossa = true;
135       
136    }
137
138
139
140
141    void LisaaNappaimet()
142    {
143       
144        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
145        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
146
147        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
148        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
149        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
150        Keyboard.Listen(Key.Enter, ButtonState.Down, AvaaKirjoitusIkkuna, "Avaa kirjoitusikkunan");
151        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, AsetaHyppykerroin, "Korkeampi hyppy", 1.5);
152        Keyboard.Listen(Key.LeftControl, ButtonState.Released, AsetaHyppykerroin, null, 1.0);
153        //Mouse.Listen(MouseButton.Left, ButtonState.Pressed, TarkistaHiirenPainallus, "Objektin kohdalla toiminto");
154        Keyboard.Listen(Key.F, ButtonState.Pressed, UlosAutosta, "Mene ulos autosta");
155        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
156        Keyboard.Listen(Key.E, ButtonState.Pressed, HeitaKranaatti, "Heita kranaatti", pelaaja1); 
157
158    //ammus.Destroy();
159
160
161        Mouse.ListenWheel(ZoomaaKenttaa, "");
162        Mouse.ListenMovement(0.0, TahtaaAseella, "");
163        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
164        //kranaatti.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
165
166        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
167
168        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
169        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
170        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
171        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 2.0,
172        LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
173        Vector tatinAsento = ControllerOne.LeftThumbDirection;
174
175        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
176    }
177       
178    void Liikuta(PlatformCharacter hahmo, double nopeus)
179    {
180        hahmo.Walk(nopeus);
181    }
182
183    void Hyppaa(PlatformCharacter hahmo, double nopeus)
184    {
185        hahmo.Jump(nopeus*hyppykerroin);
186    }
187
188    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
189    {
190        maaliAani.Play();
191        MessageDisplay.Add("Keräsit tähden!");
192        tahti.Destroy();
193    }
194    void LiikutaPelaajaa(AnalogState tatinTila)
195    {
196        Vector tatinAsento = tatinTila.StateVector;
197    }
198    void TarkistaHiirenPainallus()
199    { 
200
201    }
202    void LuoAuto(Vector paikka, double leveys, double korkeus)
203    {
204        PhysicsObject auto1 = new PhysicsObject(auto1kuva);
205        auto1.Shape = Shape.FromImage(auto1kuva);
206        auto1.Position = paikka+ new Vector(0, 40);
207        auto1.Image = auto1kuva;
208        auto1.Tag = "auto";
209        auto1.Mass = 350;
210        Add(auto1);
211
212        Mouse.ListenOn(auto1, MouseButton.Left, ButtonState.Pressed, () => MeneAutoon(auto1),"Mene Autoon");
213
214    }
215    void AvaaKirjoitusIkkuna()
216    {
217        InputWindow kysymysIkkuna = new InputWindow("Kirjoita  koodi");
218        kysymysIkkuna.TextEntered += ProcessInput;
219        Add(kysymysIkkuna);
220
221    }
222    void ProcessInput(InputWindow ikkuna)
223    {
224        string vastaus = ikkuna.InputBox.Text;
225
226        if (vastaus == "/gravity0")
227        {
228            Gravity = new Vector(0, 0);
229        }
230        else if (vastaus == "/gravity1")
231        {
232            Gravity = new Vector(0, -1000);
233        }
234        else if (vastaus == "/createcar")
235        {
236            LuoAuto(pelaaja1.Position, 0, 0);
237        }
238        else if (vastaus == "/canrotate")
239        {
240            pelaaja1.CanRotate = true;
241
242        }
243        else if (vastaus == "/cantrotate")
244        {
245            pelaaja1.CanRotate = false;
246        }
247        else if (vastaus == "/superspeed")
248        {
249            nopeus = 1500;
250            PoistaNappaimet();
251            LisaaNappaimet();
252        }
253        else if (vastaus == "/normalspeed")
254        {
255            nopeus = 750;
256            PoistaNappaimet();
257            LisaaNappaimet();
258        }
259        else if (vastaus == "/showcodes")
260        {
261            MessageDisplay.Add("/gravity0, /gravity1, /createcar, /canrotate, /cantrotate, /superspeed, /normalspeed.");
262        }
263
264       
265    }
266    void AsetaHyppykerroin(double haluttukerroin)
267    {
268        hyppykerroin = haluttukerroin;
269    }
270    void UlosAutosta()
271    {
272        if (Autossa == true)
273        {
274
275            pelaaja1.Image = pelaajanKuva;
276            pelaaja1.Size = new Vector(RUUDUN_KOKO, RUUDUN_KOKO);
277            LuoAuto(pelaaja1.Position, 0, 0);
278            Autossa = false;
279        }
280
281    }
282    void LuoSlider()
283    {
284        IntMeter zoomausKerroin = new IntMeter(0, 0, 5);
285        //zoomausKerroin.Changed += ZoomaaKenttaa;
286
287        Slider liukusaadin = new Slider(200, 50);
288        liukusaadin.BindTo(zoomausKerroin);
289        liukusaadin.X = Screen.LeftSafe + 200;
290        liukusaadin.Y = Screen.TopSafe - 40;
291
292        liukusaadin.Color = Color.Pink;
293        liukusaadin.Knob.Color = Color.Black;
294        liukusaadin.Track.Color = Color.Blue;
295        liukusaadin.BorderColor = Color.Red;
296        Add(liukusaadin);
297    }
298
299    void ZoomaaKenttaa()
300    {
301        zoomaus.Value += Mouse.WheelChange*0.5;
302        Camera.ZoomFactor = zoomaus.Value;
303    }
304    void PoistaNappaimet()
305    {
306        Keyboard.Clear();
307
308    }
309    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
310    {
311        ammus.Destroy();
312   
313    }
314   
315    void AmmuAseella(AssaultRifle ase)
316    {
317        PhysicsObject ammus = ase.Shoot();
318
319        if(ammus != null)
320        {
321            AddCollisionHandler(ammus, "auto", TuhoaAuto);
322            //ammus.Size *= 3;
323            ammus.Image = panoksenkuba;
324            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
325        }
326    }
327    void TahtaaAseella(AnalogState hiirenLiike)
328    {
329        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
330        pelaajan1Ase.Angle = suunta.Angle;
331    }
332    void KuunteleLiiketta(AnalogState hiirenTila)
333    {
334
335
336        Vector hiirenLiike = hiirenTila.MouseMovement;
337        //if (hiirenLiike.Magnitude > 0)
338        //{
339
340            //tahtain.X = Mouse.PositionOnWorld.X;
341           // tahtain.Y = Mouse.PositionOnWorld.Y;
342        //}
343
344        //tahtain.Move(hiirenTila.StateVector * 30);
345   
346    }
347    void HeitaKranaatti(PlatformCharacter pelaaja)
348    {
349        Grenade kranu = new Grenade(4.0);
350        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
351        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
352    }
353   
354    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
355    {
356        if (rajahdyksenKohde.Tag.Equals("auto"))
357        {
358            rajahdyksenKohde.Destroy();
359            rajahdys.AddEffect(rajahdyksenKohde.X, rajahdyksenKohde.Y, 50);
360        }
361    }
362   
363    void TuhoaAuto(PhysicsObject ammus, PhysicsObject auto)
364    {
365        ammus.Destroy();
366        Flame liekki = new Flame(liekinkuva);
367        //liekki.
368        liekki.Position = ammus.Position; 
369        Add(liekki);
370        Timer.SingleShot(2.0, delegate
371        {
372            liekki.Destroy();
373            auto.Destroy();
374            rajahdys.AddEffect(auto.X, auto.Y, 50);
375
376        });
377
378    }
379}
Note: See TracBrowser for help on using the repository browser.