source: 2016/27/PaavoH/solupeli/solupeli/solupeli/solupeli.cs @ 9512

Revision 9512, 2.8 KB checked in by rikavila, 18 months ago (diff)
Line 
1using System.Collections.Generic;
2using Jypeli;
3using Jypeli.Controls;
4
5public class solupeli : Game
6{
7    const int RUUDUN_KOKO = 50;
8    List<GameObject> ruudut = new List<GameObject>();
9    Color[] varit;
10    Vector[] suunnat = { new Vector(0,RUUDUN_KOKO),
11                     new Vector(RUUDUN_KOKO,0),
12                     new Vector(0,-RUUDUN_KOKO),
13                     new Vector(-RUUDUN_KOKO,0),
14                     new Vector(RUUDUN_KOKO,RUUDUN_KOKO),
15                     new Vector(RUUDUN_KOKO,-RUUDUN_KOKO),
16                     new Vector(-RUUDUN_KOKO,RUUDUN_KOKO),
17                     new Vector(-RUUDUN_KOKO,-RUUDUN_KOKO) };
18
19    public override void Begin()
20    {
21        Mouse.IsCursorVisible = true;
22        IsFullScreen = false;
23        Window.Width = 1200;
24        Window.Height = 1000;
25
26        LuoKentta();
27
28        Keyboard.Listen(Key.Space, ButtonState.Pressed, ElaKerran, "Eletään yksi kierros");
29
30        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
31    }
32
33    void LuoKentta()
34    {
35        double alkuX = -Window.Width / 2 + RUUDUN_KOKO / 2;
36        double alkuY = -Window.Height / 2 + RUUDUN_KOKO / 2;
37
38        for (double x = alkuX; x < Window.Width / 2; x += RUUDUN_KOKO)
39            for (double y = alkuY; y < Window.Height / 2; y += RUUDUN_KOKO)
40                LuoRuutu(x, y);
41        varit = new Color[ruudut.Count];
42    }
43
44    void LuoRuutu(double x, double y)
45    {
46        GameObject ruutu = new GameObject(RUUDUN_KOKO - 2, RUUDUN_KOKO - 2);
47        ruutu.Position = new Vector(x, y);
48
49        Mouse.ListenOn(ruutu, MouseButton.Left, ButtonState.Pressed,
50        () => { VaihdaVaria(ruutu); }, "Vaihdetaan ruudun väriä");
51
52        ruudut.Add(ruutu);
53        Add(ruutu);
54    }
55
56    void VaihdaVaria(GameObject ruutu)
57    {
58        if (ruutu.Color == Color.White)
59            ruutu.Color = Color.Black;
60        else ruutu.Color = Color.White;
61    }
62
63    void ElaKerran()
64    {
65        for (int i = 0; i < ruudut.Count; i++)
66        {
67            int naapurit = LaskeNaapurit(ruudut[i]);
68            varit[i] = ruudut[i].Color;
69            if (ruudut[i].Color == Color.Black)
70                if (naapurit < 2 || naapurit > 3)
71                    varit[i] = Color.White;
72            if (ruudut[i].Color == Color.White)
73                if (naapurit == 3)
74                    varit[i] = Color.Black;
75        }
76
77        for (int i = 0; i < ruudut.Count; i++)
78            ruudut[i].Color = varit[i];
79    }
80
81    int LaskeNaapurit(GameObject ruutu)
82    {
83        int naapurienMaara = 0;
84        foreach (Vector v in suunnat)
85        {
86            GameObject naapuri = GetObjectAt(ruutu.Position + v);
87            if (naapuri != null && naapuri.Color == Color.Black)
88                naapurienMaara++;
89        }
90        return naapurienMaara;
91    }
92}
Note: See TracBrowser for help on using the repository browser.