source: 2012/27/JuhoK/Impossible/Impossible/Impossible/Impossible.cs @ 10337

Revision 3672, 6.3 KB checked in by janiemit, 9 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 Impossible : PhysicsGame
10{
11    double moveSpeed = 1600;
12    bool allowMove = false;
13    bool nextLevel = true;
14    int kenttaNro = 0;
15    int kenttaMax = 1;
16
17    PlatformCharacter cube;
18    GameObject pelaajanHaamu;
19
20    Image palikanKuva = LoadImage("palikka");
21    Image piikinKuva = LoadImage("piikki");
22    Image pelaajanKuva = LoadImage("cube");
23    Image maanKuva = LoadImage("viiva");
24    Image gameoverKuva = LoadImage("gameover");
25
26    Vector currPos;
27    Vector prevPos;
28
29    ExplosionSystem es;
30
31    public override void Begin()
32    {
33        Content.Load<Microsoft.Xna.Framework.Media.Song>("track1");
34
35        IsMouseVisible = true;
36        Level.BackgroundColor = Color.Black;
37
38        SetWindowSize(800, 480);
39
40        PushButton startButton = new PushButton("Start");
41        startButton.Clicked += new Action(startGame);
42        Add(startButton);
43
44        Keyboard.Listen(Key.Enter, ButtonState.Pressed, startGame, null);
45        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
46    }
47
48    protected override void Update(Time time)
49    {
50        base.Update(time);
51
52        if (allowMove == true) { 
53            move();
54            if (prevPos == currPos && cube.Position == currPos)
55            {
56                allowMove = false;
57                createExplosion(cube.Position);
58                MediaPlayer.Stop();
59                cube.Destroy();
60            }
61            else
62            {
63                prevPos = currPos;
64                currPos = cube.Position;
65            }
66        }
67    }
68
69    void startGame()
70    {
71        ClearAll();
72
73        es = new ExplosionSystem(LoadImage("explosion"), 100);
74        Add(es);
75
76        if (nextLevel == true) { kenttaNro++; nextLevel = false; }
77        if (kenttaNro <= kenttaMax)
78        {
79            Level.Background.Image = LoadImage("background");
80            LuoKentta(kenttaNro);
81            Level.Background.FitToLevel();
82
83            Keyboard.Listen(Key.Space, ButtonState.Down, jump, null);
84            Keyboard.Listen(Key.Enter, ButtonState.Pressed, startGame, null);
85            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
86
87            Gravity = new Vector(0, -5000);
88
89            Camera.Follow(pelaajanHaamu);
90            Camera.StayInLevel = true;
91            //Camera.ZoomToLevel();
92            Camera.ZoomFactor = 0.3;
93            MediaPlayer.Play("track"+kenttaNro);
94        }
95        else { gameOver(); }
96    }
97
98    void LuoKentta(int kenttaNro)
99    {
100        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kenttaNro);
101        ruudut.SetTileMethod('=', LuoPalikka);
102        ruudut.SetTileMethod('P', LuoPelaaja);
103        ruudut.SetTileMethod('M', LuoMaali);
104        ruudut.SetTileMethod('L', LuoPiikki);
105        ruudut.SetTileMethod('_', LuoMaa);
106        ruudut.Execute(100, 100);
107    }
108
109    void LuoMaa(Vector paikka, double leveys, double korkeus)
110    {
111        PhysicsObject maa = PhysicsObject.CreateStaticObject(leveys, korkeus);
112        maa.Position = paikka;
113        maa.Shape = Shape.Rectangle;
114        maa.Color = Color.Black;
115        maa.Restitution = 0.0;
116        maa.IsVisible = false;
117        Add(maa);
118
119        GameObject viivanKuva = new GameObject(leveys, korkeus);
120        viivanKuva.Image = maanKuva;
121        viivanKuva.X = maa.X;
122        viivanKuva.Y = maa.Y + 35;
123        Add(viivanKuva);
124    }
125
126    void LuoPalikka(Vector paikka, double leveys, double korkeus)
127    {
128        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
129        palikka.Position = paikka;
130        palikka.Image = palikanKuva;
131        palikka.Shape = Shape.Rectangle;
132        palikka.Restitution = 0.0;
133        palikka.Color = Color.Gray;
134        Add(palikka);
135    }
136   
137    void LuoPiikki(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject Piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        Piikki.Position = paikka;
141        Piikki.Image = piikinKuva;
142        Piikki.Shape = Shape.FromImage(piikinKuva);
143        Piikki.Color = Color.Pink;
144        Piikki.Tag = "piikki";
145        Add(Piikki);
146    }
147
148    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
149    {
150        cube = new PlatformCharacter (leveys, korkeus);
151        cube.Image = pelaajanKuva;
152        cube.Shape = Shape.Rectangle;
153        cube.Position = paikka;
154        cube.CanRotate = false;
155        cube.Restitution = 0.0;
156        cube.Y += 1;
157        Add(cube, -1);
158        allowMove = true;
159        AddCollisionHandler(cube, cubeCollision);
160
161        pelaajanHaamu = new GameObject(leveys, korkeus);       
162        pelaajanHaamu.Position = new Vector(cube.Position.X + Screen.Width / 2, cube.Position.Y);
163        Add(pelaajanHaamu);
164        pelaajanHaamu.IsVisible = false;
165
166    }
167    void LuoMaali(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        palikka.Position = paikka;
171        palikka.Shape = Shape.Rectangle;
172        palikka.Color = Color.Gray;
173        palikka.Tag = "maali";
174        Add(palikka);
175    }
176
177
178    void move()
179    {
180        cube.Move(new Vector(moveSpeed, 0));
181        pelaajanHaamu.Position = new Vector(cube.Position.X + Screen.Width * 1.1, cube.Position.Y);
182    }
183
184    void jump()
185    {
186        cube.Jump(2000);
187    }
188
189    void createExplosion(Vector position)
190    {       
191        es.AddEffect(position, 100);
192    }
193
194    void cubeCollision(PhysicsObject tormaaja, PhysicsObject kohde)
195    {
196        if (kohde.Tag.ToString() == "piikki")
197        {
198            createExplosion(cube.Position);
199            MediaPlayer.Stop();
200            cube.Destroy();
201            allowMove = false;
202        }
203        else if (kohde.Tag.ToString() == "maali")
204        {
205            MessageDisplay.Add("Next level reached!");
206            nextLevel = true;
207            startGame();
208        }
209    }
210
211    void gameOver()
212    {
213        ClearAll();
214        Widget gameover = new Widget(Screen.Width, Screen.Height);
215        gameover.Image = gameoverKuva;
216        Add(gameover);
217        //Keyboard.Listen(...
218    }
219}
220 
Note: See TracBrowser for help on using the repository browser.