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

Revision 9232, 7.3 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   
18    List<GameObject> matopalat = new List<GameObject>();
19    EasyHighScore toplista = new EasyHighScore(10);
20   
21    IntMeter pisteLaskuri;
22
23
24
25   
26    GameObject paa = new GameObject(40, 40);
27
28   
29
30
31
32
33
34
35
36
37    public override void Begin()
38    {
39        IsFullScreen = true;
40        SmoothTextures = false;
41
42        Valikko();
43       
44
45       
46       
47     
48
49    }
50
51    void PelaajaKuoli()
52    {
53        Pysäytys();
54        toplista.EnterAndShow(pisteLaskuri.Value);
55        toplista.HighScoreWindow.Closed += AloitaPeli2;
56    }
57    void Toplista()
58    {
59        toplista.Show();
60        toplista.HighScoreWindow.Closed += AloitaPeli3;
61    }
62    public void AloitaPeli3(Window sender)
63    {
64        Valikko();
65    }
66
67    public void AloitaPeli2(Window sender)
68    {
69        Aloitus();
70    }
71
72
73    void LuoPistelaskuri()
74    {
75        pisteLaskuri = new IntMeter( 0, 0, 1000 );
76
77        Label pisteNaytto = new Label();
78        pisteNaytto.X = Screen.Right - 200;
79        pisteNaytto.Y = Screen.Top - 100;
80        pisteNaytto.TextColor = Color.White;
81        pisteNaytto.Color = Color.Green;
82        pisteNaytto.Title = "Pisteet";
83        pisteNaytto.BindTo(pisteLaskuri);
84        Add(pisteNaytto);
85    }
86   
87       
88
89
90    void AloitaPeli()
91    {
92
93        Aloitus();
94    }
95    void ÄäniTehoste()
96    {
97        SoundEffect omenanaani = LoadSoundEffect("omenanääni");
98        omenanaani.Play();
99
100     
101    }
102    void Seinaantormays()
103    {
104        SoundEffect seinaantormays = LoadSoundEffect("seinääntörmäys");
105        seinaantormays.Play();
106    }
107   
108   public void Aloitus( )
109    {
110       
111        matopalat.Clear();
112        ClearAll();
113        IsPaused = false;
114       
115        suunta = Direction.Up;
116        Level.CreateBorders(true);
117        Level.Width = Ruudunkoko * Leveys;
118        Level.Height = Ruudunkoko * Korkeus;
119
120        LuoMatopala(6 * Ruudunkoko, 3 * Ruudunkoko);
121        LuoMatopala(5 * Ruudunkoko, 3 * Ruudunkoko);
122        LuoMatopala(4 * Ruudunkoko, 3 * Ruudunkoko);
123        LuoMatopala(3 * Ruudunkoko, 3 * Ruudunkoko);
124        omena = new GameObject(Ruudunkoko, Ruudunkoko);
125        omena.Shape = Shape.Circle;
126        omena.Image = LoadImage("omena2");
127        omena.Image.ReplaceColor(Color.White, Color.Transparent);
128        Add(omena);
129       
130       
131
132
133        Timer paivitysAjastin = new Timer();
134        paivitysAjastin.Interval = 0.1;
135        paivitysAjastin.Timeout += Mato;
136        paivitysAjastin.Start();
137        Mouse.IsCursorVisible = false;
138       
139       
140
141
142        Ohjaimet();
143       
144        LuoMaailma();
145        Mato();
146        Ohje();
147        LuoPistelaskuri();
148       
149       
150       
151       
152
153
154    }
155 
156   
157   
158   
159    void Ohje()
160    {
161        MessageDisplay.Add("Ohjeet:F1");
162        MessageDisplay.TextColor = Color.White;
163        MessageDisplay.MessageTime = new TimeSpan(0, 0, 3);
164        MessageDisplay.Font = Font.DefaultLarge;
165       
166    }
167
168
169    void LuoMaailma()
170    {
171        Level.Background.Color = Color.Green;
172       
173
174
175    }
176    void Mato()
177    {
178        GameObject paa = matopalat[0];
179        GameObject vanhaPaa = matopalat[matopalat.Count - 1];
180        paa.Position = vanhaPaa.Position + suunta.GetVector() * Ruudunkoko;
181        matopalat.RemoveAt(0);
182        matopalat.Add(paa);
183        paa.Color = Color.Aquamarine;
184       
185
186        for (int i = 0; i < matopalat.Count - 1; i++) 
187        {
188            if (matopalat[i].IsInside(paa.Position))
189            {
190                Seinaantormays();
191                ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.2);
192                PelaajaKuoli();
193
194               
195                return;
196            }
197
198
199            if (!Level.BoundingRect.IsInside(paa.Position))
200            {
201                Seinaantormays();
202                ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.2);
203                PelaajaKuoli();
204               
205               
206                return;
207               
208            }
209
210
211            if (omena.IsInside(paa.Position))
212            { double satunnainenX = RandomGen.NextInt(-Leveys / 2, Leveys / 2);
213                double satunnainenY = RandomGen.NextInt(-Korkeus / 2, Korkeus / 2);
214                omena.Position = new Vector(satunnainenX, satunnainenY) * Ruudunkoko;
215                LuoMatopala(matopalat[0].Position.X, matopalat[1].Position.Y);
216                ÄäniTehoste();
217                pisteLaskuri.Value += 1;
218            }
219        }
220       
221
222       
223    } 
224   
225
226    void Ohjaimet()
227    {
228        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
229        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
230        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
231        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
232        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
233        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
234        Keyboard.Listen(Key.P, ButtonState.Pressed, Pysäytys, "Pysäytä peli");
235        Keyboard.Listen(Key.F2, ButtonState.Pressed, Aloitus, "Aloita alusta");
236        Keyboard.Listen(Key.F3, ButtonState.Pressed, Valikko, "Palaa valikkoon");
237        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
238        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
239        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
240        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
241        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
242        ControllerOne.Listen(Button.BigButton, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
243        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Pysäytys, "Pysäytä peli");
244     
245
246    }
247    void MuutaSuunta(Direction uusisuunta)
248    {
249        suunta = uusisuunta;
250    }
251    public void LuoMatopala(double x, double y)
252    {
253        GameObject pala = new GameObject(Ruudunkoko, Ruudunkoko);
254        pala.X = x;
255        pala.Y = y;
256        matopalat.Insert(0, pala);
257        Add(pala);
258    }
259   
260   
261   
262     
263
264    void Valikko()
265    {
266        ClearAll();
267
268        MultiSelectWindow alkuValikko = new MultiSelectWindow("Snake",
269        "Aloita peli", "Parhaat pisteet", "Lopeta");
270        Add(alkuValikko);
271        alkuValikko.AddItemHandler(0, AloitaPeli);
272        alkuValikko.AddItemHandler(1, Toplista);
273        alkuValikko.AddItemHandler(2, Exit);
274        alkuValikko.DefaultCancel = 2;
275        alkuValikko.Color = Color.Blue;
276        alkuValikko.BorderColor = Color.Blue;
277        alkuValikko.Font = Font.DefaultLarge;
278       
279    }
280    void Pysäytys()
281    {
282        Pause();
283    }
284   
285   
286
287   
288
289
290
291
292
293
294
295
296
297}
Note: See TracBrowser for help on using the repository browser.