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

Revision 7340, 5.3 KB checked in by karkaite, 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    Image alien = LoadImage("alien");
13    PhysicsObject player;
14    IntMeter counter;
15
16
17    public override void Begin()
18    {
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(Boolean lose)
37    {
38        ClearAll();
39        if (lose)
40        {
41            MessageDisplay.Add("You Lose! Try Again?");
42        }
43        SetKeys();
44        SetLevel();
45    }
46    void Win()
47    {
48        if (counter.Value == 0)
49        {
50            ClearAll();
51            MessageDisplay.Add("You Win!");
52            SetLevel();
53            Vector exampleMovement = new Vector(1, 0);
54            Mouse.IsCursorVisible = true;
55            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
56        }
57    }
58    void SetKeys()
59    {
60        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
61        Keyboard.Listen(Key.Left, ButtonState.Down, MovePlayer, null, new Vector(-50, 0));
62        Keyboard.Listen(Key.Right, ButtonState.Down, MovePlayer, null, new Vector(50, 0));
63        Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, null, new Vector(0, 50));
64        Keyboard.Listen(Key.Down, ButtonState.Down, MovePlayer, null, new Vector(0, -50));
65        Keyboard.Listen(Key.R, ButtonState.Down, Restart, null, false);
66    }
67    void SetLevel()
68    {
69        CreateCounter();
70        TileMap tiles = TileMap.FromLevelAsset("level1");
71        tiles.SetTileMethod('#', CreateRect, Color.Gray);
72        tiles.SetTileMethod('P', CreatePlayer);
73        tiles.SetTileMethod('!', CreateEnemy);
74        tiles.SetTileMethod('^', CreateFlag);
75        tiles.SetTileMethod('@', CreateSafe);
76        tiles.SetTileMethod('$', CreateStar);
77        tiles.Execute(50,50);
78    }
79    void CreateRect(Vector pos, double width, double height, Color clr)
80    {
81        PhysicsObject tile = PhysicsObject.CreateStaticObject(width, height);
82        tile.Position = pos;
83        tile.Shape = Shape.Rectangle;
84        tile.Color = clr;
85        tile.Tag = "tile";
86        Add(tile);
87    }
88    void CreatePlayer(Vector pos, double width, double height)
89    {
90        player = new PhysicsObject(width*0.5,height*0.5);
91        player.Position = pos;
92        player.Shape = Shape.Circle;
93        player.Image = plImg;
94        player.Restitution = 1.0;
95        player.LinearDamping = 0.9;
96        //player.CanRotate = false;
97        player.Tag = "player";
98        player.CollisionIgnoreGroup = 1;
99        AddCollisionHandler<PhysicsObject, PhysicsObject>(player, "flag", delegate { Win(); } );
100        AddCollisionHandler(player, "star", CountAndDestroy);
101        Add(player);
102    }
103    void CreateEnemy(Vector pos, double width, double height)
104    {
105        RandomMoverBrain dumbEnem = new RandomMoverBrain();
106        dumbEnem.Speed = 100;
107        dumbEnem.ChangeMovementSeconds = 1;
108
109        FollowerBrain smartEnem = new FollowerBrain("player");
110        smartEnem.Speed = 100;
111        smartEnem.DistanceFar = 100;
112        smartEnem.StopWhenTargetClose = false;
113        smartEnem.FarBrain = dumbEnem;
114
115        PhysicsObject enem = new PhysicsObject(width*0.75, height*0.75);
116        enem.Position = pos;
117        enem.Image = alien;
118        enem.Restitution = 1.0;
119        enem.Tag = "enemy";
120        enem.Brain = smartEnem;
121        // FIXME idiotic collisionhandler
122        AddCollisionHandler<PhysicsObject, PhysicsObject>(enem, "player", delegate { Restart(true); } );
123        Add(enem);
124    }
125    void MovePlayer(Vector vect)
126    {
127        player.Hit(vect);
128    }
129    void CreateFlag(Vector pos, double width, double height)
130    {
131        PhysicsObject flag = PhysicsObject.CreateStaticObject(width, height);
132        flag.Position = pos;
133        flag.Shape = Shape.Triangle;
134        flag.Color = Color.Cyan;
135        flag.Tag = "flag";
136        flag.CollisionIgnoreGroup = 2;
137        Add(flag);
138    }
139    void CreateSafe(Vector pos, double width, double height)
140    {
141        PhysicsObject safe = PhysicsObject.CreateStaticObject(width, height);
142        safe.Position = pos;
143        safe.Shape = Shape.Circle;
144        safe.Color = Color.Black;
145        safe.Tag = "safe";
146        safe.CollisionIgnoreGroup = 1;
147        Add(safe);
148    }
149    void CreateStar(Vector pos, double width, double height)
150    {
151        PhysicsObject star = PhysicsObject.CreateStaticObject(width, height);
152        star.Position = pos;
153        star.Shape = Shape.Star;
154        star.Color = Color.Yellow;
155        star.Tag = "star";
156        counter.Value ++;
157        Add(star);
158    }
159    void CountAndDestroy(PhysicsObject obj1, PhysicsObject obj2)
160    {
161        obj2.Destroy();
162        counter.Value --;
163    }
164}
Note: See TracBrowser for help on using the repository browser.