source: 2016/30/TaavettiV/Street Alien Domination/Street Alien Domination/Street_Alien_Domination/Street_Alien_Domination.cs @ 8219

Revision 8219, 7.9 KB checked in by sieerinn, 3 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 Street_Alien_Domination : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    GameObject tahtain;
17
18    Image pelaajanKuva = LoadImage("norsu");
19    Image tahtiKuva = LoadImage("tahti");
20
21    Image pompKuva = LoadImage("pomp");
22    Image asevihukuva = LoadImage("kesken");
23    Image tähtäinkuva = LoadImage("tähtäin");
24
25    SoundEffect maaliAani = LoadSoundEffect("maali");
26
27    public override void Begin()
28    {
29        ClearAll();
30        SmoothTextures = false;
31
32        PhysicsObject kissa = new PhysicsObject(40, 20);
33        kissa.Shape = Shape.Rectangle;
34        kissa.Mass = 10.0;
35        Add(kissa);
36
37        tahtain = new GameObject(40, 40);
38        tahtain.Image = tähtäinkuva;
39        Add(tahtain, 3);
40
41
42        Gravity = new Vector(0, -1000);
43
44        LuoKentta();
45        LisaaNappaimet();
46
47        Camera.Follow(pelaaja1);
48        Camera.ZoomFactor = 1.2;
49        Camera.StayInLevel = true;
50    }
51
52    void LuoKentta()
53    {
54        TileMap kentta = TileMap.FromLevelAsset("kentta2");
55        kentta.SetTileMethod('#', LisaaTaso);
56        kentta.SetTileMethod('*', LisaaTahti);
57        kentta.SetTileMethod('N', LisaaPelaaja);
58        kentta.SetTileMethod('p', LisaaOlio);
59        kentta.SetTileMethod('A', LisaaOlio2);
60        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
61        Level.CreateBorders();
62       
63        Level.Background.CreateGradient(Color.DarkRed,Color.LightBlue);
64    }
65
66    void LisaaTaso(Vector paikka, double leveys, double korkeus)
67    {
68        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
69        taso.Position = paikka;
70        taso.Color = Color.DarkBrown;
71        Add(taso);
72    }
73
74    void LisaaTahti(Vector paikka, double leveys, double korkeus)
75    {
76        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
77        tahti.IgnoresCollisionResponse = true;
78        tahti.Position = paikka;
79        tahti.Image = tahtiKuva;
80        tahti.Tag = "tahti";
81        Add(tahti);
82    }
83    void LisaaOlio(Vector paikka, double leveys, double korkeus)
84    {
85        PlatformCharacter p = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
86        p.Position = paikka;
87        p.Image = pompKuva;
88        Add(p);
89        p.Tag = "p";
90
91        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
92        tasoAivot.Speed = 100;
93
94        tasoAivot.FallsOffPlatforms = true;
95        tasoAivot.TriesToJump = true;
96
97        p.Brain = tasoAivot;
98
99    }
100
101    void LisaaOlio2(Vector paikka, double leveys, double korkeus)
102    {
103        PlatformCharacter asevihu = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
104        asevihu.Position = paikka;
105        asevihu.Image = asevihukuva;
106        Add(asevihu);
107        asevihu.Tag = "A";
108
109        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
110        tasoAivot.Speed = 100;
111
112        tasoAivot.FallsOffPlatforms = true;
113        tasoAivot.TriesToJump = true;
114
115        asevihu.Brain = tasoAivot;
116
117        asevihu.Weapon = new AssaultRifle(30, 10);
118        asevihu.Weapon.ProjectileCollision = VihuAmmusOsui;
119
120        Timer aikaLaskuri = new Timer();
121        aikaLaskuri.Interval = 2;
122        aikaLaskuri.Timeout += () => AmmuAseella(asevihu);
123        aikaLaskuri.Start();
124    }
125   
126   
127
128    void Tormaap(PhysicsObject pelaaja1, PhysicsObject p)
129    {
130        pelaaja1.Destroy();
131
132        Explosion rajahdys = new Explosion(50);
133        rajahdys.Position = p.Position;
134        Add(rajahdys);
135    }
136
137    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
138    {
139        pelaaja1 = new PlatformCharacter(leveys, korkeus);
140        pelaaja1.Position = paikka;
141        pelaaja1.Mass = 4.0;
142        pelaaja1.Tag = "pelaaja";
143        pelaaja1.Image = pelaajanKuva;
144        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
145        AddCollisionHandler(pelaaja1, "p", Tormaap);
146        Add(pelaaja1);
147
148        pelaaja1.Destroyed += pelinlopussa;
149       
150        pelaaja1.Weapon = new AssaultRifle(30, 10);
151        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
152        pelaaja1.Weapon.InfiniteAmmo = true;
153        pelaaja1.Weapon.Power.DefaultValue = 400;
154        pelaaja1.Weapon.AmmoIgnoresGravity = true;
155        pelaaja1.Weapon.AmmoIgnoresExplosions = true;
156        pelaaja1.Weapon.CanHitOwner = false;
157    }
158
159    void LisaaNappaimet()
160    {
161        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
162        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
163
164        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
165        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
166        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
167
168        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
169
170        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
171        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
172        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
173        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
174        Keyboard.Listen(Key.E, ButtonState.Pressed, HeitaKranaatti, "heitä kranaatti", pelaaja1);
175
176        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
177        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null,pelaaja1);
178    }
179
180    void KuunteleLiiketta(AnalogState hiirenTila)
181    {
182        tahtain.Position = Mouse.PositionOnWorld;
183        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
184
185    }
186
187
188    void Liikuta(PlatformCharacter hahmo, double nopeus)
189    {
190        hahmo.Walk(nopeus);
191    }
192
193    void Hyppaa(PlatformCharacter hahmo, double nopeus)
194    {
195        hahmo.Jump(nopeus);
196    }
197
198    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
199    {
200        maaliAani.Play();
201        MessageDisplay.Add("Keräsit tähden!");
202        tahti.Destroy();
203    }
204    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
205    {
206        ammus.Destroy();
207
208        if (kohde.Tag.ToString() == "p")
209        {
210            kohde.Destroy();
211        }
212        if (kohde.Tag =="A")
213        {
214            kohde.Destroy();
215        }
216
217    }
218
219    void VihuAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
220    {
221        ammus.Destroy();
222        if (kohde.Tag == "pelaaja")
223        {
224            kohde.Destroy();
225        }
226    }
227
228    void AmmuAseella(PlatformCharacter pelaaja)
229    {
230        if (pelaaja.IsDestroyed) return;
231
232        PhysicsObject ammus = pelaaja.Weapon.Shoot();
233
234        if (ammus != null)
235        {
236            //ammus.Size *= 3;
237            //ammus.Image = ...
238            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
239        }
240
241    }
242    void HeitaKranaatti(PlatformCharacter pelaaja)
243    {
244        if (pelaaja.IsDestroyed) return;
245
246        Grenade kranu = new Grenade(3.0);
247        pelaaja1.Throw(kranu, Angle.FromDegrees(50), 10000);
248
249
250        kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
251    }
252    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
253    {
254        rajahdyksenKohde.Destroy();
255    }
256
257   void pelinlopussa()
258    {
259        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
260        Add(alkuValikko);
261
262        alkuValikko.AddItemHandler(0, Begin);
263        alkuValikko.AddItemHandler(1, Exit);
264    }
265}
266
267
Note: See TracBrowser for help on using the repository browser.