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

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