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

Revision 8335, 11.4 KB checked in by jotapoti, 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    Image aseenkuva = LoadImage("parasase");
18    Image pelaajanKuva = LoadImage("pelityyppiparas");
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    Image vauvaBoss = LoadImage("bosspoop");
25    Image vihreaBossKuva = LoadImage("outohirvio");
26
27    Image knightkuva = LoadImage("knight");
28
29    SoundEffect maaliAani = LoadSoundEffect("maali");
30
31    int kenttaNumero = 3;
32       
33
34
35    public override void Begin()
36    {
37        //Window.Fullscreen = true;
38
39        ClearAll();
40        SmoothTextures = false;
41
42        PhysicsObject kissa = new PhysicsObject(40, 20);
43        kissa.Shape = Shape.Rectangle;
44        kissa.Mass = 10.0;
45        Add(kissa);
46
47        tahtain = new GameObject(40, 40);
48        tahtain.Image = tähtäinkuva;
49        Add(tahtain, 3);
50
51
52        Gravity = new Vector(0, -1000);
53
54        LuoKentta();
55        LisaaNappaimet();
56
57        Camera.Follow(pelaaja1);
58        Camera.ZoomFactor = 1.2;
59        Camera.StayInLevel = true;
60    }
61
62    void LuoKentta()
63    {
64        MediaPlayer.Play("taustamusa");
65        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaNumero);
66        kentta.SetTileMethod('#', LisaaTaso);
67        kentta.SetTileMethod('*', LisaaTahti);
68        kentta.SetTileMethod('N', LisaaPelaaja);
69        kentta.SetTileMethod('p', LisaaOlio);
70        kentta.SetTileMethod('A', LisaaOlio2);
71        kentta.SetTileMethod('m', LisaaOlio3);
72        kentta.SetTileMethod('B', LisaaOlio4);
73        kentta.SetTileMethod('V', LisaaOlio5);
74        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
75        Level.CreateBorders();
76       
77        Level.Background.CreateGradient(Color.DarkRed,Color.LightBlue);
78    }
79
80    void LisaaTaso(Vector paikka, double leveys, double korkeus)
81    {
82        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
83        taso.Position = paikka;
84        taso.Color = Color.DarkBrown;
85        Add(taso);
86    }
87
88    void LisaaTahti(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
91        tahti.IgnoresCollisionResponse = true;
92        tahti.Position = paikka;
93        tahti.Image = tahtiKuva;
94        tahti.Tag = "tahti";
95        Add(tahti);
96    }
97    void LisaaOlio(Vector paikka, double leveys, double korkeus)
98    {
99        PlatformCharacter p = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
100        p.Position = paikka;
101        p.Image = pompKuva;
102        Add(p);
103        p.Tag = "p";
104
105        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
106        tasoAivot.Speed = 100;
107
108        tasoAivot.FallsOffPlatforms = true;
109        tasoAivot.TriesToJump = true;
110
111        p.Brain = tasoAivot;
112
113    }
114
115    void LisaaOlio2(Vector paikka, double leveys, double korkeus)
116    {
117        PlatformCharacter asevihu = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
118        asevihu.Position = paikka;
119        asevihu.Image = asevihukuva;
120        Add(asevihu);
121        asevihu.Tag = "A";
122
123        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
124        tasoAivot.Speed = 100;
125
126        tasoAivot.FallsOffPlatforms = true;
127        tasoAivot.TriesToJump = true;
128
129        asevihu.Brain = tasoAivot;
130
131        asevihu.Weapon = new AssaultRifle(30, 10);
132        asevihu.Weapon.ProjectileCollision = VihuAmmusOsui;
133
134        Timer aikaLaskuri = new Timer();
135        aikaLaskuri.Interval = 2;
136        aikaLaskuri.Timeout += () => AmmuAseella(asevihu);
137        aikaLaskuri.Start();
138    }
139    void LisaaOlio3(Vector paikka, double leveys, double korkeus)
140    {
141        PlatformCharacter m = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
142        m.Position = paikka;
143        m.Image = knightkuva;
144        Add(m);
145        m.Tag = "m";
146
147        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
148        tasoAivot.Speed = 100;
149
150        tasoAivot.FallsOffPlatforms = true;
151        tasoAivot.TriesToJump = true;
152
153        m.Brain = tasoAivot;
154
155    }
156
157
158    void LisaaOlio4(Vector paikka, double leveys, double korkeus)
159    {
160        OutoHirvio B = new OutoHirvio(leveys * 1.0, korkeus * 1.0);
161        B.Position = paikka;
162        B.Image =vauvaBoss;
163        Add(B);
164        B.Tag = "B";
165
166       
167        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
168        tasoAivot.Speed = 100;
169       
170        tasoAivot.FallsOffPlatforms = true;
171        tasoAivot.TriesToJump = true;
172
173        B.Brain = tasoAivot;
174
175    }
176
177
178    void LisaaOlio5(Vector paikka, double leveys, double korkeus)
179    {
180        OutoHirvio m = new OutoHirvio(leveys * 2.9, korkeus * 2.9);
181        m.Position = paikka;
182        m.Image = vihreaBossKuva;
183        Add(m);
184        m.Tag = "m";
185
186        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
187        tasoAivot.Speed = 100;
188
189        tasoAivot.FallsOffPlatforms = true;
190        tasoAivot.TriesToJump = true;
191
192        m.Brain = tasoAivot;
193
194    }
195
196    void Tormaap(PhysicsObject pelaaja1, PhysicsObject p)
197    {
198        pelaaja1.Destroy();
199
200        Explosion rajahdys = new Explosion(50);
201        rajahdys.Position = p.Position;
202        Add(rajahdys);
203    }
204
205    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
206    {
207        pelaaja1 = new PlatformCharacter(leveys* 0.7, korkeus * 0.9);
208        pelaaja1.Position = paikka;
209        pelaaja1.Mass = 4.0;
210        pelaaja1.Tag = "pelaaja";
211        pelaaja1.Image = pelaajanKuva;
212        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
213        AddCollisionHandler(pelaaja1, "p", CollisionHandler.ExplodeBoth(999, true));
214        AddCollisionHandler(pelaaja1, "B", CollisionHandler.ExplodeBoth(999, true));
215        AddCollisionHandler(pelaaja1, "m", Tormaap);
216        Add(pelaaja1);
217
218
219
220        pelaaja1.Destroyed += pelinlopussa;
221       
222        pelaaja1.Weapon = new AssaultRifle(30, 10);
223        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
224        pelaaja1.Weapon.InfiniteAmmo = true;
225        pelaaja1.Weapon.Power.DefaultValue = 400;
226        pelaaja1.Weapon.AmmoIgnoresGravity = true;
227        pelaaja1.Weapon.AmmoIgnoresExplosions = true;
228        pelaaja1.Weapon.CanHitOwner = false;
229        pelaaja1.Weapon.Image = aseenkuva;
230        pelaaja1.Weapon.Y = 5;
231
232    }
233
234    void LisaaNappaimet()
235    {
236        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
237        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
238
239        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
240        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
241        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
242
243        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
244
245        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
246        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
247        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
248        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
249        Keyboard.Listen(Key.E, ButtonState.Pressed, HeitaKranaatti, "heitä kranaatti", pelaaja1);
250
251        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
252        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null,pelaaja1);
253    }
254
255    void KuunteleLiiketta(AnalogState hiirenTila)
256    {
257        tahtain.Position = Mouse.PositionOnWorld;
258        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
259
260    }
261
262
263    void Liikuta(PlatformCharacter hahmo, double nopeus)
264    {
265        hahmo.Walk(nopeus);
266    }
267
268    void Hyppaa(PlatformCharacter hahmo, double nopeus)
269    {
270        hahmo.Jump(nopeus);
271    }
272
273    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
274    {
275        maaliAani.Play();
276        MessageDisplay.Add("Keräsit tähden!");
277        tahti.Destroy();
278    }
279    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
280    {
281        ammus.Destroy();
282        if (kohde.Tag.Equals("m"))
283        {
284            //ShowMessageWindow("Osu");
285            if ((kohde as OutoHirvio).AloitaAjastin())
286            {
287                (kohde as OutoHirvio).Ajastin.Timeout += delegate { SpawnaaUusiBosspoop(kohde.Position); };
288            }
289            (kohde as OutoHirvio).ElamaLaskuri.Value--;
290        }
291        if (kohde.Tag.ToString() == "p")
292        {
293            kohde.Destroy();
294        }
295        if (kohde.Tag =="A")
296        {
297            kohde.Destroy();
298        }
299       
300
301    }
302
303    void SpawnaaUusiBosspoop(Vector paikka)
304    {
305        LisaaOlio4(paikka, RUUDUN_KOKO / 2.0, RUUDUN_KOKO / 2.0);
306
307
308    }
309
310    void VihuAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
311    {
312        ammus.Destroy();
313        if (kohde.Tag == "pelaaja")
314        {
315            kohde.Destroy();
316        }
317    }
318
319    void AmmuAseella(PlatformCharacter pelaaja)
320    {
321        if (pelaaja.IsDestroyed) return;
322
323        PhysicsObject ammus = pelaaja.Weapon.Shoot();
324
325        if (ammus != null)
326        {
327            //ammus.Size *= 0.10;
328            ammus.Width = 20;
329            ammus.Height = 1;
330            //ammus.Image = ...
331            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
332        }
333
334       
335 
336    }
337    void HeitaKranaatti(PlatformCharacter pelaaja)
338    {
339        if (pelaaja.IsDestroyed) return;
340
341        Grenade kranu = new Grenade(3.0);
342        pelaaja1.Throw(kranu, Angle.FromDegrees(50), 10000);
343
344        kranu.Explosion.AddShockwaveHandler("A", KranaattiOsui);
345
346        kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
347    }
348    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
349    {
350        rajahdyksenKohde.Destroy();
351    }
352
353   void pelinlopussa()
354    {
355        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
356        Add(alkuValikko);
357
358        alkuValikko.AddItemHandler(0, Begin);
359        alkuValikko.AddItemHandler(1, Exit);
360    }
361}
362
363class OutoHirvio : PlatformCharacter
364{
365    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
366    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
367    public Timer Ajastin = new Timer();
368    public OutoHirvio(double leveys, double korkeus)
369        : base(leveys, korkeus)
370    {
371        this.Ajastin.Interval = 1.0;
372
373        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
374    }
375
376    public bool AloitaAjastin()
377    {
378        if (this.Ajastin.Enabled == true)
379        {
380            return false;
381        }
382        else
383        {
384            this.Ajastin.Start();
385        }
386
387        return true;
388
389    }
390
391}
Note: See TracBrowser for help on using the repository browser.