source: 2014/26/HannuP/pomppiva_norsu_osa1/pomppiva_norsu_osa1/pomppiva_norsu_osa1/pomppiva_norsu_osa1.cs @ 5143

Revision 5143, 6.8 KB checked in by hapalone, 9 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 pomppiva_norsu_osa1 : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 700;
13    const int RUUDUN_KOKO = 40;
14    DoubleMeter elamaLaskuri;
15    PlatformCharacter pelaaja1;
16    PlatformCharacter vihu1;
17    Vector alkupaikka;
18
19    int multakasalaskuri = 0;
20
21    Image pelaajanKuva = LoadImage("pahis mato");
22    Image tahtiKuva = LoadImage("tahti");
23    Image AseenKuva = LoadImage("ase");
24    Image LuodinKuva = LoadImage("Luoti");
25    Image Lintu = LoadImage("angry");
26    Image MaanAlla = LoadImage("MaanAlla");
27    Image Kivi = LoadImage("Kivi");
28    Image MultaKasa = LoadImage("Multakasa");
29
30    SoundEffect maaliAani = LoadSoundEffect("maali");
31    AssaultRifle pelaajan1Ase;
32    public override void Begin()
33    {
34        Gravity = new Vector(0, -1000);
35
36
37        LuoKentta();
38        LisaaNappaimet();
39        LuoElamaLaskuri();
40
41        Camera.Follow(pelaaja1);
42        Camera.ZoomFactor = 1.2;
43        Camera.StayInLevel = true;
44    }
45
46    void LuoKentta()
47    {
48        TileMap kentta = TileMap.FromLevelAsset("kentta1");
49        kentta.SetTileMethod('#', LisaaTaso);
50        kentta.SetTileMethod('*', LisaaTahti);
51        kentta.SetTileMethod('p', LisaaPelaaja);
52        kentta.SetTileMethod('v', Lisaavihu);
53        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
54        Level.CreateBorders();
55       
56        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
57        Level.Background.Image = MaanAlla;
58    }
59
60    void LisaaTaso(Vector paikka, double leveys, double korkeus)
61    {
62        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
63        taso.Position = paikka;
64       // taso.Color = Color.Green;
65        taso.Image = Kivi;
66        Add(taso);
67    }
68
69    void LisaaTahti(Vector paikka, double leveys, double korkeus)
70    {
71        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
72        tahti.IgnoresCollisionResponse = true;
73        tahti.Position = paikka;
74        tahti.Image = MultaKasa;
75        tahti.Tag = "tahti";
76        Add(tahti);
77        multakasalaskuri++;
78    }
79
80    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
81    {
82        alkupaikka = paikka;
83        pelaaja1 = new PlatformCharacter(leveys, korkeus);
84        pelaaja1.Position = paikka;
85        pelaaja1.Mass = 4.0;
86        pelaaja1.Image = pelaajanKuva;
87        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
88        AddCollisionHandler(pelaaja1, "vihu1", Tormaavihuun);
89        Add(pelaaja1);
90        pelaajan1Ase = new AssaultRifle(90, 30);
91        pelaajan1Ase.Image = AseenKuva;
92
93        //Ammusten määrä aluksi:
94        pelaajan1Ase.Ammo.Value = 18;
95        //pelaajan1Ase.InfiniteAmmo = true;
96
97        //Mitä tapahtuu kun ammus osuu johonkin?
98        pelaajan1Ase.ProjectileCollision = AmmusOsui;
99
100        pelaaja1.Add(pelaajan1Ase);
101
102    }
103
104    void LisaaNappaimet()
105    {
106        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
107        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
108
109        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
110        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
111        Keyboard.Listen(Key.W, ButtonState.Pressed , Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
112        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
113        Keyboard.Listen(Key.Q, ButtonState.Pressed, HeitaKranaatti, "heitäkaranaatti", pelaaja1); 
114
115
116    }
117
118    void Liikuta(PlatformCharacter hahmo, double nopeus)
119    {
120        hahmo.Walk(nopeus);
121        pelaajan1Ase.AbsoluteAngle = hahmo.FacingDirection.Angle;
122    }
123
124    void Hyppaa(PlatformCharacter hahmo, double nopeus)
125    {
126        hahmo.Jump(nopeus);
127    }
128
129    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
130    {
131        maaliAani.Play();
132        MessageDisplay.Add("Keräsit multakasan!");
133        tahti.Destroy();
134        multakasalaskuri--;
135        if (multakasalaskuri == 0)
136        {
137            Label voittoteksti = new Label("victory");
138            Add(voittoteksti);
139        }
140    }
141    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
142    {
143        ammus.Destroy();
144        if (kohde.Tag == "vihu1")
145        {
146            kohde.Destroy();
147            MessageDisplay.Add("Kohde tuhottiin!");
148        }
149
150
151
152       
153       
154       
155    }
156
157    void AmmuAseella(AssaultRifle ase)
158      {
159        PhysicsObject ammus = ase.Shoot();
160
161        if (ammus != null)
162        {
163            ammus.Size *=4;
164            ammus.Image = LuodinKuva;
165            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
166       }
167    }
168
169    void Lisaavihu(Vector paikka, double leveys, double korkeus)
170    {
171        vihu1 = new PlatformCharacter(leveys, korkeus);
172        vihu1.Position = paikka;
173        vihu1.Mass = 4.0;
174        vihu1.Image = Lintu;
175        vihu1.Tag = "vihu1";
176        Add(vihu1);
177
178        AssaultRifle ase = new AssaultRifle(30, 10);
179        ase.Image = AseenKuva;
180        //Ammusten määrä aluksi:
181        ase.Ammo.Value = 18;
182        //ase.InfiniteAmmo = true;
183        vihu1.Add(ase);
184
185        //Mitä tapahtuu kun ammus osuu johonkin?
186        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
187        tasoAivot.Speed = 100;
188
189        vihu1.Brain = tasoAivot;
190
191
192
193    }
194    void LuoElamaLaskuri()
195    {
196        elamaLaskuri = new DoubleMeter(10);
197        elamaLaskuri.MaxValue = 10;
198        elamaLaskuri.LowerLimit += ElamaLoppui;
199
200        ProgressBar elamaPalkki = new ProgressBar(150, 20);
201        elamaPalkki.X = Screen.Left + 150;
202        elamaPalkki.Y = Screen.Top - 20;
203        elamaPalkki.BindTo(elamaLaskuri);
204        Add(elamaPalkki);
205    }
206
207    void ElamaLoppui()
208    {
209        MessageDisplay.Add("Elämät loppuivat, voi voi.");
210        pelaaja1.Position = alkupaikka;
211        elamaLaskuri.Value = elamaLaskuri.MaxValue;
212        pelaajan1Ase.Ammo.Value = 15;
213    } 
214    void Tormaavihuun(PhysicsObject hahmo, PhysicsObject vihollinen)
215    {
216        maaliAani.Play();
217        MessageDisplay.Add("kuolet!");
218        elamaLaskuri.Value--;
219    }
220
221    void HeitaKranaatti(PlatformCharacter pelaaja)
222    {
223        Grenade kranu = new Grenade(10.0);
224        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
225        kranu.Image = Kivi;
226        kranu.Explosion.AddShockwaveHandler("vihu1", KranaattiOsui);
227    }
228    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
229    {
230        rajahdyksenKohde.Destroy();
231    }
232
233
234
235}
Note: See TracBrowser for help on using the repository browser.