source: 2010/23/elalylon/Ball Wars/Peli.cs @ 704

Revision 704, 11.4 KB checked in by paaaanro, 11 years ago (diff)

Tein vihollisen älykkäämmäksi, yritin saada aseet mahdollisiksi kerätä ja vähän muuta.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7namespace Ball_Wars
8{
9    class Tasohyppely : PhysicsGame
10    {
11        const double nopeus = 200;
12        const double hyppyVoima = 8000;
13        int enemyHitpoints = 10;
14        int pelaajaHitpoints = 10;
15        bool glockenabled = false;
16        Vector enemyshootvector;
17        Vector tahtaa;
18        Vector vasemmalle = new Vector(-100, 0);
19        Vector oikealle = new Vector(100, 0);
20
21        GameObject tahtain;
22        PhysicsObject Glock17;
23        IntMeter pisteLaskuri;
24        ValueDisplay pisteNaytto;
25        ValueDisplay ammoNaytto;
26        PlatformCharacter pelaaja1;
27        PlatformCharacter vihollinen;
28        PlatformCharacter vihollinen2;
29        AssaultRifle m16;
30        AssaultRifle Glock;
31        Weapon valittuase;
32
33
34        protected override void Begin()
35        {
36            Level.Width = 2000;
37            Level.Height = 1000;
38
39            // Luodaan pistelaskuri
40            pisteLaskuri = new IntMeter(0);
41
42            //Luodaan tähtäin
43            tahtain = new GameObject(30, 30, Shapes.Circle); /////////////////////////////////////////////////
44            tahtain.Image = LoadImage("Tahtain");
45            Add(tahtain);
46            //tahtain.
47            //tahtain.IgnoresCollisionResponse = true;
48            //Add(tahtain);
49
50            // luodaan pistelaskunäyttö
51            pisteNaytto = new ValueDisplay();
52            pisteNaytto.Text = "Pisteitä: ";
53            pisteNaytto.X = Screen.RightSafe - 250;
54            pisteNaytto.Y = Screen.TopSafe - 50;
55            pisteNaytto.BindTo(pisteLaskuri);
56            Add(pisteNaytto);    // lisätään peliin
57
58            ammoNaytto = new ValueDisplay();
59            ammoNaytto.X = Screen.RightSafe - 250;
60            ammoNaytto.Y = Screen.TopSafe - 50;
61            Add(ammoNaytto);
62
63
64            // Ajastin, jonka avulla ajastetaan vihollisen toiminta,
65            // mm. ampuminen säännöllisin väliajoin
66            Timer aly = new Timer();
67            aly.Interval = 0.01; // 0.1 sekuntia
68            aly.Trigger += enemyshoot;
69            aly.Trigger += enemymove;
70            Add(aly);
71            aly.Start();
72
73            // Zoomataan lähemmäksi
74            Camera.ZoomFactor = 2.0;
75
76            Camera.StayInLevel = true;
77
78            luoKentta();
79
80        }
81
82        void enemyshoot(Timer t)
83        {
84            enemyshootvector = pelaaja1.Position - vihollinen.Position;
85            vihollinen.Weapon.Angle = enemyshootvector.Angle;
86            if (pelaaja1.Position.X < vihollinen.Position.X)
87            {
88                vihollinen.Image = LoadImage("enemy2");
89                Glock.Image = LoadImage("Glock 17_2");
90            }
91            if (pelaaja1.Position.X < vihollinen.Position.X)
92            {
93                vihollinen.Image = LoadImage("enemy");
94                Glock.Image = LoadImage("Glock 17");
95            }
96            Glock.Use();
97        }
98        void enemymove(Timer t)
99        {
100
101            if (pelaaja1.Position.X < (vihollinen.Position.X - 200))
102            {
103                vihollinen.Hit(vasemmalle);
104                return;
105            }
106            else if (pelaaja1.Position.X > (vihollinen.Position.X + 200))
107            {
108                vihollinen.Hit(oikealle);
109                return;
110            }
111            else
112            {
113                if (pelaaja1.Position.Y > -350)
114                {
115                    return;
116                }
117                vihollinen.Jump(hyppyVoima);
118            }
119        }
120
121
122
123        void luoKentta()
124        {
125            Level.CreateBorders();
126            Level.Background.CreateGradient(Color.Blue, Color.Red);
127            Gravity = new Vector(0, -1000);
128
129
130            lisaaTaso(-200, -400);
131            lisaaTaso(0, -300);
132            lisaaTaso(-450, -300);
133
134            lisaaPelaajat();
135            LuoVihollinen();
136            Camera.Follow(pelaaja1);
137            lisaaNappaimet();
138        }
139
140        void lisaaTaso(double x, double y)
141        {
142            PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
143            taso.Color = Color.Gray;
144            taso.X = x;
145            taso.Tag = "taso";
146            taso.Y = y;
147            Add(taso);
148        }
149
150        void lisaaPelaajat()
151        {
152            pelaaja1 = new PlatformCharacter(50, 50);
153            pelaaja1.Mass = 10.0;
154            pelaaja1.Image = LoadImage("Hero");
155            pelaaja1.X = 0;
156            pelaaja1.Y = Level.Bottom + 120;
157            pelaaja1.Tag = "pelaaja1";
158            Add(pelaaja1);
159
160            m16 = new AssaultRifle(100, 30);
161            m16.Ammo.Value = 10000;
162            pelaaja1.Add(m16);
163            m16.Image = LoadImage("m16_levea");
164            m16.TimeBetweenUse = new TimeSpan(1500000);
165            m16.BulletCollision = LuotiOsuu;
166            pelaaja1.Weapon = m16;
167            valittuase = m16;
168
169            // TODO: Panokset lentämään suorempaan
170        }
171        void LuotiOsuu(PhysicsObject ammus, PhysicsObject kohde)
172        {
173            if (kohde.Tag.ToString() == "vihollinen")
174            {
175                enemyHitpoints -= 1;
176                if (enemyHitpoints == 0)
177                {
178                    Explosion PAM = new Explosion(100);
179                    PAM.Force = 100;
180                    PAM.MaxRadius = 100;
181                    PAM.Position = vihollinen.Position;
182                    Add(PAM);
183                    pisteLaskuri.Value += 10;
184                    vihollinen.Destroy();
185                    Glock17 = new PhysicsObject(100, 30, Shapes.Rectangle);
186                    // TODO: aseta aseen paikka
187                    Glock17.Image = LoadImage("Glock 17");
188                    Add(Glock17);
189                    AddCollisionHandler(Glock17, KeraaAse);
190                }
191            }
192            if (kohde.Tag.ToString() != "pelaaja1")
193            {
194                ammus.Destroy();
195            }
196        }
197        void KeraaAse(PhysicsObject Glock17, PhysicsObject kohde)
198        {
199            if (kohde == pelaaja1)
200            {
201                Glock17.Destroy();
202                glockenabled = true;
203            }
204
205        }
206        void LuotiOsuux(PhysicsObject ammus, PhysicsObject kohde)
207        {
208            if (kohde.Tag.ToString() == "pelaaja1")
209            {
210                pelaajaHitpoints -= 1;
211                if (pelaajaHitpoints == 0)
212                {
213                    Explosion PAM = new Explosion(100);
214                    PAM.Force = 100;
215                    PAM.MaxRadius = 150;
216                    PAM.Position = pelaaja1.Position;
217                    Add(PAM);
218                    pelaaja1.Destroy();
219                }
220            }
221
222            if (kohde.Tag.ToString() != "vihollinen")
223            {
224                ammus.Destroy();
225            }
226
227        }
228
229        void LuoVihollinen()
230        {
231            vihollinen = new PlatformCharacter(50, 50);
232            vihollinen.Mass = 10.0;
233            vihollinen.Image = LoadImage("enemy");
234            vihollinen.X = 200;
235            vihollinen.Y = Level.Bottom + 120;
236            vihollinen.Tag = "vihollinen";
237            Add(vihollinen);
238
239            Glock = new AssaultRifle(100, 30);
240            Glock.Ammo.Value = 10000;
241            Glock.Image = LoadImage("Glock 17");
242            Glock.TimeBetweenUse = new TimeSpan(3000000);
243            vihollinen.Weapon = Glock;
244            Glock.BulletCollision = LuotiOsuux;
245
246        }
247        void LuoVihollinen2()////////////////////////////////////////////////////////////////////////////////////////////////////////
248        {
249            vihollinen2 = new PlatformCharacter(50, 50);
250            vihollinen2.Mass = 10.0;
251            vihollinen2.Image = LoadImage("enemy");
252            vihollinen2.X = -400;
253            vihollinen2.Y = Level.Bottom + 120;
254            vihollinen2.Tag = "vihollinen2";
255            Add(vihollinen2);
256
257            Glock = new AssaultRifle(100, 30);
258            Glock.Ammo.Value = 10000;
259            Glock.Image = LoadImage("Glock 17");
260            Glock.TimeBetweenUse = new TimeSpan(3000000);
261            vihollinen2.Weapon = Glock;
262            Glock.BulletCollision = LuotiOsuux;
263
264        }
265        void lisaaNappaimet()
266        {
267            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
268            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
269
270            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
271            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
272            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
273            Mouse.Listen(MouseButton.Left, ButtonState.Down, shoot, "ammu");
274            Mouse.ListenMovement(0.0, tahtax_, null); // 0.0 tarkottaa että hiirtä ei tarvi liikuttaa, että aliohjelmaa tahtax_ kutsutaan
275            Mouse.Listen(MouseButton.Right, ButtonState.Pressed, ChangeWeapon, "Vaihda asetta");
276        }
277        void ChangeWeapon()
278        {
279            if (glockenabled == true)
280            {
281                if (pelaaja1.Weapon == m16)
282                {
283                    MessageDisplay.Add("M16 Glockiin");
284                    pelaaja1.Weapon.IsVisible = false;         
285                    Glock = new AssaultRifle(100, 30);
286                    pelaaja1.Weapon = Glock;
287                    valittuase = Glock;
288
289                    Glock.Ammo.Value = 14;
290                    Glock.Image = LoadImage("Glock 17");
291                    Glock.TimeBetweenUse = new TimeSpan(3000000);
292                    Glock.BulletCollision = LuotiOsuu;
293                    return;
294                }
295                else if (pelaaja1.Weapon == Glock)
296                {
297                    MessageDisplay.Add("Glock M16:een");
298                    //pelaaja1.Weapon = m16;
299                }
300            }
301
302        }
303
304        void tahtax_(AnalogState tila)
305        {
306
307            tahtain.Position = Mouse.PositionOnWorld;
308            if (tahtain.Position.X < pelaaja1.Position.X)
309            {
310                pelaaja1.Image = LoadImage("Hero2");
311                if (valittuase == Glock)
312                {
313                    valittuase.Image = LoadImage("Glock 17_2");
314                    return;
315                }
316                valittuase.Image = LoadImage("m16_levea2");
317            }
318            else if (tahtain.Position.X > pelaaja1.Position.X)
319            {
320                pelaaja1.Image = LoadImage("Hero");
321                if (valittuase == Glock)
322                {
323                    valittuase.Image = LoadImage("Glock 17");
324                    return;
325                }
326                valittuase.Image = LoadImage("m16_levea");
327            }
328            tahtaa = Mouse.PositionOnWorld - pelaaja1.Position;
329            if (valittuase == Glock)
330            {
331                Glock.Angle = tahtaa.Angle;
332            }
333            m16.Angle = tahtaa.Angle;
334        }
335
336        void shoot()
337        {
338            valittuase.Use();
339        }
340
341        void liikuta(PlatformCharacter hahmo, double nopeus)
342        {
343            hahmo.Walk(nopeus);
344        }
345
346        void hyppaa(PlatformCharacter hahmo, double voima)
347        {
348            hahmo.Jump(voima);
349        }
350    }
351}
Note: See TracBrowser for help on using the repository browser.