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

Revision 9157, 6.4 KB checked in by npo17_61, 23 months 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   
18    List<GameObject> matopalat = new List<GameObject>();
19   
20    Timer aikalaskuri = new Timer();
21
22
23
24    ScoreList topLista = new ScoreList(10, false, 0);
25    GameObject paa = new GameObject(40, 40);
26    //GameObject este = new GameObject(50.0, 50.0);
27   
28 
29
30
31
32
33
34    public override void Begin()
35    {
36        IsFullScreen = true;
37       
38
39        Valikko();
40       
41
42       
43       
44     
45
46    }
47      //Top10()
48    //{
49        //topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
50        //HighScoreWindow topIkkuna = new HighScoreWindow(
51                             //"Parhaat pisteet", topLista);
52        //topIkkuna.Closed += TallennaPisteet;
53        //Add(topIkkuna);
54    //}
55   
56    void AloitaPeli()
57    {
58
59        Aloitus();
60    }
61   
62   public void Aloitus()
63    {
64       
65        matopalat.Clear();
66        ClearAll();
67        suunta = Direction.Up;
68        Level.CreateBorders(true);
69        Level.Width = Ruudunkoko * Leveys;
70        Level.Height = Ruudunkoko * Korkeus;
71
72        LuoMatopala(6 * Ruudunkoko, 3 * Ruudunkoko);
73        LuoMatopala(5 * Ruudunkoko, 3 * Ruudunkoko);
74        LuoMatopala(4 * Ruudunkoko, 3 * Ruudunkoko);
75        LuoMatopala(3 * Ruudunkoko, 3 * Ruudunkoko);
76        omena = new GameObject(Ruudunkoko, Ruudunkoko);
77        omena.Image = LoadImage("omena2");
78        Add(omena);
79       
80       
81
82
83        Timer paivitysAjastin = new Timer();
84        paivitysAjastin.Interval = 0.1;
85        paivitysAjastin.Timeout += Mato;
86        paivitysAjastin.Start();
87        Mouse.IsCursorVisible = true;
88        aikalaskuri.Reset();
89
90
91        Ohjaimet();
92        LuoAikalaskuri();
93        LuoMaailma();
94        Mato();
95        Ohje();
96       
97        //Top10();
98       
99       
100       
101
102
103    }
104   
105   
106   
107    void Ohje()
108    {
109        MessageDisplay.Add("Ohjeet:F1");
110        MessageDisplay.TextColor = Color.White;
111        MessageDisplay.MessageTime = new TimeSpan(0, 0, 3);
112        MessageDisplay.Font = Font.DefaultLarge;
113       
114    }
115
116
117    void LuoMaailma()
118    {
119        Level.Background.Color = Color.Green;
120        //este.X = RandomGen.NextDouble(Level.Left, Level.Right);
121        //este.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
122        //este.Color = Color.Gray;
123        //este.Shape = Shape.Rectangle;
124        //Add(este);
125
126        //if (este.IsInside(paa.Position))
127        //{
128            //paa.Destroy();
129        //}
130
131    }
132    void Mato()
133    {
134        GameObject paa = matopalat[0];
135        GameObject vanhaPaa = matopalat[matopalat.Count - 1];
136        paa.Position = vanhaPaa.Position + suunta.GetVector() * Ruudunkoko;
137        matopalat.RemoveAt(0);
138        matopalat.Add(paa);
139        paa.Color = Color.Aquamarine;
140       
141
142        for (int i = 0; i < matopalat.Count - 1; i++) 
143        {
144            if (matopalat[i].IsInside(paa.Position))
145            {
146                Aloitus();
147               
148                return;
149            }
150
151
152            if (!Level.BoundingRect.IsInside(paa.Position))
153            { Aloitus();
154                return;
155            }
156
157
158            if (omena.IsInside(paa.Position))
159            { double satunnainenX = RandomGen.NextInt(-Leveys / 2, Leveys / 2);
160                double satunnainenY = RandomGen.NextInt(-Korkeus / 2, Korkeus / 2);
161                omena.Position = new Vector(satunnainenX, satunnainenY) * Ruudunkoko;
162                LuoMatopala(matopalat[0].Position.X, matopalat[1].Position.Y);
163            }
164        }
165
166        if (omena.IsInside(paa.Position))
167        {
168            paa.Width += 1000;
169            paa.Height += 1000;
170        }
171    } 
172   
173
174    void Ohjaimet()
175    {
176        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
177        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä kontrollit");
178        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
179        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
180        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
181        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
182        Keyboard.Listen(Key.P, ButtonState.Pressed, Pysäytys, "Pysäytä peli");
183        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
184        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
185        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
186        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
187    }
188    void MuutaSuunta(Direction uusisuunta)
189    {
190        suunta = uusisuunta;
191    }
192    public void LuoMatopala(double x, double y)
193    {
194        GameObject pala = new GameObject(Ruudunkoko, Ruudunkoko);
195        pala.X = x;
196        pala.Y = y;
197        matopalat.Insert(0, pala);
198        Add(pala);
199    }
200   
201   
202    void LuoAikalaskuri()
203    {
204       
205        aikalaskuri.Start();
206        Label aikanaytto = new Label();
207        aikanaytto.TextColor = Color.White;
208        aikanaytto.DecimalPlaces = 1;
209       aikanaytto.BindTo(aikalaskuri.SecondCounter);
210        Add(aikanaytto);
211        aikanaytto.X = Level.Right + 300;
212        aikanaytto.Y = Level.Top - 200;
213        aikanaytto.Title = "Aika";
214        aikanaytto.Font = Font.DefaultLarge;
215       
216       
217
218    }
219     
220
221    void Valikko()
222    {
223        ClearAll();
224
225        MultiSelectWindow alkuValikko = new MultiSelectWindow("Snake",
226        "Aloita peli", "Lopeta");
227        Add(alkuValikko);
228        alkuValikko.AddItemHandler(0, AloitaPeli);
229        alkuValikko.AddItemHandler(1, Exit);
230        alkuValikko.DefaultCancel = 1;
231        alkuValikko.Color = Color.Blue;
232        alkuValikko.BorderColor = Color.Blue;
233        alkuValikko.Font = Font.DefaultLarge;
234       
235    }
236    void Pysäytys()
237    {
238        Pause();
239    }
240
241   
242
243
244
245
246
247
248
249
250
251}
Note: See TracBrowser for help on using the repository browser.