source: 2017/30/TuomasH/Snake/Snake/Snake/Snake.cs @ 9138

Revision 9138, 5.7 KB checked in by npo17_61, 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
9
10public class Snake : Game
11{
12    const int Ruudunkoko = 30;
13    const int Leveys = 30;
14    const int Korkeus = 30;
15    Direction suunta;
16    GameObject omena;
17    List<GameObject> matopalat = new List<GameObject>();
18   
19    Timer aikalaskuri = new Timer();
20    List<Label> valikonkohdat;
21    Surface taso = new Surface(60.0, 60.0);
22    EasyHighScore toplista = new EasyHighScore();
23    GameObject paa = new GameObject(40, 40);
24   
25   
26
27
28
29         
30
31    public override void Begin()
32    {
33        IsFullScreen = true;
34        MessageDisplay.Add("Ohjeet: F1");
35        MessageDisplay.TextColor = Color.White;
36        MessageDisplay.MessageTime = new TimeSpan(0, 0, 5);
37
38        Valikko();
39        Aloitus();
40
41       
42       
43     
44
45    }
46   
47    void Aloitus()
48    {
49       
50        matopalat.Clear();
51        ClearAll();
52        suunta = Direction.Up;
53        Level.CreateBorders(true);
54        Level.Width = Ruudunkoko * Leveys;
55        Level.Height = Ruudunkoko * Korkeus;
56
57        LuoMatopala(6 * Ruudunkoko, 3 * Ruudunkoko);
58        LuoMatopala(5 * Ruudunkoko, 3 * Ruudunkoko);
59        LuoMatopala(4 * Ruudunkoko, 3 * Ruudunkoko);
60        LuoMatopala(3 * Ruudunkoko, 3 * Ruudunkoko);
61        omena = new GameObject(Ruudunkoko, Ruudunkoko);
62        omena.Image = LoadImage("omena2");
63        Add(omena);
64       
65       
66
67
68        Timer paivitysAjastin = new Timer();
69        paivitysAjastin.Interval = 0.1;
70        paivitysAjastin.Timeout += Mato;
71        paivitysAjastin.Start();
72        Mouse.IsCursorVisible = true;
73        aikalaskuri.Reset();
74
75
76        Ohjaimet();
77        LuoAikalaskuri();
78        LuoMaailma();
79        Mato();
80       
81        //LuoPistelaskuri();
82       
83
84
85    }
86
87
88    void LuoMaailma()
89    {
90        Level.Background.Color = Color.Green;
91       
92    }
93    void Mato()
94    {
95        GameObject paa = matopalat[0];
96        GameObject vanhaPaa = matopalat[matopalat.Count - 1];
97        paa.Position = vanhaPaa.Position + suunta.GetVector() * Ruudunkoko;
98        matopalat.RemoveAt(0);
99        matopalat.Add(paa);
100        paa.Color = Color.Aquamarine;
101       
102
103        for (int i = 0; i < matopalat.Count - 1; i++) 
104        {
105            if (matopalat[i].IsInside(paa.Position))
106            {
107                Aloitus();
108                return;
109            }
110
111
112            if (!Level.BoundingRect.IsInside(paa.Position))
113            { Aloitus();
114                return;
115            }
116
117
118            if (omena.IsInside(paa.Position))
119            { double satunnainenX = RandomGen.NextInt(-Leveys / 2, Leveys / 2);
120                double satunnainenY = RandomGen.NextInt(-Korkeus / 2, Korkeus / 2);
121                omena.Position = new Vector(satunnainenX, satunnainenY) * Ruudunkoko;
122                LuoMatopala(matopalat[0].Position.X, matopalat[1].Position.Y);
123            }
124        }
125       
126    }
127   
128
129    void Ohjaimet()
130    {
131        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
132        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä kontrollit");
133        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
134        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
135        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
136        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
137        Keyboard.Listen(Key.P, ButtonState.Pressed, Pysäytys, "Pysäytä peli");
138
139    }
140    void MuutaSuunta(Direction uusisuunta)
141    {
142        suunta = uusisuunta;
143    }
144    public void LuoMatopala(double x, double y)
145    {
146        GameObject pala = new GameObject(Ruudunkoko, Ruudunkoko);
147        pala.X = x;
148        pala.Y = y;
149        matopalat.Insert(0, pala);
150        Add(pala);
151    }
152   
153   
154    void LuoAikalaskuri()
155    {
156       
157        aikalaskuri.Start();
158        Label aikanaytto = new Label();
159        aikanaytto.TextColor = Color.White;
160        aikanaytto.DecimalPlaces = 1;
161       aikanaytto.BindTo(aikalaskuri.SecondCounter);
162        Add(aikanaytto);
163        aikanaytto.X = Level.Right + 300;
164        aikanaytto.Y = Level.Top - 200;
165        aikanaytto.Title = "Aika";
166       
167       
168
169    }
170    void Valikko()
171    {
172        ClearAll();
173        valikonkohdat = new List<Label>();
174        Label kohta1 = new Label("Aloita uusi peli");
175        kohta1.Position = new Vector(0, 40);
176        valikonkohdat.Add(kohta1);
177        Label kohta2 = new Label("Lopeta peli");
178        kohta2.Position = new Vector(0, 0);
179        valikonkohdat.Add(kohta2);
180
181        foreach (Label Valikonkohta in valikonkohdat) 
182        {
183            Add(Valikonkohta);
184        }
185        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloitus, null);
186        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
187
188    }
189    void Pysäytys()
190    {
191        Pause();
192
193       
194    }
195   
196
197   
198    //void LuoPistelaskuri()
199    //{
200        //pisteLaskuri = new IntMeter(0,0, 200);
201
202        //Label pisteNaytto = new Label();
203        //pisteNaytto.X = Screen.Right - 100;
204        //pisteNaytto.Y = Screen.Top - 200;
205        //pisteNaytto.TextColor = Color.White;
206        //pisteNaytto.Color = Color.Green;
207
208        //pisteNaytto.BindTo(pisteLaskuri);
209        //Add(pisteNaytto);
210        //if (omena.IsInside(paa.Position))
211        //{
212            //pisteLaskuri.Value += 1;
213        //}
214    //}
215
216
217}
Note: See TracBrowser for help on using the repository browser.