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

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