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

Revision 3399, 10.2 KB checked in by elalylon, 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;
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        LuoNaytto(500, 450, "Terveys: ", pelaajanterveys);
28        LuoNaytto(300, 450, "Ammukset: ", kivaari.Ammo);
29
30        Camera.Follow(pelaaja);
31        Camera.ZoomFactor = 1.7;
32    }
33
34    protected override void Update(Time time)
35    {
36        pimeys.Position = pelaaja.Position;
37        pimeys.Angle = pelaaja.Angle + Angle.FromDegrees(-90);
38        //zombi.Angle = pelaaja.Angle.Degrees;
39        base.Update(time);
40    }
41
42    void AsetaOhjaimet()
43    {
44        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, 1);
45        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, 2);
46        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, 3);
47        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, 4);
48
49        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanny, null, 2.0);
50        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanny, null, -2.0);
51
52        Keyboard.Listen(Key.W, ButtonState.Released, PysaytaY, null, new Vector(1, 0));
53        Keyboard.Listen(Key.A, ButtonState.Released, PysaytaY, null, new Vector(0, 1));
54        Keyboard.Listen(Key.S, ButtonState.Released, PysaytaX, null, new Vector(1, 0));
55        Keyboard.Listen(Key.D, ButtonState.Released, PysaytaX, null, new Vector(0, 1));
56
57        Keyboard.Listen(Key.Left, ButtonState.Released, LopetaKaantyminen, null);
58        Keyboard.Listen(Key.Right, ButtonState.Released, LopetaKaantyminen, null);
59
60        Keyboard.Listen(Key.Up, ButtonState.Down, Ammu, null);
61
62        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, 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 Kaanny(double suunta)
79    {
80        pelaaja.AngularVelocity = suunta;
81    }
82
83    void LopetaKaantyminen()
84    {
85        pelaaja.AngularVelocity = 0;
86    }
87
88    void Liiku(int nappain)
89    {
90        Vector pulssi;
91        switch (nappain)
92        {
93            case 1:
94                pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle);
95                pelaaja.Velocity = pulssi;
96                break;
97            case 2:
98                pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle + Angle.RightAngle);
99                pelaaja.Velocity = pulssi;
100                break;
101            case 3:
102                pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle - Angle.StraightAngle);
103                pelaaja.Velocity = pulssi;
104                break;
105            case 4:
106                pulssi = Vector.FromLengthAndAngle(95, pelaaja.Angle - Angle.RightAngle);
107                pelaaja.Velocity = pulssi;
108                break;
109        }
110    }
111
112    void PysaytaX(Vector nopeusKerroin)
113    {
114        //pelaaja.Velocity = Vector.ComponentProduct(nopeusKerroin, pelaaja.Velocity);
115        pelaaja.StopHorizontal();
116    }
117
118    void PysaytaY(Vector nopeusKerroin)
119    {
120        //pelaaja.Velocity = Vector.ComponentProduct(nopeusKerroin, pelaaja.Velocity);
121        pelaaja.StopVertical();
122    }
123
124    void LuoPelaaja()
125    {
126        pelaaja = new PhysicsObject(30, 30);
127        pelaaja.Shape = Shape.FromImage(LoadImage("pelaaja_1"));
128        pelaaja.X = 600;
129        pelaaja.Y = -675;
130        pelaaja.Angle = Angle.FromDegrees(90);
131        pelaaja.MomentOfInertia = 10000;
132        Animation pelaajaanimation = new Animation(LoadImage("pelaaja_1"), LoadImage("pelaaja_2"));
133        pelaajaanimation.FPS = 5;
134        pelaaja.Animation = pelaajaanimation;
135        pelaajaanimation.Start();
136        pelaaja.CanRotate = false;
137        AddCollisionHandler(pelaaja, "zombi", PelaajaanOsuu);
138        kivaari = new AssaultRifle(30, 7.5);
139        kivaari.X = 14;
140        kivaari.Image = LoadImage("ase");
141        kivaari.TimeBetweenUse = TimeSpan.FromMilliseconds(600);
142        kivaari.Ammo.Value = 30;
143        kivaari.AttackSound = LoadSoundEffect("smgsound");
144
145        pelaajanterveys = new IntMeter(5, 0, 5);
146        pelaaja.Add(kivaari);
147        Add(pelaaja);
148    }
149
150    void Pimenna()
151    {
152        pimeys = new GameObject(new Animation(LoadImage("pimeys2")));
153        pimeys.Width = 1050;
154        pimeys.Height = 1050;
155        pimeys.Position = pelaaja.Position;
156        Add(pimeys, 1);
157    }
158
159    void LuoKentta()
160    {
161        //tee konepistooli, maali
162
163        Level.BackgroundColor = Color.DarkBrown;
164        TileMap ruudut = TileMap.FromFile("kentta.txt");
165        ruudut['='] = LuoSeina;
166        ruudut['z'] = LuoZombi;
167        ruudut['a'] = LuoAmmoBox;
168        ruudut['m'] = LuoMedikit;
169        ruudut['k'] = LuoAvain;
170        ruudut['g'] = LuoPortti;
171        ruudut['p'] = LuoKonepistooli;
172        ruudut['w'] = LuoMaali;
173        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
174
175        label1 = new Label("Ase: Kivääri");
176        label1.X = 100;
177        label1.Y = 450;
178        label1.TextColor = Color.Green;
179        label1.BorderColor = Color.Green;
180        label1.Color = Color.Black;
181        Add(label1);
182    }
183
184    PhysicsObject LuoMaali()
185    {
186        maali = PhysicsObject.CreateStaticObject(50.0, 50.0);
187        maali.Image = LoadImage("maali");
188        AddCollisionHandler(pelaaja, maali, delegate { Game.PlaySound("kling1"); MessageDisplay.Add("Voitit Pelin!!!"); });
189        return maali;
190    }
191
192    PhysicsObject LuoKonepistooli()
193    {
194        PhysicsObject konepistooli = PhysicsObject.CreateStaticObject(40.0, 15.0);
195        konepistooli.Image = LoadImage("konepistooli");
196        AddCollisionHandler(pelaaja, konepistooli, delegate {
197            label1.Text = "Ase: Konepistooli";
198            konepistooli.Destroy();
199            MessageDisplay.Add("Löysit konepistoolin! Pystyt ampumaan sarjatulta.");
200            kivaari.TimeBetweenUse = TimeSpan.FromMilliseconds(100);
201        });
202        return konepistooli;
203    }
204
205    PhysicsObject LuoAvain()
206    {
207        avain = PhysicsObject.CreateStaticObject(40.0, 15.0);
208        avain.Image = LoadImage("avain");
209        AddCollisionHandler(pelaaja, avain, delegate { Game.PlaySound("kling1"); });
210        return avain;
211    }
212
213    PhysicsObject LuoPortti()
214    {
215        portti = PhysicsObject.CreateStaticObject(100.0, 50.0);
216        portti.Image = LoadImage("portti");
217        return portti;
218    }
219
220    PhysicsObject LuoAmmoBox()
221    {
222        PhysicsObject ammobox = PhysicsObject.CreateStaticObject(40.0, 30.0);
223        ammobox.Image = LoadImage("ammobox");
224        AddCollisionHandler(pelaaja, ammobox, delegate { ammobox.Destroy(); kivaari.Ammo.AddValue(50); });
225        return ammobox;
226    }
227
228    PhysicsObject LuoMedikit()
229    {
230        PhysicsObject medikit = PhysicsObject.CreateStaticObject(40.0, 30.0);
231        medikit.Image = LoadImage("medikit");
232        AddCollisionHandler(pelaaja, medikit, delegate { medikit.Destroy(); pelaajanterveys.Value = 5; });
233        return medikit;
234    }
235
236    PhysicsObject LuoZombi()
237    {
238        Zombi zombi = new Zombi(35.0, 35.0);
239        zombi.Tag = "zombi";
240        FollowerBrain zombinaivot = new FollowerBrain(pelaaja);
241        zombinaivot.DistanceFar = 300;
242        zombinaivot.DistanceToTarget.Changed += delegate { zombi.Angle = (zombi.Position - zombinaivot.CurrentTarget.Position).Angle - Angle.RightAngle; };
243        zombinaivot.Speed = 140;
244        zombi.Brain = zombinaivot;
245        Animation zombianimation = new Animation(LoadImage("zombi_1"), LoadImage("zombi_2"));
246        zombi.Animation = zombianimation;
247        zombianimation.FPS = 5;
248        zombianimation.Start();
249        return zombi;
250    }
251
252    PhysicsObject LuoSeina()
253    {
254        PhysicsObject seina = PhysicsObject.CreateStaticObject(50.0, 50.0);
255        seina.Image = LoadImage("seina");
256        return seina;
257    }
258
259    void PelaajaanOsuu(PhysicsObject tormaaja, PhysicsObject kohde)
260    {
261        pelaajanterveys.AddValue(-1);
262        pelaajanterveys.LowerLimit += delegate { pelaaja.Destroy(); MessageDisplay.Add("Kuolit!"); };
263    }
264
265    void ViholliseenOsuu(PhysicsObject tormaaja, Zombi kohde)
266    {
267        kohde.elamaLaskuri.Value--;
268    }
269   
270    void LuoNaytto(double x, double y, String title, IntMeter mittari)
271    {
272        Label naytto = new Label();
273        naytto.BindTo(mittari);
274        naytto.X = x;
275        naytto.Title = title;
276        naytto.Y = y;
277        naytto.TextColor = Color.Green;
278        naytto.BorderColor = Color.Green;
279        naytto.Color = Color.Black;
280        Add(naytto);
281    }
282}
283
284class Zombi : PhysicsObject
285{
286    public IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
287
288    public Zombi(double leveys, double korkeus)
289        : base(leveys, korkeus)
290    {
291        elamaLaskuri.Changed += delegate {
292            int asd = RandomGen.NextInt(2);
293            switch (asd){
294                case 0:
295                    Game.PlaySound("zombie_damage_1");
296                    break;
297                case 1:
298                    Game.PlaySound("zombie_damage_2");
299                    break;
300            }
301
302        };
303        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
304    }
305}
Note: See TracBrowser for help on using the repository browser.