source: 2010/23/hniemi/Matopeli/Peli.cs @ 1585

Revision 1585, 3.2 KB checked in by anlakane, 10 years ago (diff)

Vähän lisää.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6
7public class Peli : Game
8{
9    //GameObject[] mato;
10    const double ruudunKoko = 20;
11    const int madonPituus = 6;
12    int ruutujaVaakasuunnassa;
13    int ruutujaPystysuunnassa;
14    List<GameObject> mato = new List<GameObject>();
15    List<GameObject> kerattavat = new List<GameObject>();
16    Direction liikkumissuunta;
17    Timer liikutusajastin;
18
19    protected override void Begin()
20    {
21        LuoKentta();
22        LuoLiikutusAjastin();
23        LuoMato(madonPituus);
24        LisaaOhjaimet();
25        AloitaPeli();
26    }
27
28    void LuoKentta()
29    {
30        Level.Height = 500;
31        Level.Width = 500;
32        ruutujaPystysuunnassa = (int)Math.Floor(Level.Height / ruudunKoko);
33        ruutujaVaakasuunnassa = (int)Math.Floor(Level.Width / ruudunKoko);
34    }
35
36    void LuoMato(int pituus)
37    {
38        for (int i = 0; i < pituus-1; i++)
39        {
40            mato.Add(new GameObject(ruudunKoko - 1, ruudunKoko - 1));
41            Add(mato[i]);
42        }
43        //Luo madon pään viimeiseksi, jotta sen pään värin muuttaminen näkyy
44        //Aka. Too lazy for layers
45        mato.Insert(0, new GameObject(ruudunKoko - 1, ruudunKoko - 1));
46        Add(mato[0]); 
47    }
48
49    void LisaaOhjaimet()
50    {
51        Keyboard.Listen(Key.Up, ButtonState.Pressed, AsetaSuunta, "Kääntää ylös", Direction.Up);
52        Keyboard.Listen(Key.Down, ButtonState.Pressed, AsetaSuunta, "Kääntää alas", Direction.Down);
53        Keyboard.Listen(Key.Left, ButtonState.Pressed, AsetaSuunta, "Kääntää vasemmalle", Direction.Left);
54        Keyboard.Listen(Key.Right, ButtonState.Pressed, AsetaSuunta, "Kääntää oikealle", Direction.Right);
55        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistuu pelistä");
56    }
57
58    void LuoKerattava()
59    {
60        GameObject kerattava = new GameObject(ruudunKoko / 2, ruudunKoko / 2, Shapes.Circle);
61       
62        Add(kerattava);
63        kerattavat.Add(kerattava);
64
65    }
66
67    void AsetaSuunta(Direction suunta)
68    {
69        liikkumissuunta = suunta;
70    }
71
72    void LuoLiikutusAjastin()
73    {
74        liikutusajastin = new Timer();
75        liikutusajastin.Interval = 0.4;
76        liikutusajastin.Trigger += SiirraMatoa;
77    }
78
79    void SiirraMatoa(Timer ajastin)
80    {
81        Vector suunta = Vector.FromLengthAndAngle(ruudunKoko, Angle.FromDirection(liikkumissuunta));
82
83        for (int i = mato.Count-1; i > 0; i--)
84        {
85            mato[i].Position = mato[i - 1].Position;
86        }
87
88        bool tormasikoItseensa = TarkistaSeuraavaAskel(mato[0].Position + suunta);
89
90        mato[0].Position = mato[0].Position + suunta;
91
92        if (tormasikoItseensa)
93        {
94            liikutusajastin.Stop();
95            mato[0].Color = Color.Blue;
96        }
97    }
98
99    bool TarkistaSeuraavaAskel(Vector paikka)
100    {
101        foreach (GameObject matopala in mato)
102        {
103            if (Vector.Distance(paikka, matopala.Position) < 10)
104            {
105                return true;
106            }
107        }
108        return false;
109        }
110
111    void AloitaPeli()
112    {
113        liikkumissuunta = Direction.Right;
114        liikutusajastin.Start();
115    }
116}
Note: See TracBrowser for help on using the repository browser.