source: 2016/24/AnttuK/SUO/SUO/SUO/SUO.cs @ 7298

Revision 7298, 5.3 KB checked in by koannak, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class SUO : PhysicsGame
10{
11    Image plImg = LoadImage("Untitled");
12    PhysicsObject player;
13    IntMeter counter;
14
15
16    public override void Begin()
17    {
18        CreateCounter();
19        SetKeys();
20        SetLevel();
21        MediaPlayer.Play("music");
22        MediaPlayer.Volume = 0.5;
23        MediaPlayer.IsRepeating = true;
24    }
25    void CreateCounter()
26    {
27        counter = new IntMeter(0);
28        Label counterDisp = new Label();
29        counterDisp.X = Screen.Left + 100;
30        counterDisp.Y = Screen.Top - 100;
31        counterDisp.TextColor = Color.Black;
32        counterDisp.BindTo(counter);
33        counterDisp.Title = "Stars remaining";
34        Add(counterDisp);
35    }
36    void Restart(PhysicsObject obj1, PhysicsObject obj2)
37    {
38        ClearAll();
39        MessageDisplay.Add("You Lose! Try Again?");
40        CreateCounter();
41        SetKeys();
42        SetLevel();
43    }
44    void Win(PhysicsObject obj1, PhysicsObject obj2)
45    {
46        if (counter.Value == 0)
47        {
48            ClearAll();
49            MessageDisplay.Add("You Win!");
50            SetLevel();
51            Vector exampleMovement = new Vector(1, 0);
52            Mouse.IsCursorVisible = true;
53            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
54        }
55    }
56    void SetKeys()
57    {
58        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
59        Keyboard.Listen(Key.Left, ButtonState.Down, MovePlayer, null, new Vector(-50, 0));
60        Keyboard.Listen(Key.Right, ButtonState.Down, MovePlayer, null, new Vector(50, 0));
61        Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, null, new Vector(0, 50));
62        Keyboard.Listen(Key.Down, ButtonState.Down, MovePlayer, null, new Vector(0, -50));
63        Keyboard.Listen(Key.R, ButtonState.Down, Restart, null, player,player);
64    }
65    void SetLevel()
66    {
67       
68        TileMap tiles = TileMap.FromLevelAsset("level1");
69        tiles.SetTileMethod('#', CreateRect, Color.Gray);
70        tiles.SetTileMethod('P', CreatePlayer);
71        tiles.SetTileMethod('!', CreateEnemy);
72        tiles.SetTileMethod('^', CreateFlag);
73        tiles.SetTileMethod('@', CreateSafe);
74        tiles.SetTileMethod('$', CreateStar);
75        tiles.Execute(50,50);
76    }
77    void CreateRect(Vector pos, double width, double height, Color clr)
78    {
79        PhysicsObject tile = PhysicsObject.CreateStaticObject(width, height);
80        tile.Position = pos;
81        tile.Shape = Shape.Rectangle;
82        tile.Color = clr;
83        tile.Tag = "tile";
84        Add(tile);
85    }
86    void CreatePlayer(Vector pos, double width, double height)
87    {
88        player = new PhysicsObject(width*0.5,height*0.5);
89        player.Position = pos;
90        player.Shape = Shape.Circle;
91        player.Image = plImg;
92        player.Restitution = 1.0;
93        player.LinearDamping = 0.9;
94        //player.CanRotate = false;
95        player.Tag = "player";
96        player.CollisionIgnoreGroup = 1;
97        AddCollisionHandler(player, "flag", Win);
98        AddCollisionHandler(player, "star", CountAndDestroy);
99        Add(player);
100    }
101    void CreateEnemy(Vector pos, double width, double height)
102    {
103        RandomMoverBrain dumbEnem = new RandomMoverBrain();
104        dumbEnem.Speed = 100;
105        dumbEnem.ChangeMovementSeconds = 1;
106
107        FollowerBrain smartEnem = new FollowerBrain("player");
108        smartEnem.Speed = 100;
109        smartEnem.DistanceFar = 100;
110        smartEnem.StopWhenTargetClose = false;
111        smartEnem.FarBrain = dumbEnem;
112
113        PhysicsObject enem = new PhysicsObject(width*0.75, height*0.75);
114        enem.Position = pos;
115        enem.Shape = Shape.Diamond;
116        enem.Color = Color.Ruby;
117        enem.Restitution = 1.0;
118        enem.Tag = "enemy";
119        enem.Brain = smartEnem;
120
121        AddCollisionHandler(enem, "player", Restart);
122        Add(enem);
123    }
124    void MovePlayer(Vector vect)
125    {
126        player.Hit(vect);
127    }
128    void CreateFlag(Vector pos, double width, double height)
129    {
130        PhysicsObject flag = PhysicsObject.CreateStaticObject(width, height);
131        flag.Position = pos;
132        flag.Shape = Shape.Triangle;
133        flag.Color = Color.Cyan;
134        flag.Tag = "flag";
135        flag.CollisionIgnoreGroup = 2;
136        Add(flag);
137    }
138    void CreateSafe(Vector pos, double width, double height)
139    {
140        PhysicsObject safe = PhysicsObject.CreateStaticObject(width, height);
141        safe.Position = pos;
142        safe.Shape = Shape.Circle;
143        safe.Color = Color.Black;
144        safe.Tag = "safe";
145        safe.CollisionIgnoreGroup = 1;
146        Add(safe);
147    }
148    void CreateStar(Vector pos, double width, double height)
149    {
150        PhysicsObject star = PhysicsObject.CreateStaticObject(width, height);
151        star.Position = pos;
152        star.Shape = Shape.Star;
153        star.Color = Color.Yellow;
154        star.Tag = "star";
155        counter.Value ++;
156        Add(star);
157    }
158    void CountAndDestroy(PhysicsObject obj1, PhysicsObject obj2)
159    {
160        obj2.Destroy();
161        counter.Value --;
162    }
163}
Note: See TracBrowser for help on using the repository browser.