source: 2017/23/AnttiH/FysiikkaPeli4/FysiikkaPeli4/FysiikkaPeli4/FysiikkaPeli4.cs @ 8482

Revision 8482, 12.0 KB checked in by nupeohje, 2 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 FysiikkaPeli4 : PhysicsGame
10{
11    int karttaNro = 1;
12    bool ctrlIsDown;
13    Label kohta1;
14    Label kohta2;
15    PlatformCharacter Player;
16    DoubleMeter palikkaLaskuri;
17    //Double MovementSpeed = 500;
18    List<Label> valikonKohdat;
19    bool OnkoErikoisominaisuusKaytetty = false;
20    PhysicsObject Palikka;
21    PhysicsObject maali;
22    Image Kuva = LoadImage("NAKKKM_standing");
23    private Animation P1walkanim;
24    Image[] P1walkPic = LoadImages("p1Walk/NAKKKM_sprint_", 0, 7, false);
25    Image[] LatausMittariPic = LoadImages("latausmittari/Lataus", 01, 12, true);
26    Image taustaKuva = LoadImage("KaupunkiTausta");
27    Image CrateKuva = LoadImage("Crate");
28    Image loadingKuva = LoadImage("LoadingScreen");
29    Image kohta1Kuva = LoadImage("StartNappi");
30    Image kohta2Kuva = LoadImage("QuitNappi");
31    Image AloitusTaustaKuva = LoadImage("AloitusTausta");
32
33    public override void Begin()
34    {
35        ClearAll();
36        IsMouseVisible = true;
37        IsFullScreen = true;
38        Valikko();
39        Camera.Zoom(2);
40        SmoothTextures = false;
41
42        AddBackGround(AloitusTaustaKuva, Color.Black);
43        //Level.Background.Image = taustaKuva;
44        //Level.Background.FitToLevel();
45    }
46
47    void AddControls()
48    {
49        //Keyboard.Listen(Key.Left, ButtonState.Down, MovePlayer, null, new Vector(-MovementSpeed, 0));
50        //Keyboard.Listen(Key.Left, ButtonState.Released, MovePlayer, null, new Vector(0, 0));
51        //Keyboard.Listen(Key.Right, ButtonState.Down, MovePlayer, null, new Vector(MovementSpeed, 0));
52        //Keyboard.Listen(Key.Right, ButtonState.Released, MovePlayer, null, new Vector(0, 0));
53        //Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, null, new Vector(0, MovementSpeed));
54        //Keyboard.Listen(Key.Up, ButtonState.Released, MovePlayer, null, new Vector(0, 0));
55        //Keyboard.Listen(Key.Down, ButtonState.Down, MovePlayer, null, new Vector(0, -MovementSpeed));
56        //Keyboard.Listen(Key.Down, ButtonState.Released, MovePlayer, null, new Vector(0, 0));
57
58        Keyboard.Listen(Key.Left, ButtonState.Down, delegate { MovePlayer(-250.0); }, null);
59        Keyboard.Listen(Key.Right, ButtonState.Down, delegate { MovePlayer(250.0); }, null);
60
61        Keyboard.Listen(Key.Up, ButtonState.Down, Jump, null);
62
63        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate {
64            if (OnkoErikoisominaisuusKaytetty == false)
65            {
66                AddPalikka(new Vector(Player.Position.X, Player.Position.Y - 20), 20, 20, true);
67                OnkoErikoisominaisuusKaytetty = true;
68                palikkaLaskuri.Value -= 10;
69               // Timer.SingleShot(2.0, delegate { OnkoErikoisominaisuusKaytetty = false; MessageDisplay.Add("Valmis!"); });
70            }
71           
72        }, null);
73
74        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
75        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, delegate { ctrlIsDown = true; }, null);
76        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, delegate { ctrlIsDown = true; }, null);
77        Keyboard.Listen(Key.LeftControl, ButtonState.Released, delegate { ctrlIsDown = false; }, null);
78        Keyboard.Listen(Key.RightControl, ButtonState.Released, delegate { ctrlIsDown = false; }, null);
79        Keyboard.Listen(Key.R, ButtonState.Pressed, delegate {
80            if (ctrlIsDown)
81            {
82              if (karttaNro > 3)
83              {
84                  Finish();
85              }
86              else
87              {
88                  Layers[3].RelativeTransition = new Vector(0, 0);
89                  Label loadingScreen = new Label(1080, 620);
90                  loadingScreen.Image = loadingKuva;
91                  Add(loadingScreen, 3);
92
93                  Timer.SingleShot(0.1, delegate
94                  {
95                      karttaNro++;
96                      NextLevel();
97                  });
98                  MessageDisplay.Add("kenttää on vaihdettu " + karttaNro);
99              }
100            }
101            else
102            {
103                Layers[3].RelativeTransition = new Vector(0, 0);
104                Label loadingScreen = new Label(1080, 620);
105                loadingScreen.Image = loadingKuva;
106                Add(loadingScreen, 3);
107               
108                Timer.SingleShot(0.1, delegate
109                {
110                    NextLevel();
111                });
112            }
113        }, null);
114
115
116    }
117
118    void CreateLevel(string kenttaTiedostonNimi)
119    {
120        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
121
122        ruudut.SetTileMethod("#FFFF0000", AddPlayer);
123        ruudut.SetTileMethod("000000", AddPalikka, false);
124        ruudut.SetTileMethod("#FF00FF00", AddBombs);
125        ruudut.SetTileMethod("#FF00FF00", AddMaali);
126
127        ruudut.Execute(20, 20);
128
129        Surface alaReuna = Surface.CreateBottom(Level, 1, 100, 140);
130        alaReuna.Color = Color.Transparent;
131        Add(alaReuna);
132
133        AddCollisionHandler(alaReuna, Player, HitBounds);
134    }
135
136    Color RandomColor ()
137    {
138        byte[] buffer = new byte[3];
139        new Random(DateTime.Now.Millisecond * 1000000 + DateTime.Now.Second * 100000 + DateTime.Now.Minute * 10000).NextBytes(buffer);
140        return new Color(buffer[0], buffer[1], buffer[2]);
141    }
142
143    void AddPalikka(Vector paikka, double leveys, double korkeus, bool vari = false)
144    {
145        Palikka = new PhysicsObject(leveys, korkeus);
146        Palikka.Position = paikka;
147        Palikka.Color = Color.Gray;
148        Palikka.Image = CrateKuva;
149        Add(Palikka);
150        if (vari)
151        {
152            Timer randomcolortimer = new Timer();
153            randomcolortimer.Interval = 0.1;
154            randomcolortimer.Timeout += delegate
155            {
156                Color _randomColor = RandomColor();
157                Palikka.Color = _randomColor;
158            };
159            randomcolortimer.Start();
160        }
161    }
162
163    void AddMaali(Vector _pos, double x, double y)
164    {
165        maali = new PhysicsObject(x, y);
166        maali.Position = _pos;
167        Add(maali);
168
169        Timer randomcolortimer = new Timer();
170        randomcolortimer.Interval = 0.1;
171        randomcolortimer.Timeout += delegate
172        {
173            Color _randomColor = RandomColor();
174            maali.Color = _randomColor;
175        };
176        randomcolortimer.Start();
177
178        AddCollisionHandler(maali, Player, voita);
179
180    }
181
182    void voita(PhysicsObject collider, PhysicsObject target)
183    {
184        Layers[3].RelativeTransition = new Vector(0, 0);
185        Label loadingScreen = new Label(1080, 620);
186        loadingScreen.Image = loadingKuva; 
187        Add(loadingScreen, 3);
188
189        Timer.SingleShot(0.1, delegate
190        {
191            karttaNro++;
192            NextLevel();
193        });
194
195       
196    }
197
198    void AddPlayer(Vector paikka, double leveys, double korkeus)
199    {
200        Player = new PlatformCharacter(20, 20);
201        Player.Position = paikka;
202        Player.Shape = Shape.Circle;
203        Player.Color = Color.DarkAzure;
204        Player.LinearDamping = 0.99;
205        Player.IgnoresExplosions = true;
206        Player.Image = Kuva;
207        Add(Player);
208
209        P1walkanim = new Animation(P1walkPic);
210        Player.Animation = P1walkanim;
211        Player.AnimWalk = new Animation(P1walkanim);
212        Player.AnimIdle = new Animation(Kuva);
213        Player.AnimJump = new Animation(Kuva);
214        Player.AnimFall = new Animation(Kuva);
215
216        Timer ajastin = new Timer();
217        ajastin.Interval = 0.05;
218        ajastin.Timeout += delegate
219        {
220            Player.Velocity += new Vector(0, -10);
221        };
222        ajastin.Start();
223    }
224
225    void MovePlayer(double nopeus)
226    {
227        //Player.Push(vektori * 6);
228       
229        Player.Walk(nopeus);
230    }
231
232    void Jump()
233    {
234        Player.Jump(250);
235    }
236
237    void CameraControls()
238    {
239        Camera.Follow(Player);
240        Camera.Zoom(1.5);
241    }
242
243    void AddBackGround (Image _Image, Color _color)
244    {
245        GameObject CityBackGround = new GameObject(Screen.Width, Screen.Height);
246        CityBackGround.Image = _Image;
247        Add(CityBackGround, -3);
248        Layers[-3].RelativeTransition = new Vector(0.1, 0.1);
249
250
251        Level.Background.Color = _color;
252    }
253
254    void NextLevel()
255    {
256        ClearAll();
257        ctrlIsDown = false;
258
259        if (karttaNro == 1) CreateLevel("Kartta1");
260        else if (karttaNro == 2) CreateLevel("Kartta2");
261        else if (karttaNro == 3) CreateLevel("Kartta3");
262        else if (karttaNro > 3) Finish();
263
264        AddControls();
265        CameraControls();
266        AddBackGround(taustaKuva, Color.LimeGreen);
267        LuoAikaLaskuri();
268        LuoPalikkaLaskuri();
269    }
270
271    void AddBombs(Vector _pos, double x, double y)
272    {
273        Timer bombTimer = new Timer();
274        bombTimer.Interval = 0.1;
275        bombTimer.Timeout += delegate {
276           _pos = RandomGen.NextVector(Level.Left, Level.Bottom, Level.Right, Level.Top);
277           Color _randomColor = RandomColor();
278           Color _randomColor2 = RandomColor();
279            Explosion rajahdys = new Explosion(2000);
280            rajahdys.Position = _pos;
281            rajahdys.Speed = 10000;
282            Player.Color = _randomColor2;
283            //Add(rajahdys);
284        };
285        bombTimer.Start();
286    }
287
288    void HitBounds(PhysicsObject collider, PhysicsObject target)
289    {
290        Begin();
291    }
292
293    void LuoPalikkaLaskuri()
294    {
295        OnkoErikoisominaisuusKaytetty = false;
296        palikkaLaskuri = new DoubleMeter(
297            10);
298        palikkaLaskuri.MaxValue = 10;
299        palikkaLaskuri.UpperLimit += delegate { OnkoErikoisominaisuusKaytetty = false;};
300
301        ProgressBar palikkaPalkki = new ProgressBar(300, 200);
302        palikkaPalkki.BarColor = Color.Red;
303        palikkaPalkki.X = Screen.Right - 150;
304        palikkaPalkki.Y = Screen.Bottom + 100;
305        palikkaPalkki.BindTo(palikkaLaskuri);
306        Add(palikkaPalkki);
307        //MessageDisplay.Add("palkki lisätty");
308
309        palikkaPalkki.Image = LoadImage("LatausBaariEmpty");
310        palikkaPalkki.BarImage = LoadImage("LatausBaariFull");
311
312    }
313
314    void LuoAikaLaskuri()
315    { 
316         Timer aikalaskuri = new Timer();
317         aikalaskuri.Interval = 1;
318         aikalaskuri.Timeout += delegate 
319         {
320             if(OnkoErikoisominaisuusKaytetty == true)
321            palikkaLaskuri.Value += 1; 
322            //MessageDisplay.Add("palikka laskuriin lisätty: " + 1);
323         };
324         aikalaskuri.Start();
325    }
326
327    void Finish()
328    {
329        ClearAll();
330        MessageWindow naytto = new MessageWindow("Voitit!");
331        naytto.Closed += delegate { Exit(); };
332        Add(naytto);
333    }
334
335    void Valikko()
336    {
337        ClearAll();
338
339
340
341        valikonKohdat = new List<Label>();
342
343        Label kohta1 = new Label(400, 200);
344        kohta1.Position = new Vector(0, 100);
345        kohta1.Image = kohta1Kuva;
346        valikonKohdat.Add(kohta1);
347
348        Label kohta2 = new Label(400, 200);
349        kohta2.Position = new Vector(0, -100);
350        kohta2.Image = kohta2Kuva;
351        valikonKohdat.Add(kohta2);
352
353        foreach (Label valikonKohta in valikonKohdat)
354        {
355            Add(valikonKohta);
356        }
357
358
359        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, NextLevel, null);
360        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
361        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
362
363    }
364
365    void ValikossaLiikkuminen(AnalogState hiirenTila)
366    {
367        foreach (Label kohta in valikonKohdat)
368        {
369            if (Mouse.IsCursorOn(kohta))
370            {
371                kohta.TextColor = Color.Red;
372            }
373            else
374            {
375                kohta.TextColor = Color.Black;
376            }
377
378        }
379    }
380}
Note: See TracBrowser for help on using the repository browser.