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

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