source: 2012/26/EliasY/test1/test1/test1/test1.cs @ 3857

Revision 3857, 10.9 KB checked in by anlakane, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class test1 : PhysicsGame
10{
11    const int ruudunLeveys = 50;
12    const int ruudunKorkeus = 50;
13    PhysicsObject pelaaja, avain, portti, maali;
14    AssaultRifle kivaari;
15    GameObject pimeys, tahtain;
16    IntMeter pelaajanterveys;
17    Label label1;
18    public override void Begin()
19    {
20        LuoPelaaja();
21        LuoKentta();
22        AddCollisionHandler(pelaaja, avain, delegate { portti.Destroy(); avain.Destroy(); MessageDisplay.Add("Löysit avaimen, jolla pääset portista!"); });
23        AddCollisionHandler(pelaaja, portti, delegate { MessageDisplay.Add("Löysit portin, mutta se on lukittu. Etsi avain päästäksesi ulos zombien valtaamasta talosta!");});
24        Pimenna();
25        AsetaOhjaimet();
26
27        MediaPlayer.Play("Silence");
28        MediaPlayer.IsRepeating = true;
29        SoundEffect.MasterVolume = 0.5;
30
31        LuoNaytto(500, 450, "Terveys: ", pelaajanterveys);
32        LuoNaytto(300, 450, "Ammukset: ", kivaari.Ammo);
33
34        Camera.Follow(pelaaja);
35        Camera.ZoomFactor = 1.7;
36    }
37
38    protected override void Update(Time time)
39    {
40        pimeys.Position = pelaaja.Position;
41        pimeys.Angle = pelaaja.Angle + Angle.FromDegrees(-90);
42        tahtain.Position = Mouse.PositionOnWorld;
43        base.Update(time);
44    }
45
46    void AsetaOhjaimet()
47    {
48        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, 1);
49        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, 2);
50        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, 3);
51        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, 4);
52
53        Keyboard.Listen(Key.W, ButtonState.Released, PysaytaY, null, new Vector(1, 0));
54        Keyboard.Listen(Key.A, ButtonState.Released, PysaytaX, null, new Vector(0, 1));
55        Keyboard.Listen(Key.S, ButtonState.Released, PysaytaY, null, new Vector(1, 0));
56        Keyboard.Listen(Key.D, ButtonState.Released, PysaytaX, null, new Vector(0, 1));
57
58        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, null);
59
60        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
61
62        Mouse.ListenMovement(0.1, Tahtaa, null);
63    }
64
65    void Ammu()
66    {
67        PhysicsObject ammus = kivaari.Shoot();
68        if (ammus != null)
69        {
70            ammus.Position = pelaaja.Position + Vector.FromLengthAndAngle(25, pelaaja.Angle);
71            ammus.Size /= 3;
72            ammus.LifetimeLeft = TimeSpan.FromMilliseconds(500);
73            AddCollisionHandler<PhysicsObject, Zombi>(ammus, "zombi", ViholliseenOsuu);
74            AddCollisionHandler<PhysicsObject, Zombi>(ammus, "zombi", CollisionHandler.DestroyObject);
75        }
76    }
77
78    void Liiku(int nappain)
79    {
80        Vector pulssi;
81        switch (nappain)
82        {
83            case 1:
84                //pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle); //Suhtellinen liikkuminen
85                pulssi = new Vector(0, 95);
86                pelaaja.Velocity = pulssi;
87                break;
88            case 2:
89                //pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle + Angle.RightAngle); //Suhtellinen liikkuminen
90                pulssi = new Vector(-95, 0);
91                pelaaja.Velocity = pulssi;
92                break;
93            case 3:
94                //pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle - Angle.StraightAngle); //Suhtellinen liikkuminen
95                pulssi = new Vector(0, -95);
96                pelaaja.Velocity = pulssi;
97                break;
98            case 4:
99                //pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle - Angle.RightAngle); //Suhtellinen liikkuminen
100                pulssi = new Vector(95, 0);
101                pelaaja.Velocity = pulssi;
102                break;
103        }
104    }
105
106    void Tahtaa(AnalogState hiirenLiike)
107    {
108        Vector suunta = (Mouse.PositionOnWorld - pelaaja.AbsolutePosition);
109        if (suunta != Vector.Zero)
110        {
111        pelaaja.Angle = suunta.Angle;
112        }
113    }
114
115    void PysaytaX(Vector nopeusKerroin)
116    {
117        //pelaaja.Velocity = Vector.ComponentProduct(nopeusKerroin, pelaaja.Velocity);
118        pelaaja.StopHorizontal();
119    }
120
121    void PysaytaY(Vector nopeusKerroin)
122    {
123        //pelaaja.Velocity = Vector.ComponentProduct(nopeusKerroin, pelaaja.Velocity);
124        pelaaja.StopVertical();
125    }
126
127    void LuoPelaaja()
128    {
129        pelaaja = new PhysicsObject(30, 30);
130        pelaaja.Shape = Shape.FromImage(LoadImage("pelaaja_1"));
131        pelaaja.X = 600;
132        pelaaja.Y = -675;
133        pelaaja.Angle = Angle.FromDegrees(90);
134        pelaaja.MomentOfInertia = 10000;
135        Animation pelaajaanimation = new Animation(LoadImage("pelaaja_1"), LoadImage("pelaaja_2"));
136        pelaajaanimation.FPS = 5;
137        pelaaja.Animation = pelaajaanimation;
138        pelaajaanimation.Start();
139        pelaaja.CanRotate = false;
140        AddCollisionHandler(pelaaja, "zombi", PelaajaanOsuu);
141        kivaari = new AssaultRifle(30, 7.5);
142        kivaari.X = 14;
143        kivaari.Image = LoadImage("ase");
144        kivaari.TimeBetweenUse = TimeSpan.FromMilliseconds(600);
145        kivaari.Ammo.Value = 30;
146        kivaari.AttackSound = LoadSoundEffect("smgsound");
147        tahtain = new GameObject(25, 25);
148        tahtain.Image = LoadImage("tahtain");
149        Add(tahtain, 1);
150
151        pelaajanterveys = new IntMeter(5, 0, 5);
152        pelaaja.Add(kivaari);
153        Add(pelaaja);
154    }
155
156    void Pimenna()
157    {
158        pimeys = new GameObject(new Animation(LoadImage("pimeys")));
159        pimeys.Width = 1350;
160        pimeys.Height = 1350;
161        pimeys.Position = pelaaja.Position;
162        Add(pimeys, 1);
163    }
164
165    void LuoKentta()
166    {
167        //tee konepistooli, maali
168
169        Level.BackgroundColor = Color.DarkBrown;
170        TileMap ruudut = TileMap.FromFile("kentta.txt");
171        ruudut['='] = LuoSeina;
172        ruudut['z'] = LuoZombi;
173        ruudut['a'] = LuoAmmoBox;
174        ruudut['m'] = LuoMedikit;
175        ruudut['k'] = LuoAvain;
176        ruudut['g'] = LuoPortti;
177        ruudut['p'] = LuoKonepistooli;
178        ruudut['w'] = LuoMaali;
179        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
180
181        label1 = new Label("Ase: Kivääri");
182        label1.X = 100;
183        label1.Y = 450;
184        label1.TextColor = Color.Green;
185        label1.BorderColor = Color.Green;
186        label1.Color = Color.Black;
187        Add(label1);
188    }
189
190    PhysicsObject LuoMaali()
191    {
192        maali = PhysicsObject.CreateStaticObject(50.0, 50.0);
193        maali.Image = LoadImage("maali");
194        AddCollisionHandler(pelaaja, maali, delegate { Game.PlaySound("kling1"); MessageDisplay.Add("Voitit Pelin!!!"); });
195        return maali;
196    }
197
198    PhysicsObject LuoKonepistooli()
199    {
200        PhysicsObject konepistooli = PhysicsObject.CreateStaticObject(40.0, 15.0);
201        konepistooli.Image = LoadImage("konepistooli");
202        AddCollisionHandler(pelaaja, konepistooli, delegate {
203            label1.Text = "Ase: Konepistooli";
204            konepistooli.Destroy();
205            MessageDisplay.Add("Löysit konepistoolin! Pystyt ampumaan sarjatulta.");
206            kivaari.TimeBetweenUse = TimeSpan.FromMilliseconds(100);
207        });
208        return konepistooli;
209    }
210
211    PhysicsObject LuoAvain()
212    {
213        avain = PhysicsObject.CreateStaticObject(40.0, 15.0);
214        avain.Image = LoadImage("avain");
215        AddCollisionHandler(pelaaja, avain, delegate { Game.PlaySound("kling1"); });
216        return avain;
217    }
218
219    PhysicsObject LuoPortti()
220    {
221        portti = PhysicsObject.CreateStaticObject(100.0, 50.0);
222        portti.Image = LoadImage("portti");
223        return portti;
224    }
225
226    PhysicsObject LuoAmmoBox()
227    {
228        PhysicsObject ammobox = PhysicsObject.CreateStaticObject(40.0, 40.0);
229        ammobox.Image = LoadImage("ammobox");
230        AddCollisionHandler(pelaaja, ammobox, delegate { ammobox.Destroy(); kivaari.Ammo.AddValue(50); });
231        return ammobox;
232    }
233
234    PhysicsObject LuoMedikit()
235    {
236        PhysicsObject medikit = PhysicsObject.CreateStaticObject(40.0, 40.0);
237        medikit.Image = LoadImage("medikit");
238        AddCollisionHandler(pelaaja, medikit, delegate { medikit.Destroy(); pelaajanterveys.Value = 5; });
239        return medikit;
240    }
241
242    PhysicsObject LuoZombi()
243    {
244        Zombi zombi = new Zombi(35.0, 35.0);
245        zombi.Tag = "zombi";
246        FollowerBrain zombinaivot = new FollowerBrain(pelaaja);
247        zombinaivot.DistanceFar = 300;
248        zombinaivot.DistanceToTarget.Changed += delegate { zombi.Angle = (zombi.Position - zombinaivot.CurrentTarget.Position).Angle - Angle.RightAngle; };
249        zombinaivot.Speed = 140;
250        zombi.Brain = zombinaivot;
251        Animation zombianimation = new Animation(LoadImage("zombi_1"), LoadImage("zombi_2"));
252        zombi.Animation = zombianimation;
253        zombianimation.FPS = 5;
254        zombianimation.Start();
255        return zombi;
256    }
257
258    PhysicsObject LuoSeina()
259    {
260        PhysicsObject seina = PhysicsObject.CreateStaticObject(50.0, 50.0);
261        seina.Image = LoadImage("seina");
262        return seina;
263    }
264
265    void PelaajaanOsuu(PhysicsObject tormaaja, PhysicsObject kohde)
266    {
267        pelaajanterveys.AddValue(-1);
268        pelaajanterveys.LowerLimit += delegate { Kuolit(); };
269    }
270
271    void Kuolit()
272    {
273        pelaaja.Destroy();
274        MessageDisplay.Add("Kuolit!");
275        ClearAll();
276        Begin();
277        //banneri + restart
278    }
279
280    void ViholliseenOsuu(PhysicsObject tormaaja, Zombi kohde)
281    {
282        kohde.elamaLaskuri.Value--;
283    }
284   
285    void LuoNaytto(double x, double y, String title, IntMeter mittari)
286    {
287        Label naytto = new Label();
288        naytto.BindTo(mittari);
289        naytto.X = x;
290        naytto.Title = title;//Titlen kannatta sisältää otsikon jälkeen space
291        naytto.Y = y;
292        naytto.TextColor = Color.Green;
293        naytto.BorderColor = Color.Green;
294        naytto.Color = Color.Black;
295        Add(naytto);
296    }
297}
298
299class Zombi : PhysicsObject
300{
301    public IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
302
303    public Zombi(double leveys, double korkeus)
304        : base(leveys, korkeus)
305    {
306        elamaLaskuri.Changed += delegate {
307            int asd = RandomGen.NextInt(2);
308            switch (asd){
309                case 0:
310                    //SoundEffect aani = Game.LoadSoundEffect("zombie_damage_1");
311                    //aani.Play(0.5, 0, 0);
312                    Game.PlaySound("zombie_damage_1");
313                    break;
314                case 1:
315                    Game.PlaySound("zombie_damage_2");
316                    break;
317            }
318
319        };
320        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
321        //PISTEITÄ TAPOISTA
322    }
323}
Note: See TracBrowser for help on using the repository browser.