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

Revision 913, 5.8 KB checked in by danmarti, 13 years ago (diff)

Lisättiin respawn-systeemi ja parannettiin kamerasysteemiä. Helpotettiin mapin tekoa ja kokeiltiin aseita.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    PlatformCharacter Player1;
9    PlatformCharacter Player2;
10    IntMeter LifeP1;
11    IntMeter LifeP2;
12    ValueDisplay LifeMeterP1;
13    ValueDisplay LifeMeterP2;
14
15    const double Speed = 200;
16    const double JumpStr = 2000;
17    const int TileWidth = 50;
18    const int TileHeight = 50;
19
20    Vector RespawnCoord;
21
22    protected override void Begin()
23    {
24        SetWindowSize(1024, 720, false);
25       
26        LifeP1 = new IntMeter( 3 ); // Pelaajan 1 osumat
27        LifeP2 = new IntMeter( 3 ); // Pelaajan 2 osumat
28        LifeMeterP1 = new ValueDisplay();
29        LifeMeterP2 = new ValueDisplay();
30        LifeMeterP1.X = Screen.Left + 100;
31        LifeMeterP1.Y = Screen.Top - 100;
32        LifeMeterP2.X = Screen.Right - 500;
33        LifeMeterP2.Y = Screen.Top - 100;
34        LifeMeterP1.BindTo(LifeP1);
35        LifeMeterP2.BindTo(LifeP2);
36         
37        StartCoop();
38    }
39
40    void ShowMenu()
41    {
42
43    }
44
45
46
47    void StartGame()
48    {
49        Gravity = new Vector(0, -1000);
50        CreateLevel();
51        CreatePlayer();
52        Camera.Follow(Player1);
53
54        Controls();
55    }
56
57    void StartCoop()
58    {
59        MediaPlayer.Play("Split In Synapse");
60        Gravity = new Vector(0, -1000);
61        CreateLevel();
62        Add(LifeMeterP1);
63        Add(LifeMeterP2);
64        Camera.Follow(Player1);
65
66        Controls();
67    }
68
69
70
71    PlatformCharacter CreatePlayer()
72    {
73        PlatformCharacter Player = new PlatformCharacter(40, 60);
74        Player.Mass = 4.0;
75        Add(Player);
76        Player.Color = Color.Black;
77        Player.KineticFriction = 0;
78        Player.StaticFriction = 0;
79        Player.LinearDamping = 1;
80        LaserGun Weapon = new LaserGun( 20, 5 );
81        PhysicsObject WProjectile = Weapon.Shoot();
82        //Weapon.AttackSound = null;
83        Weapon.IsVisible=false;
84        Weapon.TimeBetweenUse = new TimeSpan(0,0,0,0,200);
85
86        Player.Weapon = Weapon;
87        return Player;
88
89    }
90
91    PhysicsObject CreateEnemy()
92    {
93        PhysicsObject Enemy = new PhysicsObject(40, 65);
94        Enemy.Mass = 3.0;
95        Enemy.Color = Color.Red;
96        Enemy.KineticFriction = 0.1;
97        Enemy.StaticFriction = 0.1;
98        AddCollisionHandler(Enemy, EnemyPlayerCollision);
99        Enemy.CanRotate = false;
100        Add(Enemy);
101        return Enemy;
102
103    }
104
105    void CreateLevel()
106    {
107        TileMap Tiles = TileMap.FromFile("BetaMap.txt");
108        Tiles['f'] = CreateFloor;
109        Tiles['r'] = CreateRespawn;
110        Tiles['e'] = CreateEnemy;
111        Tiles['1'] = StartP1;
112        Tiles['2'] = StartP2;
113        Tiles.Insert(TileWidth, TileHeight);
114    }
115
116
117
118    void Controls()
119    {
120        Keyboard.Listen(Key.A, ButtonState.Down, Walk, "Move left", Player1, -Speed);
121        Keyboard.Listen(Key.D, ButtonState.Down, Walk, "Move right", Player1, Speed);
122        Keyboard.Listen(Key.W, ButtonState.Down, Jump, "Jump", Player1, JumpStr);
123        Keyboard.Listen(Key.Space, ButtonState.Down, Player1.Weapon.Use, "Ammu");
124
125
126        Keyboard.Listen(Key.Left, ButtonState.Down, Walk, "Move left", Player2, -Speed);
127        Keyboard.Listen(Key.Right, ButtonState.Down, Walk, "Move right", Player2, Speed);
128        Keyboard.Listen(Key.Up, ButtonState.Down, Jump, "Jump", Player2, JumpStr);
129    }
130
131    void Walk(PlatformCharacter Character, double Speed)
132    {
133        Character.Walk(Speed);
134    }
135
136    void Jump(PlatformCharacter Character, double JumpStr)
137    {
138        Character.Jump(JumpStr);
139    }
140
141
142
143    PhysicsObject CreateFloor()
144    {
145        PhysicsObject Floor = PhysicsObject.CreateStaticObject(50.0, 50.0);
146        return Floor;
147    }
148
149    PhysicsObject CreateRespawn()
150    {
151        PhysicsObject Respawn = PhysicsObject.CreateStaticObject(50.0, 100.0);
152        Respawn.IgnoresCollisionResponse = true;
153        Respawn.IsVisible = false;
154        AddCollisionHandler(Respawn, RespawnCollision);
155        return Respawn;
156    }
157
158    void EnemyPlayerCollision(PhysicsObject Enemy, PhysicsObject Target)
159    {
160        if (Target is PlatformCharacter)
161        {
162            // Tarkista onko elämiä jäljellä
163            if (Target == Player1)
164            {
165                LifeP1.Value--;
166                Death(Player1);
167                if (Player2.IsDestroyed() == false)
168                {
169                    Camera.Follow(Player2);
170                }
171
172            }
173            else if (Target == Player2)
174            {
175                LifeP2.Value--;
176                Death(Player2);
177            }
178          }
179      }
180       
181
182    void Death(PlatformCharacter Player)
183    {
184        Player.Destroy();
185        if ((Player1.IsDestroyed()) && (Player2.IsDestroyed()))
186        {
187            RespawnPlayers(RespawnCoord.X, RespawnCoord.Y+10);
188        }
189       
190    }
191
192    void RespawnPlayers(double x, double y)
193    {
194        if(LifeP1 > 0)
195        {
196            Player1 = CreatePlayer();
197            Player1.X = x+30;
198            Player1.Y = y;
199            Camera.Follow(Player1);
200        }
201        if (LifeP2 > 0)
202        {
203            Player2 = CreatePlayer();
204            Player2.X = x - 30;
205            Player2.Y = y;
206            if (LifeP1 == 0)
207            {
208                Camera.Follow(Player2);
209            }
210            Controls();
211        }
212    }
213
214    void RespawnCollision(PhysicsObject RespawnLoc, PhysicsObject Player)
215    {
216        if ((Player == Player1) || (Player == Player2))
217        {
218            RespawnCoord = RespawnLoc.Position;
219        }
220    }
221
222    PhysicsObject StartP1()
223    {
224        Player1 = CreatePlayer();
225        return Player1;
226    }
227
228    PhysicsObject StartP2()
229    {
230        Player2 = CreatePlayer();
231        return Player2;
232    }
233
234
235}
Note: See TracBrowser for help on using the repository browser.