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

Revision 9099, 3.2 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
19    public override void Begin()
20    {
21        LuoMaailma();
22       
23       
24        Aloitus();
25       
26
27
28
29    }
30    void Aloitus()
31    {
32        matopalat.Clear();
33        ClearAll();
34        suunta = Direction.Up;
35        Level.CreateBorders(true);
36        Level.Width = Ruudunkoko * Leveys;
37        Level.Height = Ruudunkoko * Korkeus;
38
39        LuoMatopala(6 * Ruudunkoko, 3 * Ruudunkoko);
40        LuoMatopala(5 * Ruudunkoko, 3 * Ruudunkoko);
41        LuoMatopala(4 * Ruudunkoko, 3 * Ruudunkoko);
42        LuoMatopala(3 * Ruudunkoko, 3 * Ruudunkoko);
43        omena = new GameObject(Ruudunkoko, Ruudunkoko);
44        omena.Color = Color.BloodRed;
45        Add(omena);
46       
47
48
49        Timer paivitysAjastin = new Timer();
50        paivitysAjastin.Interval = 0.1;
51        paivitysAjastin.Timeout += Mato;
52        paivitysAjastin.Start();
53        Ohjaimet();
54    }
55
56
57    void LuoMaailma()
58    {
59        Level.Background.Color = Color.Black;
60       
61    }
62    void Mato()
63    {
64        GameObject paa = matopalat[0];
65        GameObject vanhaPaa = matopalat[matopalat.Count - 1];
66        paa.Position = vanhaPaa.Position + suunta.GetVector() * Ruudunkoko;
67        matopalat.RemoveAt(0);
68        matopalat.Add(paa);
69
70        for (int i = 0; i < matopalat.Count - 1; i++) 
71        {
72            if (matopalat[i].IsInside(paa.Position))
73            {
74                Aloitus();
75                return;
76            }
77
78
79            if (!Level.BoundingRect.IsInside(paa.Position))
80            { Aloitus();
81                return;
82            }
83
84
85            if (omena.IsInside(paa.Position))
86            { double satunnainenX = RandomGen.NextInt(-Leveys / 2, Leveys / 2);
87                double satunnainenY = RandomGen.NextInt(-Korkeus / 2, Korkeus / 2);
88                omena.Position = new Vector(satunnainenX, satunnainenY) * Ruudunkoko;
89                LuoMatopala(matopalat[0].Position.X, matopalat[1].Position.Y);
90            }
91        }
92    }
93
94    void Ohjaimet()
95    {
96        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
97        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä kontrollit");
98        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSuunta, "Ylös", Direction.Up);
99        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSuunta, "Alas", Direction.Down);
100        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSuunta, "Vasemmalle", Direction.Left);
101        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSuunta, "Oikealle", Direction.Right);
102
103    }
104    void MuutaSuunta(Direction uusisuunta)
105    {
106        suunta = uusisuunta;
107    }
108    public void LuoMatopala(double x, double y)
109    {
110        GameObject pala = new GameObject(Ruudunkoko, Ruudunkoko);
111        pala.X = x;
112        pala.Y = y;
113        matopalat.Insert(0, pala);
114        Add(pala);
115    }
116
117}
Note: See TracBrowser for help on using the repository browser.