source: 2015/27/BenjaminE/HackNSlashOikea/HackNSlashOikea/HackNSlashOikea/HackNSlashOikea.cs @ 10335

Revision 6785, 6.2 KB checked in by beechiks, 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 HackNSlashOikea : PhysicsGame
10{
11    Image ekaPlKuva = LoadImage("ekaPelaajaKuva");
12    PhysicsObject ekaPelaaja;
13    SoundEffect pelaajaKuole = LoadSoundEffect("pelaajaKuole");
14    AssaultRifle pelaajanAse;
15    PhysicsObject ammus;
16    Image luotiKuva = LoadImage("luoti");
17    SoundEffect ammusAani = LoadSoundEffect("ammusAani");
18    IntMeter pisteLaskuri = new IntMeter(0, 0, 100);
19
20    SoundEffect zombieAani = LoadSoundEffect("zombieAani");
21    SoundEffect zombieKuole = LoadSoundEffect("zombieKuole");
22    Image vertaa = LoadImage("vertaa");
23    ExplosionSystem vertaaEffect;
24    double zombieRate = 1.0;
25
26    EasyHighScore topLista = new EasyHighScore();
27
28    public override void Begin()
29    {
30        Window tyhma = new Window();
31        AloitaUdella(tyhma);
32    }
33
34    void AloitaPeli()
35    {
36
37        MediaPlayer.Play("zombieAaniM");
38        MediaPlayer.IsRepeating = true;
39
40        Vector keski = new Vector();
41        LuoPelaaja(keski);
42        Spawner();
43        EnempaZombia();
44        Level.CreateBorders(false);
45        GameObject tausta = new GameObject(Level.Width, Level.Height);
46        tausta.Image = LoadImage("tausta");
47        Add(tausta, -3);
48        Camera.StayInLevel = true;
49        Camera.Follow(ekaPelaaja);
50    }
51
52    void EnempaZombia()
53    {
54        Timer plZombie = new Timer();
55        plZombie.Timeout += PlZombia;
56        plZombie.Interval = 5.0;
57        plZombie.Start();
58    }
59
60    void PlZombia() 
61    {
62        if (zombieRate > 0.1)
63        {
64            zombieRate -= 0.1;
65            EnempaZombia();
66        }
67    }
68
69    void LuoPelaaja(Vector paikka)
70    {
71        ekaPelaaja = new PhysicsObject(ekaPlKuva);
72        ekaPelaaja.LinearDamping = 0.1;
73        ekaPelaaja.Position = paikka;
74
75        pelaajanAse = new AssaultRifle(1, 1);
76        pelaajanAse.Image = null;
77        pelaajanAse.Color = Color.Transparent;
78        pelaajanAse.FireRate = 2;
79        pelaajanAse.AttackSound = null;
80        ekaPelaaja.Add(pelaajanAse);
81
82
83        Level.AmbientLight = -0.7;
84
85        Light valo = new Light();
86        valo.Intensity = 1.5;
87        valo.Distance = 150;
88        valo.Position = ekaPelaaja.Position;
89        Add(valo);
90
91        Timer valoAjastin = new Timer();
92        valoAjastin.Interval = 0.1;
93        valoAjastin.Timeout += delegate
94        {
95            valo.Position = ekaPelaaja.Position;
96        };
97        valoAjastin.Start();
98
99        AddCollisionHandler(ekaPelaaja, "vihu", PelajaKuole);
100
101        Label pistenaytto = new Label("");
102        pistenaytto.BindTo(pisteLaskuri);
103        pistenaytto.Position = new Vector(0, Screen.Top - 50.0);
104        pistenaytto.Color = Color.White;
105        pistenaytto.TextScale = new Vector(2.0, 2.0);
106        Add(pistenaytto);
107
108        Add(ekaPelaaja);
109        Ohjet(ekaPelaaja);
110    }
111
112    void PelajaKuole(PhysicsObject pelaaja, PhysicsObject vihu) 
113    {
114        pelaajaKuole.Play();
115        ClearAll();
116        topLista.EnterAndShow(pisteLaskuri.Value);
117        topLista.HighScoreWindow.Closed += AloitaUdella;
118        Level.Background.Color = Color.Black;
119    }
120
121    void AloitaUdella(Window sender) 
122    {
123        Level.Background.Color = Color.Black;
124
125        MultiSelectWindow alkuValikko = new MultiSelectWindow("Zombie Attack", "Aloita peli", "Lopeta");
126        alkuValikko.AddItemHandler(0, AloitaPeli);
127        alkuValikko.AddItemHandler(1, Exit);
128        Add(alkuValikko);
129    }
130
131    void Spawner()
132    {
133        vertaaEffect = new ExplosionSystem(vertaa, 100);
134        vertaaEffect.MinLifetime = 0.1;
135        vertaaEffect.MaxLifetime = 0.2;
136        vertaaEffect.MinScale = 4;
137        vertaaEffect.MaxScale = 10;
138        vertaaEffect.MinVelocity = 20.0;
139        vertaaEffect.MaxVelocity = 50.0;
140        Add(vertaaEffect);
141
142        Timer spawneri = new Timer();
143        spawneri.Timeout += LuoVihu;
144        spawneri.Interval = zombieRate;
145
146        spawneri.Start();
147    }
148
149    void Ohjet(PhysicsObject pelaaja)
150    {
151        double nopeus = 1500.0;
152
153        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Liiku ylös.", pelaaja, -nopeus);
154        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Liiku ylös.", pelaaja, nopeus);
155
156        Mouse.ListenMovement(0.0, KuunteleHiiri, "Pelaaja kääntyy hiiren mukaan.");
157        Mouse.IsCursorVisible = true;
158        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ampuminen, "Ampu");
159
160        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
161
162        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli");
163
164    }
165
166    void KuunteleHiiri(AnalogState hiirenTilla)
167    {
168        ekaPelaaja.AbsoluteAngle = (Mouse.PositionOnWorld - ekaPelaaja.Position).Angle;
169    }
170
171    void Ampuminen()
172    {
173        ammus = pelaajanAse.Shoot();
174        if (ammus != null)
175        {
176            ammus.Height = 1.0;
177            ammus.Width = 1.0;
178            ammus.Image = luotiKuva;
179            ammus.Tag = "ammus";
180            ammusAani.Play();
181
182            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
183            {
184                a.Destroy();
185            });
186        }
187    }
188
189    void AsetaNopeus(PhysicsObject pelaaja, double nopeus)
190    {
191        pelaaja.Move(Vector.FromLengthAndAngle(nopeus, pelaaja.Angle));
192    }
193
194    void LuoVihu()
195    {
196        PhysicsObject vihu = new PhysicsObject(LoadImage("vihu"));
197        vihu.Position = new Vector(RandomGen.NextDouble(Screen.Left, Screen.Right), RandomGen.NextDouble(Screen.Bottom, Screen.Top));
198        vihu.Tag = "vihu";
199
200        FollowerBrain vihunAivot = new FollowerBrain(ekaPelaaja);
201        vihu.Brain = vihunAivot;
202        vihunAivot.Speed = 50.0;
203        vihunAivot.Active = true;
204        Add(vihu);
205        if (vihu != null)
206        {
207            AddCollisionHandler(vihu, "ammus", PoistuVihu);
208        }
209    }
210
211    void PoistuVihu(PhysicsObject vihu, PhysicsObject ammus)
212    {
213        vihu.Destroy();
214        vertaaEffect.AddEffect(vihu.X, vihu.Y, 100);
215        pisteLaskuri.AddValue(1);
216    }
217}
Note: See TracBrowser for help on using the repository browser.