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

Revision 3290, 6.4 KB checked in by elalylon, 9 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;
14    AssaultRifle kivaari;
15    GameObject pimeys;
16    IntMeter pelaajanterveys;
17    public override void Begin()
18    {
19        LuoPelaaja();
20        LuoKentta();
21        Pimenna();
22        AsetaOhjaimet();
23
24        LuoNaytto(500, 450, "Terveys: ", pelaajanterveys);
25        LuoNaytto(300, 450, "Ammukset: ", kivaari.Ammo);
26        Camera.Follow(pelaaja);
27        Camera.ZoomFactor = 1.7;
28        /*todo:
29         * aseet
30         * vihut
31         * mapin parantelu
32         */
33    }
34
35    protected override void Update(Time time)
36    {
37        pimeys.Position = pelaaja.Position;
38        pimeys.Angle = pelaaja.Angle + Angle.FromDegrees(-90);
39        //zombi.Angle = pelaaja.Angle.Degrees;
40        base.Update(time);
41    }
42
43    void AsetaOhjaimet()
44    {
45        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, 0.0, 45.0);
46        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, -45.0, 0.0);
47        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, 0.0, -45.0);
48        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, 45.0, 0.0);
49
50        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanny, null, 2.0);
51        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanny, null, -2.0);
52
53        Keyboard.Listen(Key.W, ButtonState.Released, Pysayta, null, new Vector(1, 0));
54        Keyboard.Listen(Key.A, ButtonState.Released, Pysayta, null, new Vector(0, 1));
55        Keyboard.Listen(Key.S, ButtonState.Released, Pysayta, null, new Vector(1, 0));
56        Keyboard.Listen(Key.D, ButtonState.Released, Pysayta, null, new Vector(0, 1));
57
58        Keyboard.Listen(Key.Left, ButtonState.Released, LopetaKaantyminen, null);
59        Keyboard.Listen(Key.Right, ButtonState.Released, LopetaKaantyminen, null);
60
61        Keyboard.Listen(Key.Up, ButtonState.Down, Ammu, null);
62
63        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
64    }
65
66    void Ammu()
67    {
68        PhysicsObject ammus = kivaari.Shoot();
69
70        if (ammus != null)
71        {
72            ammus.Position = pelaaja.Position + Vector.FromLengthAndAngle(25, pelaaja.Angle);
73            ammus.Size /= 3;
74            ammus.Mass = 30;
75            AddCollisionHandler<PhysicsObject, Zombi>(ammus, "zombi", ViholliseenOsuu);
76            AddCollisionHandler<PhysicsObject, Zombi>(ammus, "zombi", CollisionHandler.DestroyObject);
77        }
78    }
79
80    void Kaanny(double suunta)
81    {
82        pelaaja.AngularVelocity = suunta;
83    }
84
85    void LopetaKaantyminen()
86    {
87        pelaaja.AngularVelocity = 0;
88    }
89
90    void Liiku(double x, double y)
91    {
92        Vector pulssi = new Vector(x, y);
93        pelaaja.Velocity = pulssi;
94    }
95
96    void Pysayta(Vector nopeusKerroin)
97    {
98        pelaaja.Velocity = Vector.ComponentProduct(nopeusKerroin, pelaaja.Velocity);
99    }
100
101    void LuoPelaaja()
102    {
103        pelaaja = new PhysicsObject(30, 30);
104        pelaaja.X = 550;
105        pelaaja.Y = -550;
106        pelaaja.Mass = 10;
107        pelaaja.Angle = Angle.FromDegrees(90);
108        pelaaja.MomentOfInertia = 10000;
109        Animation pelaajaanimation = new Animation(LoadImage("pelaaja_1"), LoadImage("pelaaja_2"));
110        pelaajaanimation.FPS = 5;
111        pelaaja.Animation = pelaajaanimation;
112        pelaajaanimation.Start();
113        AddCollisionHandler(pelaaja, "zombi", PelaajaanOsuu);
114        kivaari = new AssaultRifle(30, 7.5);
115        kivaari.X = 14;
116        kivaari.Image = LoadImage("ase");
117        kivaari.TimeBetweenUse = TimeSpan.FromMilliseconds(1000);
118        kivaari.Ammo.Value = 30;
119
120        pelaajanterveys = new IntMeter(5, 0, 5);
121        pelaaja.Add(kivaari);
122        Add(pelaaja);
123    }
124
125    void Pimenna()
126    {
127        pimeys = new GameObject(new Animation(LoadImage("pimeys2")));
128        pimeys.Width = 1050;
129        pimeys.Height = 1050;
130        pimeys.Position = pelaaja.Position;
131        Add(pimeys, 1);
132    }
133
134    void LuoKentta()
135    {
136        Level.BackgroundColor = Color.DarkBrown;
137        //Level.Background.Image = LoadImage("lattia");
138        //Level.Background.TextureWrapSize = new Vector(100, 100);
139        //Level.Background.FitToLevel();
140        // TODO: taustakuva pelin pohjaksi
141        TileMap ruudut = TileMap.FromFile("kentta.txt");
142        ruudut['='] = LuoSeina;
143        ruudut['z'] = LuoZombi;
144        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
145    }
146
147    PhysicsObject LuoZombi()
148    {
149        Zombi zombi = new Zombi(35.0, 35.0);
150        zombi.Tag = "zombi";
151        FollowerBrain zombinaivot = new FollowerBrain(pelaaja);
152        zombinaivot.DistanceFar = 600;
153        zombinaivot.DistanceToTarget.Changed += delegate { zombi.Angle = (zombi.Position - zombinaivot.CurrentTarget.Position).Angle - Angle.RightAngle; };
154        zombinaivot.Speed = 50;
155        zombi.Brain = zombinaivot;
156        Animation zombianimation = new Animation(LoadImage("zombi_1"), LoadImage("zombi_2"));
157        zombi.Animation = zombianimation;
158        zombianimation.FPS = 5;
159        zombianimation.Start();
160        return zombi;
161    }
162
163    PhysicsObject LuoSeina()
164    {
165        PhysicsObject seina = PhysicsObject.CreateStaticObject(50.0, 50.0);
166        seina.Image = LoadImage("seina");
167        return seina;
168    }
169
170    void PelaajaanOsuu(PhysicsObject tormaaja, PhysicsObject kohde)
171    {
172        pelaajanterveys.AddValue(-1);
173        pelaajanterveys.LowerLimit += delegate { pelaaja.Destroy(); MessageDisplay.Add("Kuolit!"); };
174    }
175
176    void ViholliseenOsuu(PhysicsObject tormaaja, Zombi kohde)
177    {
178        kohde.elamaLaskuri.Value--;
179    }
180   
181    void LuoNaytto(double x, double y, String title, IntMeter mittari)
182    {
183        Label naytto = new Label();
184        naytto.BindTo(mittari);
185        naytto.X = x;
186        naytto.Title = title;
187        naytto.Y = y;
188        naytto.TextColor = Color.Green;
189        naytto.BorderColor = Color.Green;
190        naytto.Color = Color.Black;
191        Add(naytto);
192
193    }
194}
195
196class Zombi : PhysicsObject
197{
198    public IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
199
200    public Zombi(double leveys, double korkeus)
201        : base(leveys, korkeus)
202    {
203        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
204    }
205}
Note: See TracBrowser for help on using the repository browser.