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

Revision 926, 7.1 KB checked in by danmarti, 10 years ago (diff)

Lyhennettiin koodia ja parannettiin kuolemasysteemiä

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 JumpStr = 2000;
18    const int TileWidth = 50;
19    const int TileHeight = 50;
20
21    Vector RespawnCoord;
22
23    protected override void Begin()
24    {
25        SetWindowSize(1024, 720, false);
26
27        LifeP1 = new IntMeter(3); // Pelaajan 1 osumat
28        LifeP2 = new IntMeter(3); // Pelaajan 2 osumat
29        LifeMeterP1 = new ValueDisplay();
30        LifeMeterP2 = new ValueDisplay();
31        LifeMeterP1.X = Screen.Left + 100;
32        LifeMeterP1.Y = Screen.Top - 100;
33        LifeMeterP2.X = Screen.Right - 500;
34        LifeMeterP2.Y = Screen.Top - 100;
35        LifeMeterP1.BindTo(LifeP1);
36        LifeMeterP2.BindTo(LifeP2);
37
38        StartCoop();
39    }
40
41    void ShowMenu()
42    {
43
44    }
45
46
47
48    void StartGame()
49    {
50        Gravity = new Vector(0, -1000);
51        CreateLevel();
52        CreatePlayer();
53        Camera.Follow(Player1);
54
55        Controls();
56    }
57
58    void StartCoop()
59    {
60        MediaPlayer.Play("Split In Synapse");
61        Gravity = new Vector(0, -1000);
62        CreateLevel();
63        Add(LifeMeterP1);
64        Add(LifeMeterP2);
65        Camera.Follow(Player1);
66
67        Controls();
68    }
69
70
71
72    PlatformCharacter CreatePlayer()
73    {
74        PlatformCharacter Player = new PlatformCharacter(40, 60);
75        Player.Mass = 4.0;
76        Add(Player);
77        Player.Color = Color.Black;
78        Player.KineticFriction = 0;
79        Player.StaticFriction = 0;
80        Player.LinearDamping = 1;
81
82        LaserGun Weapon = new LaserGun(20, 5);
83        Weapon.X = 50;
84        Weapon.LaserCollision = LaserCollide;
85
86        //Weapon.AttackSound = null;
87        Weapon.IsVisible = false;
88        Weapon.TimeBetweenUse = new TimeSpan(0, 0, 0, 0, 10);
89        Weapon.MaximumLifetime = new TimeSpan(1, 0, 0, 0, 0);
90
91        Player.Weapon = Weapon;
92        return Player;
93
94    }
95
96    PhysicsObject CreateEnemy()
97    {
98        PhysicsObject Enemy = new PhysicsObject(40, 65);
99        Enemy.Mass = 3.0;
100        Enemy.Color = Color.Red;
101        Enemy.KineticFriction = 0.1;
102        Enemy.StaticFriction = 0.1;
103        AddCollisionHandler(Enemy, EnemyPlayerCollision);
104        Enemy.CanRotate = false;
105        Add(Enemy);
106        return Enemy;
107
108    }
109
110    void CreateLevel()
111    {
112        TileMap Tiles = TileMap.FromFile("BetaMap.txt");
113        Tiles['x'] = CreatePit;
114        Tiles['f'] = CreateFloor;
115        Tiles['w'] = CreateWall;
116        Tiles['r'] = CreateRespawn;
117        Tiles['e'] = CreateEnemy;
118        Tiles['1'] = StartP1;
119        Tiles['2'] = StartP2;
120        Tiles.Insert(TileWidth, TileHeight);
121    }
122
123
124
125    void Controls()
126    {
127        Keyboard.Listen(Key.A, ButtonState.Down, Walk, "Move left", Player1, -Speed);
128        Keyboard.Listen(Key.D, ButtonState.Down, Walk, "Move right", Player1, Speed);
129        Keyboard.Listen(Key.W, ButtonState.Down, Jump, "Jump", Player1, JumpStr);
130        Keyboard.Listen(Key.Space, ButtonState.Down, Player1.Weapon.Use, "Ammu");
131
132
133        Keyboard.Listen(Key.Left, ButtonState.Down, Walk, "Move left", Player2, -Speed);
134        Keyboard.Listen(Key.Right, ButtonState.Down, Walk, "Move right", Player2, Speed);
135        Keyboard.Listen(Key.Up, ButtonState.Down, Jump, "Jump", Player2, JumpStr);
136    }
137
138    void Walk(PlatformCharacter Character, double Speed)
139    {
140        Character.Walk(Speed);
141    }
142
143    void Jump(PlatformCharacter Character, double JumpStr)
144    {
145        Character.Jump(JumpStr);
146    }
147
148
149
150    PhysicsObject CreateFloor()
151    {
152        PhysicsObject Floor = PhysicsObject.CreateStaticObject(50.0, 50.0);
153        return Floor;
154    }
155
156    PhysicsObject CreateWall()
157    {
158        PhysicsObject Wall = PhysicsObject.CreateStaticObject(50.0, 50.0);
159        return Wall;
160    }
161
162    PhysicsObject CreateRespawn()
163    {
164        PhysicsObject Respawn = PhysicsObject.CreateStaticObject(50.0, 100.0);
165        Respawn.IgnoresCollisionResponse = true;
166        Respawn.IsVisible = false;
167        AddCollisionHandler(Respawn, RespawnCollision);
168        return Respawn;
169    }
170
171    PhysicsObject CreatePit()
172    {
173        PhysicsObject Pit = PhysicsObject.CreateStaticObject(50.0, 50.0);
174        Pit.IgnoresCollisionResponse = true;
175        Pit.IsVisible = false;
176        AddCollisionHandler(Pit, PitCollide);
177        return Pit;
178    }
179
180    void EnemyPlayerCollision(PhysicsObject Enemy, PhysicsObject Target)
181    {
182        if (Target == Player1)
183        {
184            Death(Player1);
185        }
186        else if (Target == Player2)
187        {
188            Death(Player2);
189        }
190    }
191
192    void LaserCollide(PhysicsObject WProjectile, PhysicsObject Target)
193    {
194        if((Target!=Player1) || (Target!=Player2))
195            WProjectile.Destroy();
196        //EnemyDeath(Enemy);
197
198    }
199
200    void PitCollide(PhysicsObject Pit, PhysicsObject Target)
201    {
202        if (Target == Player1)
203        {
204            Death(Player1);
205        }
206        else if (Target == Player2)
207        {
208            Death(Player2);
209        }
210}
211
212
213    void Death(PlatformCharacter Player)
214    {
215            if (Player == Player1)
216            {
217                LifeP1.Value--;
218                if (Player2.IsDestroyed() == false)
219                {
220                    Camera.Follow(Player2);
221                }
222                Player1.Destroy();
223
224            }
225            else if (Player == Player2)
226            {
227                LifeP2.Value--;
228                Player2.Destroy();
229                Camera.Follow(Player1);
230            }
231       
232        if ((Player1.IsDestroyed()) && (Player2.IsDestroyed()))
233        {
234            RespawnPlayers(RespawnCoord.X, RespawnCoord.Y + 10);
235            Camera.Follow(Player1);
236        }
237
238    }
239
240    void EnemyDeath(PhysicsObject Enemy)
241    {
242        Enemy.Destroy();
243    }
244
245    void RespawnPlayers(double x, double y)
246    {
247
248
249        if (LifeP1 > 0)
250        {
251            Player1 = CreatePlayer();
252            Player1.X = x + 30;
253            Player1.Y = y;
254            Camera.Follow(Player1);
255        }
256        if (LifeP2 > 0)
257        {
258            Player2 = CreatePlayer();
259            Player2.X = x - 30;
260            Player2.Y = y;
261            if (LifeP1 == 0)
262            {
263                Camera.Follow(Player2);
264            }
265            else
266            {
267                Camera.Follow(Player1);
268            }
269
270        }
271        Controls();
272    }
273
274    void RespawnCollision(PhysicsObject RespawnLoc, PhysicsObject Player)
275    {
276        if ((Player == Player1) || (Player == Player2))
277        {
278            RespawnCoord = RespawnLoc.Position;
279        }
280    }
281
282    PhysicsObject StartP1()
283    {
284        Player1 = CreatePlayer();
285        return Player1;
286    }
287
288    PhysicsObject StartP2()
289    {
290        Player2 = CreatePlayer();
291        return Player2;
292    }
293
294
295}
Note: See TracBrowser for help on using the repository browser.