source: 2010/30/johulkko/FysiikkaPeli2/Peli.cs @ 1405

Revision 1405, 8.1 KB checked in by johulkko, 10 years ago (diff)

valmis

Line 
1using System;
2using System.Collections.Generic;
3
4using Jypeli;
5using Jypeli.Widgets;
6using Jypeli.Assets;
7using Jypeli.Effects;
8
9
10public class Peli : PhysicsGame
11{
12    double nopeusvasemmalle = -200;
13    double nopeusoikealle = 200;
14
15    double maastonLeveys = 1000;
16    double maastonKorkeus = 300;
17    Image maastonKuva = LoadImage("tausta2");
18    Shape maastonMuoto;
19    Image olionKuva = LoadImage("hahmo2 pienenpi");
20    PlatformCharacter hahmo;
21    Image CameOver = LoadImage("CAME OVER");
22
23    Image pomminkuva = LoadImage("ohjus");
24
25    IntMeter elamaLaskuri;
26    IntMeter pisteLaskuri;
27    Label pisteNaytto;
28
29    PhysicsObject maa;
30
31    double pommienPutoamisKiihtyvyys;
32    ExplosionSystem rajahdys;
33
34    protected override void Begin()
35    {
36        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 300);
37        Add(rajahdys);
38
39        LuoKentta();
40        LuoPelihahmo();
41        LuoOhjaimet();
42        LuoLaskurit();
43        LuoPomminPudotusAjastin();
44        Camera.ZoomToLevel();
45    }
46
47    void LuoPelihahmo()
48    {
49        hahmo = new PlatformCharacter(50, 72);
50        hahmo.Shape = Shapes.Rectangle;
51        hahmo.Image = olionKuva;
52        hahmo.Tag = "tyyppi";
53        Add(hahmo);
54
55        hahmo.Y = -180;
56        hahmo.X = -110;
57        AddCollisionHandler(hahmo, PelaajaTormasi);
58    }
59
60    void PelaajaTormasi(PhysicsObject hahmo, PhysicsObject kohde)
61    {
62        if (kohde.Tag.ToString() == "pommi")
63        {
64            elamaLaskuri.Value--;
65        }
66    }
67
68    private void LuoPomminPudotusAjastin()
69    {
70        Timer ajastin = new Timer();
71        ajastin.Interval = 1;
72        ajastin.Trigger += LuoPommi;
73        ajastin.Start();
74    }
75
76    void LuoPommi(Timer t)
77    {
78        double x= RandomGen.NextDouble(Level.Left, Level.Right);
79        double y = Level.Top;
80        PhysicsObject pommi = new PhysicsObject(20, 40, Shapes.Rectangle);
81        pommi.Position = new Vector(x, y);
82        pommienPutoamisKiihtyvyys = RandomGen.NextDouble(0.65, 0.99);
83        pommi.LinearDamping = pommienPutoamisKiihtyvyys;
84        pommi.Tag = "pommi";
85        pommi.Image = pomminkuva;
86        AddCollisionHandler(pommi, PommiTormasi);
87        Add(pommi);
88    }
89
90    void PommiTormasi(PhysicsObject pommi, PhysicsObject kohde)
91    {
92        rajahdys.MinVelocity = 20;
93        rajahdys.MaxVelocity = 300;
94        rajahdys.MinScale = 0.05;
95        rajahdys.MaxScale = 0.2;
96        rajahdys.MinLifetime = 0.1;
97        rajahdys.MaxLifetime = 1.5;
98        rajahdys.AddEffect(pommi.X, pommi.Y, 40);
99        pommi.Destroy();
100
101        if (kohde==maa)
102        {
103            if (pisteLaskuri.Value >= 50)
104            {
105                pisteLaskuri.Value -= 50;
106
107            }
108            else
109            {
110                pisteLaskuri.Value = 0;
111            }
112        }
113
114 
115
116    }
117
118    void LuoKentta()
119    {
120        Mouse.IsCursorVisible = true;
121
122        maa = PhysicsObject.CreateStaticObject(Level.Width, 110.0);
123        maa.Y = -350;
124        maa.Color = Color.Green;
125        Add(maa);
126
127        LuoTaso(200, 100);
128        LuoTaso(0, -100);
129        LuoTaso(-200, 100);
130
131        Gravity = new Vector(0.0, -800.0);
132
133        Level.CreateLeftBorder();
134        Level.CreateBottomBorder();
135        Level.CreateRightBorder();
136    }
137
138    void Liikuta(PlatformCharacter hahmo, double nopeus)
139    {
140        hahmo.Walk(nopeus);
141    }
142    void LuoOhjaimet()
143    {
144        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
145
146        Keyboard.Listen(Key.Left, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu vasemmalle", hahmo, nopeusvasemmalle);
147        Keyboard.Listen(Key.Left, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
148        Keyboard.Listen(Key.Right, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu oikealle", hahmo, nopeusoikealle);
149        Keyboard.Listen(Key.Right, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
150        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hahmohyppaa, "hahmo liikkuu oikealle", hahmo);
151        //Keyboard.Listen(Key.Up, ButtonState.Released, Hahmohyppaa, null, hahmo);
152
153        Keyboard.Listen(Key.A, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu vasemmalle", hahmo, nopeusvasemmalle);
154        Keyboard.Listen(Key.A, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
155        Keyboard.Listen(Key.D, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu oikealle", hahmo, nopeusoikealle);
156        Keyboard.Listen(Key.D, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
157        Keyboard.Listen(Key.W, ButtonState.Pressed, Hahmohyppaa, "hahmo liikkuu oikealle", hahmo);
158        //Keyboard.Listen(Key.W, ButtonState.Released, Hahmohyppaa, null, hahmo);
159
160        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "hahmo liikkuu oikealle");
161
162    }
163
164    void HahmoLiikkuu(PlatformCharacter hahmo, double nopeus)
165    {
166        hahmo.Walk(nopeus);
167    }
168
169    void Hahmohyppaa(PlatformCharacter hahmo)
170    {
171        hahmo.Jump(1000);
172    }
173
174    void LuoTaso(double x, double y)
175    {
176        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 20);
177        taso.X = x;
178        taso.Y = y;
179
180        PathFollowerBrain polkuAivot = new PathFollowerBrain();       
181        List<Vector> polku = new List<Vector>();
182
183        for (int i = 0; i < 10; i++)
184        {
185            polku.Add(new Vector(
186                RandomGen.NextDouble(Level.Left + 50, Level.Right - 50),
187                RandomGen.NextDouble(Level.Bottom+200, Level.Top-100)
188                ));
189        }
190
191        polkuAivot.Path = polku;
192        polkuAivot.Active = true;
193        polkuAivot.Speed = 50;
194
195        taso.Brain = polkuAivot;
196        taso.Color = Color.Gray;
197        Add(taso);
198
199    }
200
201    void Ammu()
202    {
203        PhysicsObject panos = new PhysicsObject(9, 9);
204        panos.Color = Color.Yellow;
205        panos.Shape = Shapes.Circle;
206
207        Vector pyssynTeho = Mouse.PositionOnWorld - hahmo.Position;
208        panos.Angle = pyssynTeho.Angle;
209        pyssynTeho.X = pyssynTeho.X * 5;
210        pyssynTeho.Y = pyssynTeho.Y * 5;
211        if (pyssynTeho.X < hahmo.X)
212        {
213            panos.X = hahmo.X - 20;
214            panos.Y = hahmo.Y;
215        }
216        else
217        {
218            panos.X = hahmo.X + 20;
219            panos.Y = hahmo.Y;
220        }
221        panos.Hit(pyssynTeho);
222        panos.IgnoresGravity = false;
223        TimeSpan elinaika = new TimeSpan(10000000);
224        panos.MaximumLifetime = elinaika;
225        AddCollisionHandler(panos, PanosOsuu);
226        Add(panos);
227    }
228
229    void PanosOsuu(PhysicsObject panos, PhysicsObject kohde)
230    {
231        if (kohde.Tag.ToString() != "tyyppi")
232        {
233            panos.Destroy();
234        }
235
236        if (kohde.Tag.ToString() == "pommi")
237        {
238            pisteLaskuri.Value += 25;
239        }
240    }
241
242
243
244    void LuoLaskurit()
245    {
246        elamaLaskuri = new IntMeter(5);
247        elamaLaskuri.MinValue = 0;
248        elamaLaskuri.LowerLimit += ElamatLoppu;
249
250        pisteLaskuri = new IntMeter(0);
251        pisteLaskuri.MinValue = 0;
252        Label elamaNaytto = new Label();
253        elamaNaytto.X = Screen.Left + 100;
254        elamaNaytto.Y = Screen.Top - 100;
255        elamaNaytto.TextColor = Color.Black;
256        elamaNaytto.BindTo(elamaLaskuri);
257        Add(elamaNaytto);
258
259        Label elamaTeksti = new Label("Elämät: ");
260        elamaTeksti.X = Screen.Left + 50;
261        elamaTeksti.Y = Screen.Top - 100;
262        elamaTeksti.TextColor = Color.Black;
263        Add(elamaTeksti);
264
265        pisteNaytto = new Label();
266        pisteNaytto.X = Screen.Right - 100;
267        pisteNaytto.Y = Screen.Top - 100;
268        pisteNaytto.TextColor = Color.Black;
269        pisteNaytto.BindTo(pisteLaskuri);
270        Add(pisteNaytto);
271
272        Label pisteTeksti = new Label("Pisteet: ");
273        pisteTeksti.X = Screen.Right - 200;
274        pisteTeksti.Y = Screen.Top - 100;
275        pisteTeksti.TextColor = Color.Black;
276        Add(pisteTeksti);
277
278
279    }
280
281    void ElamatLoppu(int elamat)
282    {
283        ClearAll();
284        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
285        Level.Background.Image = CameOver;       
286    }
287   
288}
Note: See TracBrowser for help on using the repository browser.