source: 2010/24/danmarti/Vantaa 2001/Peli.cs @ 940

Revision 940, 9.2 KB checked in by danmarti, 10 years ago (diff)

Meleeviholliset toimii, kävelevät eteenpäin ja hyppivät. Säädettiin aseita toimivammiksi

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    PlatformCharacter Player1;
9    PlatformCharacter Player2;
10
11    IntMeter LifeP1;
12    IntMeter LifeP2;
13    ValueDisplay LifeMeterP1;
14    ValueDisplay LifeMeterP2;
15
16    const double Speed = 200;
17    const double meleeWalkingSpeed = -200;
18    const double JumpStr = 2000;
19    const int TileWidth = 50;
20    const int TileHeight = 50;
21
22    Vector RespawnCoord;
23
24    protected override void Begin()
25    {
26        SetWindowSize(1024, 720, false);
27        ShowMenu();
28    }
29
30    void ShowMenu()
31    {
32
33        MediaPlayer.Play("Split In Synapse");
34        Image bg = LoadImage("menubg");
35        Level.Background.Image = bg;
36        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
37        Keyboard.Listen(Key.Enter, ButtonState.Pressed, StartGame, null);
38    }
39
40    void StartGame()
41    {
42        Image bg = Image.CreateGradient((int)Screen.Width, (int)Screen.Height, Color.LightBlue, Color.Blue);
43        // Image bg = LoadImage("kuvannimi");
44        Level.Background.Image = bg;       
45        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
46        Level.Background.MovesWithCamera = false;
47
48        LifeP1 = new IntMeter(3); // Pelaajan 1 osumat
49        LifeP2 = new IntMeter(3); // Pelaajan 2 osumat
50        LifeMeterP1 = new ValueDisplay();
51        LifeMeterP2 = new ValueDisplay();
52        LifeMeterP1.X = Screen.Left + 100;
53        LifeMeterP1.Y = Screen.Top - 100;
54        LifeMeterP2.X = Screen.Right - 500;
55        LifeMeterP2.Y = Screen.Top - 100;
56        LifeMeterP1.BindTo(LifeP1);
57        LifeMeterP2.BindTo(LifeP2);
58
59        StartCoop();
60
61    }
62
63    void StartCoop()
64    {
65        Gravity = new Vector(0, -1000);
66        CreateLevel();
67        Add(LifeMeterP1);
68        Add(LifeMeterP2);
69        Camera.Follow(Player1);
70        Controls();
71    }
72
73
74
75    PlatformCharacter CreatePlayer()
76    {
77        PlatformCharacter Player = new PlatformCharacter(40, 60);
78        Player.Mass = 4.0;
79        Add(Player);
80        Player.Color = Color.Black;
81        Player.KineticFriction = 0;
82        Player.StaticFriction = 0;
83        Player.LinearDamping = 1;
84        Player.Tag = "Player";
85
86        LaserGun Weapon = new LaserGun(20, 5);
87        Weapon.X = 0;
88        Weapon.LaserCollision = LaserCollide;
89
90        //Weapon.AttackSound = null;
91        Weapon.IsVisible = false;
92        Weapon.TimeBetweenUse = new TimeSpan(0, 0, 0, 0, 250);
93
94        Player.Weapon = Weapon;
95        return Player;
96
97    }
98
99    PlatformCharacter CreateMelee()
100    {
101        Melee Melee = new Melee(40, 65, meleeWalkingSpeed);
102        Melee.isAlive = true;
103        Melee.Mass = 3.0;
104        Melee.Color = Color.Red;
105        Melee.KineticFriction = 0.1;
106        Melee.StaticFriction = 0.1;
107        Melee.Tag = "Melee";
108        AddCollisionHandler(Melee, EnemyPlayerCollision);
109        Melee.CanRotate = false;
110        //Add(Melee);
111        Melee.Tag = "Melee";
112        return Melee;
113
114    }
115
116    void CreateLevel()
117    {
118        TileMap Tiles = TileMap.FromFile("BetaMap.txt");
119        Tiles['x'] = CreatePit;
120        Tiles['f'] = CreateFloor;
121        Tiles['w'] = CreateWall;
122        Tiles['j'] = CreateJump;
123        Tiles['r'] = CreateRespawn;
124        Tiles['m'] = CreateMelee;
125        Tiles['1'] = StartP1;
126        Tiles['2'] = StartP2;
127        Tiles.Insert(TileWidth, TileHeight);
128    }
129
130
131
132    void Controls()
133    {
134        Keyboard.Listen(Key.A, ButtonState.Down, Walk, "Move left", Player1, -Speed);
135        Keyboard.Listen(Key.D, ButtonState.Down, Walk, "Move right", Player1, Speed);
136        Keyboard.Listen(Key.W, ButtonState.Down, Jump, "Jump", Player1, JumpStr);
137        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, "Ammu", Player1);
138
139
140        Keyboard.Listen(Key.Left, ButtonState.Down, Walk, "Move left", Player2, -Speed);
141        Keyboard.Listen(Key.Right, ButtonState.Down, Walk, "Move right", Player2, Speed);
142        Keyboard.Listen(Key.Up, ButtonState.Down, Jump, "Jump", Player2, JumpStr);
143        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", Player2);
144    }
145
146    void Ammu(PlatformCharacter player)
147    {
148        PhysicsObject ammus = player.Weapon.Shoot();
149        if(ammus != null)
150            ammus.IgnoresCollisionResponse = true;
151    }
152
153    void Walk(PlatformCharacter Character, double Speed)
154    {
155        Character.Walk(Speed);
156    }
157
158    void Jump(PlatformCharacter Character, double JumpStr)
159    {
160        Character.Jump(JumpStr);
161    }
162
163
164
165    PhysicsObject CreateFloor()
166    {
167        PhysicsObject Floor = PhysicsObject.CreateStaticObject(TileWidth, TileHeight);
168        return Floor;
169    }
170
171    PhysicsObject CreateWall()
172    {
173        PhysicsObject Wall = PhysicsObject.CreateStaticObject(TileWidth, TileHeight);
174        return Wall;
175    }
176
177    PhysicsObject CreateJump()
178    {
179        PhysicsObject Jump = PhysicsObject.CreateStaticObject(TileWidth, TileHeight);
180        Jump.IgnoresCollisionResponse = true;
181        Jump.IsVisible = false;
182        AddCollisionHandler(Jump, JumpCollide);
183        return Jump;
184    }
185
186    PhysicsObject CreateRespawn()
187    {
188        PhysicsObject Respawn = PhysicsObject.CreateStaticObject(50.0, 100.0);
189        Respawn.IgnoresCollisionResponse = true;
190        Respawn.IsVisible = false;
191        AddCollisionHandler(Respawn, RespawnCollision);
192        return Respawn;
193    }
194
195    PhysicsObject CreatePit()
196    {
197        PhysicsObject Pit = PhysicsObject.CreateStaticObject(50.0, 50.0);
198        Pit.IgnoresCollisionResponse = true;
199        Pit.IsVisible = false;
200        AddCollisionHandler(Pit, PitCollide);
201        return Pit;
202    }
203
204    void EnemyPlayerCollision(PhysicsObject Melee, PhysicsObject Target)
205    {
206        if (Target == Player1)
207        {
208            Death(Player1);
209        }
210        else if (Target == Player2)
211        {
212            Death(Player2);
213        }
214    }
215
216    void LaserCollide(PhysicsObject WProjectile, PhysicsObject Target)
217    {
218        // Jos lasersäde osuu viholliseen, niin vihollinen kuolee
219       
220        //if ((Target != Player1) && (Target != Player2))
221
222        if (Target.Tag.ToString() == "Melee")
223        {
224            WProjectile.Destroy(); // Tuhotaan ammus
225            Target.Destroy(); // Tuhotaan kohde
226        }
227
228        //if (Target.Tag.ToString() == "Player")
229        //{
230        //    WProjectile.Destroy();
231        //}
232
233    }
234
235    void PitCollide(PhysicsObject Pit, PhysicsObject Target)
236    {
237        if (Target == Player1)
238        {
239            Death(Player1);
240        }
241        else if (Target == Player2)
242        {
243            Death(Player2);
244        }
245    }
246
247    void JumpCollide(PhysicsObject Jump, PhysicsObject Target)
248    {
249        if (Target.Tag.ToString() == "Melee")
250        {
251            //Target.Push(new Vector(0,4000));
252            Target.Hit(new Vector(0, 4000));
253            //((PlatformCharacter)Target).Jump(JumpStr);
254        }
255    }
256
257
258    void Death(PlatformCharacter Player)
259    {
260        // Player.Weapon.Destroy(); // TODO: Aseen tuhoaminen ei toimi?
261        // TODO: Kun pelaaja törmää, nii ntätä kutsutaan joskus 2 kertaa!!
262       
263        if (Player == Player1)
264        {
265            if (Player2.IsDestroyed() == false)
266            {
267                Camera.Follow(Player2);
268            }
269            Player1.Destroy();
270            LifeP1.Value--;
271            if (LifeP1.Value == 0)
272            {
273                MessageDisplay.Add("Player 1 Has Died");
274            }
275
276        }
277        else if (Player == Player2)
278        {
279            Player2.Destroy();
280            LifeP2.Value--;
281            if (LifeP2.Value == 0)
282            {
283                MessageDisplay.Add("Player 2 Has Died");
284            }
285            Camera.Follow(Player1);
286        }
287
288        if ((Player1.IsDestroyed()) && (Player2.IsDestroyed()))
289        {
290            RespawnPlayers(RespawnCoord.X, RespawnCoord.Y + 10);
291            Camera.Follow(Player1);
292        }
293             
294
295    }
296
297    void EnemyDeath(PhysicsObject Enemy)
298    {
299        Enemy.Destroy();
300    }
301
302    void RespawnPlayers(double x, double y)
303    {
304
305
306        if (LifeP1 > 0)
307        {
308            Player1 = CreatePlayer();
309            Player1.X = x + 30;
310            Player1.Y = y;
311            Camera.Follow(Player1);
312        }
313        if (LifeP2 > 0)
314        {
315            Player2 = CreatePlayer();
316            Player2.X = x - 30;
317            Player2.Y = y;
318            if (LifeP1 == 0)
319            {
320                Camera.Follow(Player2);
321            }
322            else
323            {
324                Camera.Follow(Player1);
325            }
326
327        }
328        Controls();
329    }
330
331    void RespawnCollision(PhysicsObject RespawnLoc, PhysicsObject Player)
332    {
333        if ((Player == Player1) || (Player == Player2))
334        {
335            RespawnCoord = RespawnLoc.Position;
336        }
337    }
338
339    PhysicsObject StartP1()
340    {
341        Player1 = CreatePlayer();
342        return Player1;
343    }
344
345    PhysicsObject StartP2()
346    {
347        Player2 = CreatePlayer();
348        return Player2;
349    }
350
351
352}
Note: See TracBrowser for help on using the repository browser.