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

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