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

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