source: 2017/27/IlmariL/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 8954

Revision 8954, 5.7 KB checked in by npo17_34, 3 years ago (diff)

lisäsin alkuvalikon ja aikalaskurin

Line 
1using System;
2using Jypeli;
3using Jypeli.Controls;
4using Jypeli.Effects;
5using Jypeli.WP7;
6using Jypeli.Widgets;
7public class Game : PhysicsGame
8{
9    static String[] lines = {
10                  "           ",
11                  "           ",
12                  "           ",
13                  "   X   X   ",
14                  "X          ",
15                  "         * ",
16                  "     X   X ",
17                  "           ",
18                  "           ",
19                  "           ",
20                  "           ",
21                  "*  X   X   ",
22                  "X          ",
23                  "         * ",
24                  "     X   X ",
25                  "           ",
26                  "           ",
27                  "           ",
28                  "   *       ",
29                  "   X   X   ",
30                  "X          ",
31                  "           ",
32                  "     X   X ",
33                  "           ",
34                  };
35
36    static int tileWidth = 800 / lines[0].Length;
37    static int tileHeight = 480 / lines.Length;
38    static Image playerImage = LoadImage("ship");
39    static Image galaxyImage = LoadImage("galaxy2");
40    static Image sombreroImage = LoadImage("sombrero");
41    static Image explosionImage = LoadImage("bum");
42
43    SoundEffect blopSound = LoadSoundEffect("blop");
44    SoundEffect explosionSound = LoadSoundEffect("exp");
45
46    ExplosionSystem explosionSystem;
47    PhysicsObject player;
48    DoubleMeter alaspainLaskuri;
49    Timer aikaLaskuri;
50    public override void Begin()
51    {
52        AlkuValikko();
53
54    }
55
56
57    public override void Continue()
58    {
59        // Begin();
60    }
61
62
63    void NewGame(Touch touch)
64    {
65        ClearGameObjects();
66        ClearControls();
67
68        player = new PhysicsObject(50, 50, Shape.Circle);
69        player.Image = playerImage;
70        Add(player);
71
72        explosionSystem = new ExplosionSystem(explosionImage, 50);
73        Add(explosionSystem);
74
75        Keyboard.Listen(Key.Up, ButtonState.Pressed, MovePlayer, "Move up", player, new Vector(0, 500));
76        Keyboard.Listen(Key.Down, ButtonState.Pressed, MovePlayer, null, player, new Vector(0, -500));
77        Keyboard.Listen(Key.Left, ButtonState.Pressed, MovePlayer, null, player, new Vector(-150, 0));
78        Keyboard.Listen(Key.Right, ButtonState.Pressed, MovePlayer, null, player, new Vector(150, 0));
79        PhoneBackButton.Listen(Exit, "End game");
80
81        TouchPanel.Listen(ButtonState.Pressed, NewGame, null);
82        Accelerometer.Calibration = AccelerometerCalibration.ZeroAngle;
83        Accelerometer.ListenAnalog(AccelerometerSensitivity.Realtime, ChangeGravity, null);
84
85        TileMap tiles = TileMap.FromStringArray(lines);
86        tiles['X'] = CreateGalaxy;
87        tiles['*'] = CreateSombrero;
88        tiles.Insert(tileWidth, tileHeight);
89        Level.CreateBorders();
90        Camera.ZoomToLevel();
91    }
92
93    public void MovePlayer(PhysicsObject player, Vector force)
94    {
95        player.Hit(force);
96    }
97
98    PhysicsObject CreateGalaxy()
99    {
100        PhysicsObject galaxy = PhysicsObject.CreateStaticObject(tileWidth, tileHeight);
101        galaxy.Color = Color.LightBlue;
102        AddCollisionHandler(galaxy, CollidedWithGalaxy);
103        galaxy.Image = galaxyImage;
104        return galaxy;
105    }
106
107    PhysicsObject CreateSombrero()
108    {
109        PhysicsObject sombrero = PhysicsObject.CreateStaticObject(tileWidth, tileHeight);
110        sombrero.Color = Color.Yellow;
111        sombrero.Image = sombreroImage;
112        AddCollisionHandler(sombrero, CollidedWithSombrero);
113        return sombrero;
114    }
115
116    void CollidedWithGalaxy(PhysicsObject galaxy, PhysicsObject target)
117    {
118        Phone.Vibrate(40);
119        blopSound.Play();
120    }
121
122    void CollidedWithSombrero(PhysicsObject sombrero, PhysicsObject target)
123    {
124        Phone.Vibrate(400);
125        explosionSound.Play();
126        explosionSystem.AddEffect(target.X, target.Y, 50);
127        sombrero.Destroy();
128    }
129
130    void ChangeGravity(AnalogState s)
131    {
132        Gravity = s.StateVector * 2000;
133    }
134    void AlkuValikko()
135    {
136        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita Peli", "Lopeta");
137        Add(alkuValikko);
138        alkuValikko.AddItemHandler(0, AloitaPeli);
139       
140        alkuValikko.AddItemHandler(1, Exit);
141        alkuValikko.DefaultCancel = 1;
142        alkuValikko.Color = Color.Black;
143
144    }
145    void AloitaPeli()
146    {
147        Phone.DisplayResolution = DisplayResolution.Large;
148        Phone.DisplayOrientation = DisplayOrientation.LandscapeLeft;
149        Level.Background.Image = LoadImage("space");
150        Gravity = new Vector(0, -1000);
151        NewGame(null);
152        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
153        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
154        LuoAikaLaskuri();
155    }
156    void LuoAikaLaskuri()
157    {
158        alaspainLaskuri = new DoubleMeter(20);
159
160        aikaLaskuri = new Timer();
161        aikaLaskuri.Interval = 0.1;
162        aikaLaskuri.Timeout += LaskeAlaspain;
163        aikaLaskuri.Start();
164
165        Label aikaNaytto = new Label();
166        aikaNaytto.TextColor = Color.White;
167        aikaNaytto.DecimalPlaces = 1;
168        aikaNaytto.BindTo(alaspainLaskuri);
169        Add(aikaNaytto);
170    }
171
172    void LaskeAlaspain()
173    {
174        alaspainLaskuri.Value -= 0.1;
175
176        if (alaspainLaskuri.Value <= 0)
177        {
178            MessageDisplay.Add("Aika loppui...");
179            aikaLaskuri.Stop();
180            AlkuValikko();
181
182            // täydennä mitä tapahtuu, kun aika loppuu
183        }
184    }
185}
Note: See TracBrowser for help on using the repository browser.