source: 2017/23/JaakkoS/Makkarajono/Makkarajono/Makkarajono/Makkarajono.cs @ 8466

Revision 8466, 20.0 KB checked in by nupeohje, 3 years ago (diff)

basicly wrote 300 rows more code and finished teh game

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Makkarajono : PhysicsGame
10{
11    public static PhysicsGame Game;
12    public static List<Platform> Platforms = new List<Platform>();
13
14    public static void Add (PhysicsObject Object)
15    {
16        Game.Add(Object);
17    }
18
19    Label timeScreenP;
20    Timer timeTimer;
21    IntMeter p1Points;
22    IntMeter p2Points;
23    IntMeter timeCounterSeconds;
24    IntMeter timeCounterMinutes;
25    bool gameIsStarted = false;
26    bool blockLeft = false;
27    bool blockRight = false;
28    double Multiplier1 = 0.0;
29    double Multiplier2 = 0.0;
30    public static PlatformCharacter2 player;
31    public static PlatformCharacter2 player2;
32    PlatformCharacter2 bot1;
33    PhysicsObject block;
34    GameObject icon1;
35    GameObject icon2;
36    Image playerImage = LoadImage("Huggo");
37    Image player2Image = LoadImage("Huggouggo");
38    Image p1Icon = LoadImage("P1icon");
39    Image p2Icon = LoadImage("P2icon");
40    Image blockImage = LoadImage("Palikka");
41    Image platImage = LoadImage("Frame");
42    private Animation p1Punch;
43    private Animation P1WalkAnim;
44    private Animation p2Punch;
45    private Animation P2WalkAnim;
46    string p1name;
47    string p2name;
48    SoundEffect punchNoice1  = LoadSoundEffect("hitSound1");
49    Image[] Panim1Kuvat = LoadImages("P1animP/P1animP", 1, 7, false);
50    Image[] RanimKuvat = LoadImages("P1animR/Wanim", 1, 9, false);
51    Image[] Panim2Kuvat = LoadImages("P2animP/huggouggopanim", 1, 7, false);
52    Image[] Ramin2Kuvat = LoadImages("P2animR/HuggouggoWanim", 1, 9, false);
53    MultiSelectWindow StartMenu;
54    InputWindow nameAsk;
55
56    bool isAttacking = false;
57    bool isAttacking2 = false;
58
59    List<Vector> Spawnpoints = new List<Vector>();
60
61    protected override void OnExiting(object sender, EventArgs args)
62    {
63        if(gameIsStarted)
64        Platform.PlatformThread.Abort();
65        base.OnExiting(sender, args);
66    }
67
68    public override void Begin()
69    {
70        ClearAll();
71
72        StartMenu = new MultiSelectWindow("Welcome!", "Start", "Exit");
73        StartMenu.AddItemHandler(0, AskNames, false);
74        StartMenu.AddItemHandler(1, Exit);
75        Add(StartMenu);
76    }
77
78    void StartGame()
79    {
80
81        ClearAll();
82        Multiplier1 = 0;
83        Multiplier2 = 0;
84        gameIsStarted = true;
85        SmoothTextures = false;
86        p1Punch = new Animation(Panim1Kuvat);
87        p2Punch = new Animation(Panim2Kuvat);
88        p2Punch.FPS = 30;
89        p1Punch.FPS = 30;
90        P1WalkAnim = new Animation(RanimKuvat);
91        P2WalkAnim = new Animation(Ramin2Kuvat);
92        Game = this;
93        if (Platform.PlatformThread == null)
94            Platform.InitializePlatformThread();
95        else
96            Platform.DisabledPlatforms.Clear();
97
98        CreateLevel("Level1");
99    }
100
101    void AskNames(bool isQuoestion2)
102    {
103        ClearAll();
104        if (!isQuoestion2)
105        {
106            nameAsk = new InputWindow("Gimme ur name player 1");
107            nameAsk.MaxCharacters = 20;
108            nameAsk.TextEntered += delegate { ProcessNameInput(nameAsk, false); };
109            Add(nameAsk);
110        }
111        else
112        {
113            nameAsk = new InputWindow("Gimme ur name player 2");
114            nameAsk.TextEntered += delegate{ ProcessNameInput(nameAsk, true); };
115            nameAsk.MaxCharacters = 20;
116            Add(nameAsk);
117            nameAsk.Closed += delegate { StartGame(); };
118        }
119    }
120
121    void ProcessNameInput(InputWindow _window, bool isPlayer2)
122    {
123        if (!isPlayer2)
124        {
125            p1name = _window.InputBox.Text;
126            AskNames(true);
127        }
128        else
129            p2name = _window.InputBox.Text;
130    }
131
132    private double Clamp(double value, double min, double max)
133    {
134        return Math.Min(Math.Max(value, min), max);
135    }
136
137    private double GetCameraRadiusX ()
138    {
139        return Camera.ScreenToWorld(new Vector(Screen.Right, 0)).X - Camera.ScreenToWorld(Vector.Zero).X;
140    }
141
142    private double GetCameraRadiusY()
143    {
144        return Camera.ScreenToWorld(new Vector(Screen.Bottom, 0)).Y - Camera.ScreenToWorld(Vector.Zero).Y;
145    }
146
147    private double TimeLeft = 3589;
148
149    protected override void Update(Time time)
150    {
151        base.Update(time);
152
153        if (gameIsStarted)
154        {
155           
156            Camera.Position = Vector.Average(player.Position, player2.Position);
157
158            if (Camera.ScreenToWorld(new Vector(Screen.Right, 0)).X >= 660)
159                Camera.Position = new Vector(660 - GetCameraRadiusX(), Camera.Position.Y);
160            else if (Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X <= -660)
161                Camera.Position = new Vector(-660 + GetCameraRadiusX(), Camera.Position.Y);
162
163            if (Camera.ScreenToWorld(new Vector(Screen.Bottom, 0)).Y <= -100)
164                Camera.Position = new Vector(Camera.Position.X, -100 + GetCameraRadiusY());
165
166            Camera.ZoomFactor = Clamp(1.0 / (Vector.Distance(player.Position, player2.Position) * 0.001), 0.99, 2);
167        }
168    }
169
170    void CreateLevel(string _levelImage) 
171    {
172        ColorTileMap _level = ColorTileMap.FromLevelAsset(_levelImage);
173        _level.SetTileMethod("#FFFFFFFF", (Vector _pos, double x, double y) =>
174        {
175            Spawnpoints.Add(_pos);
176        });
177        _level.Execute(50, 50);
178
179        _level = ColorTileMap.FromLevelAsset(_levelImage);
180        _level.SetTileMethod("#FFFFFF00", AddPlayer, true);
181        _level.SetTileMethod("#FF0000FF", AddPlayer, false);
182        _level.Execute(50, 50);
183
184        _level = ColorTileMap.FromLevelAsset(_levelImage);
185        _level.SetTileMethod("FF0000", AddPlatform);         
186        _level.SetTileMethod("000000", AddBlock);
187       
188        _level.Execute(50, 50);
189       
190        Gravity = new Vector(0, -500);
191
192        Surface bottomBorder = Surface.CreateBottom(Level, 100, 100, 4);
193        bottomBorder.Tag = "BBorder";
194        Add(bottomBorder);
195        Surface leftBorder = Surface.CreateLeft(Level, 100, 100, 4);
196        leftBorder.Tag = "LBorder";
197        Add(leftBorder);
198        Surface rightBorder = Surface.CreateRight(Level, 100, 100, 4);
199        rightBorder.Tag = "RBorder";
200        Add(rightBorder); 
201        Surface topBorder = Surface.CreateTop(Level, 100, 100, 4);
202        rightBorder.Tag = "TBorder";
203        Add(rightBorder);
204        AddCollisionHandler(bottomBorder, HitBorder);
205        AddCollisionHandler(leftBorder, HitBorder);
206        AddCollisionHandler(rightBorder, HitBorder);
207        AddCollisionHandler(topBorder, HitBorder);
208
209        AddIcon(p1Icon, Screen.Left + 30, Screen.Top - 30, 50, 50, p1name, Screen.Left + 80, Screen.Top - 30, false);
210        AddIcon(p2Icon, Screen.Right - 30, Screen.Top - 30, 50, 50, p2name, Screen.Right - 80, Screen.Top - 30, true);
211        AddTimeCounter();
212    }
213
214    void AddPlayer(Vector _pos, double x, double y, bool isPlayer2)
215    {
216        if (isPlayer2)
217        {
218            player2 = new PlatformCharacter2(x / 2, y);
219            player2.Shape = Shape.Circle;
220            player2.Color = Color.HotPink;
221            player2.Image = player2Image;
222            player2.StaticFriction = 0;
223            player2.KineticFriction = 0;
224            player2.LinearDamping = 1;
225            player2.AngularDamping = 1;
226            player2.Position = Spawnpoints[RandomGen.NextInt(0, Spawnpoints.Count - 1)];
227            player2.CanRotate = false;
228            player2.CollisionIgnoreGroup = 2;
229            player2.Tag = "player";
230            Add(player2);
231            AddControlls(player2);
232
233            Timer ajastin = new Timer();
234            ajastin.Interval = 0.05;
235            ajastin.Timeout += delegate
236            {
237                List<GameObject> left = GetObjectsAt(player2.Position + new Vector(-player2.Width / 2 - 1, 0));
238                List<GameObject> right = GetObjectsAt(player2.Position + new Vector(player2.Width / 2 + 1, 0));
239
240                left.RemoveAll(o => o.Tag.ToString() != "Block");
241                right.RemoveAll(o => o.Tag.ToString() != "Block");
242
243                blockRight = right.Count > 0;
244                blockLeft = left.Count > 0;
245
246                if (blockRight || blockLeft)
247                {
248                    player2.StopVertical();
249                }
250            };
251                ajastin.Start();
252        }
253        else
254        {
255            player = new PlatformCharacter2(x / 2, y);
256            player.Shape = Shape.Circle;
257            player.Color = Color.HotPink;
258            player.Image = playerImage;
259            player.StaticFriction = 0;
260            player.KineticFriction = 0;
261            player.LinearDamping = 1;
262            player.AngularDamping = 1;
263            player.Position = Spawnpoints[RandomGen.NextInt(0, Spawnpoints.Count - 1)];
264            player.CanRotate = false;
265            player.CollisionIgnoreGroup = 1;
266            player.Tag = "player";
267            Add(player);
268            AddControlls(player);
269
270            Timer ajastin = new Timer();
271            ajastin.Interval = 0.05;
272            ajastin.Timeout += delegate
273            {
274                List<GameObject> left = GetObjectsAt(player.Position + new Vector(-player.Width / 2 - 1, 0));
275                List<GameObject> right = GetObjectsAt(player.Position + new Vector(player.Width / 2 + 1, 0));
276
277                left.RemoveAll(o => o.Tag.ToString() != "Block");
278                right.RemoveAll(o => o.Tag.ToString() != "Block");
279
280                blockRight = right.Count > 0;
281                blockLeft = left.Count > 0;
282
283                if (blockRight || blockLeft)
284                {
285                    player.StopVertical();
286                }
287            };
288            ajastin.Start();
289        }
290       
291    }
292
293    void GetDown (bool isPlayer2)
294    {
295        foreach (Platform platform in Platforms)
296        {
297            platform.Process(false, isPlayer2);
298        }
299    }
300
301    void HitBorder(PhysicsObject collider, PhysicsObject target)
302    {
303        target.Position = Spawnpoints[RandomGen.NextInt(0, Spawnpoints.Count - 1)];
304        if (target == player)
305        {
306            p2Points.Value += 1;
307            Multiplier2 = 0;
308        }
309        else
310        {
311            p1Points.Value += 1;
312            Multiplier1 = 0;
313        }
314    }
315
316    void AddControlls(PlatformCharacter2 _player)
317    {
318        if (_player == player)
319        {
320            _player.AnimWalk = P1WalkAnim;
321            _player.AnimIdle = playerImage;
322        }
323        else
324        {
325            _player.AnimWalk = P2WalkAnim;
326            _player.AnimIdle = player2Image;
327        }
328
329        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
330
331        if (_player == player)
332        {
333            Keyboard.Listen(Key.A, ButtonState.Down, delegate { 
334            if(!isAttacking)
335                _player.Walk(Direction.Left);
336            }, null);
337            Keyboard.Listen(Key.A, ButtonState.Released, delegate { _player.StopHorizontal(); }, null);
338            Keyboard.Listen(Key.D, ButtonState.Down, delegate { 
339                if(!isAttacking)
340                _player.Walk(Direction.Right); }, null);
341            Keyboard.Listen(Key.D, ButtonState.Released, delegate { _player.StopHorizontal(); }, null);
342            Keyboard.Listen(Key.W, ButtonState.Pressed, delegate {
343                if(!isAttacking)
344                Jump(_player, true); }, null);
345            Keyboard.Listen(Key.S, ButtonState.Down, GetDown, null, false);
346            Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate
347            {
348                if (_player.FacingDirection == Direction.Left)
349                    Punch(_player, player2, true, Multiplier1);
350
351                if (_player.FacingDirection == Direction.Right)
352                    Punch(_player, player2, false, Multiplier1);
353
354            }, null);
355        }
356        if (_player == player2)
357        {
358            Keyboard.Listen(Key.Left, ButtonState.Down, delegate { 
359                if(!isAttacking2)
360                _player.Walk(Direction.Left); }, null);
361            Keyboard.Listen(Key.Left, ButtonState.Released, delegate {
362                if(!isAttacking2)
363                _player.StopHorizontal(); }, null);
364            Keyboard.Listen(Key.Right, ButtonState.Down, delegate { _player.Walk(Direction.Right); }, null);
365            Keyboard.Listen(Key.Right, ButtonState.Released, delegate { _player.StopHorizontal(); }, null);
366            Keyboard.Listen(Key.Up, ButtonState.Pressed, delegate {
367                if(!isAttacking2)
368                Jump(_player, true); }, null);
369            Keyboard.Listen(Key.Down, ButtonState.Down, GetDown, null, true);
370            Keyboard.Listen(Key.RightControl, ButtonState.Pressed, delegate
371            {
372                if (_player.FacingDirection == Direction.Left)
373                    Punch(_player, player, true, Multiplier2);
374
375                if (_player.FacingDirection == Direction.Right)
376                    Punch(_player, player, false, Multiplier2);
377
378            }, null);
379        }
380    }
381
382    void AddPlatform(Vector _pos, double x, double y)
383    {
384        Platforms.Add(new Platform(_pos.X, _pos.Y, x, y, platImage));
385    }
386
387    void AddBlock(Vector _pos, double x, double y)
388    {
389        block = new PhysicsObject(x, y);
390        block.Position = _pos;
391        block.Color = Color.Black;
392        block.Image = blockImage;
393        block.StaticFriction = 0;
394        block.Tag = "Block";
395        block.TextureWrapSize = new Vector(x / 50.0, y / 50.0);
396        block.MakeStatic();
397        Add(block);
398    }
399
400    void AddBot(Vector _pos, double x, double y)
401    {
402        bot1 = new PlatformCharacter2(x/2, y);
403        bot1.Position = _pos;
404        bot1.Shape = Shape.Rectangle;
405        bot1.Color = Color.HotPink;
406        bot1.CollisionIgnoreGroup = 1;
407        bot1.KineticFriction = 0;
408        bot1.StaticFriction = 0;
409        bot1.Tag = "Bot1";
410        Add(bot1);
411    }
412
413    void AddIcon(Image _iconPic, double x, double y, double _widht, double _height, string _name, double textWidht, double textHeight, bool isIcon2)
414    {
415        if (isIcon2)
416        {
417            icon2 = new Label(_widht, _height);
418            icon2.Image = _iconPic;
419            icon2.X = x;
420            icon2.Y = y;
421            //_icon.Position = Camera.ScreenToWorld(new Vector(x, y));
422            Layers[3].RelativeTransition = Vector.Zero;
423            Layers[3].IgnoresZoom = true;
424            Add(icon2, 3);
425
426            p2Points = new IntMeter(0);
427
428            Label pointScreen = new Label();
429            pointScreen.X = icon2.X - 20;
430            pointScreen.Y = icon2.Y - 50;
431            pointScreen.Title = "Points";
432
433            pointScreen.BindTo(p2Points);
434            Add(pointScreen);
435        }
436        else
437        {
438            icon1 = new Label(_widht, _height);
439            icon1.Image = _iconPic;
440            icon1.X = x;
441            icon1.Y = y;
442            //_icon.Position = Camera.ScreenToWorld(new Vector(x, y));
443            Layers[3].RelativeTransition = Vector.Zero;
444            Layers[3].IgnoresZoom = true;
445            Add(icon1, 3);
446
447            p1Points = new IntMeter(0);
448
449            Label pointScreen = new Label();
450            pointScreen.X = icon1.X + 20;
451            pointScreen.Y = icon1.Y - 50;
452            pointScreen.Title = "Points";
453
454            pointScreen.BindTo(p1Points);
455            Add(pointScreen);
456        }
457     
458        AddPlayerNames(_name, textWidht, textHeight,isIcon2);
459    }
460
461    void AddPlayerNames(string _name, double x, double y, bool isIcon2)
462    {
463        Label nameField = new Label(_name.Length * 13, 30, _name);
464        nameField.X = x;
465        nameField.Y = y;
466        Layers[3].RelativeTransition = Vector.Zero;
467        Layers[3].IgnoresZoom = true;
468        Add(nameField, 3);
469
470        if (isIcon2)
471            nameField.X = icon2.Left - nameField.Width / 2.0;
472        else
473            nameField.X = icon1.Right + nameField.Width / 2.0;
474       
475        //if (_name == p2name)
476        //{
477        //    while (nameField.Left < icon2.Right)
478        //        nameField.X -= 1;
479        //}
480    }
481
482    void MovePlayer(PhysicsObject _object, Vector _vector)
483    {
484        _object.Velocity = _vector;
485    }
486
487    void Jump(PlatformCharacter2 character, bool isPlayer2)
488    {
489        if (blockLeft)
490        {
491            character.ForceJump(400);
492            character.Hit(new Vector(200, 0));
493        }
494        else if (blockRight)
495        {
496            character.ForceJump(600);
497            character.Hit(new Vector(-200, 0));
498        }
499        else
500        {
501            character.Jump(400);
502           
503        }
504
505        foreach (Platform platform in Platforms)
506        {
507            platform.Process(true, isPlayer2);
508        }
509    }
510
511    void Punch(PlatformCharacter2 _player, PlatformCharacter2 _object, bool left, Double _multiplier)
512    {
513        if (left)
514        {
515            if (_player.Left - 20 < _object.Right && _player.Left > _object.Right - 6)
516            {
517                punchNoice1.Play();
518
519
520                _object.Push(new Vector(-1500 * _multiplier, 100 * _multiplier));
521                if (_player == player)
522                    Multiplier1 += 2;
523
524                else
525                    Multiplier2 += 2;
526            }
527        }
528
529        if (!left)
530        {
531            if (_player.Right + 20 > _object.Left && _player.Right < _object.Left + 6)
532            {
533                punchNoice1.Play();
534                _object.Push(new Vector(1500 * _multiplier, 100 * _multiplier));
535               
536                if (_player == player)
537                    Multiplier1 += 2;
538
539                else
540                    Multiplier2 += 2;
541            }
542        }
543        if (_player == player)
544        {
545            isAttacking = true;
546
547            _player.PlayAnimation(p1Punch, () =>
548                {
549                    _player.Stop();
550                    Timer.SingleShot(0.5, delegate { isAttacking = false; });
551                });
552        }
553        else
554        {
555            isAttacking2 = true;
556            _player.PlayAnimation(p2Punch, () =>
557            {
558                _player.Stop();
559                Timer.SingleShot(0.5, delegate { isAttacking2 = false; });
560            });
561        }
562    }
563
564    void AddTimeCounter()
565    {
566        timeCounterSeconds = new IntMeter(60);
567        timeCounterMinutes = new IntMeter(1);
568
569        timeTimer = new Timer();
570        timeTimer.Interval = 1;
571        timeTimer.Timeout += delegate { CountDown();};
572        timeTimer.Start();
573
574        timeScreenP = new Label();
575        timeScreenP.TextColor = Color.White;
576        timeScreenP.DecimalPlaces = 1;
577        timeScreenP.Text = timeCounterMinutes + ":" + timeCounterSeconds;
578        timeScreenP.X = Screen.Center.X;
579        timeScreenP.Y = Screen.Top - 20;
580        Add(timeScreenP, 3);
581    }
582
583    void CountDown()
584    {
585        timeCounterSeconds.Value -= 1;
586        if(timeCounterSeconds >= 10)
587        timeScreenP.Text = timeCounterMinutes + ":" + timeCounterSeconds;
588
589        else
590            timeScreenP.Text = timeCounterMinutes + ":0" + timeCounterSeconds;
591
592        if (timeCounterSeconds.Value <= 0 && timeCounterMinutes > 0)
593        {
594            timeCounterMinutes.Value -= 1;
595            timeCounterSeconds.Value += 60;
596        }
597        if (timeCounterSeconds.Value <= 0 && timeCounterMinutes == 0)
598        {
599            WinScreen();
600        }
601       
602    }
603
604    void WinScreen()
605    {
606        if(p1Points > p2Points)
607        {
608            MessageWindow winScreen = new MessageWindow(p1name + " won!");
609            winScreen.Closed += delegate { Begin(); };
610            Add(winScreen);
611        }
612        else
613        {
614            MessageWindow winScreen = new MessageWindow(p2name + " won!");
615            winScreen.Closed += delegate { Begin(); };
616            Add(winScreen);
617        }
618    }
619
620}
Note: See TracBrowser for help on using the repository browser.