source: 2018/31/Panu/F144/F144.cs @ 9853

Revision 9853, 6.9 KB checked in by paritala, 3 years ago (diff)
Line 
1using System;
2using Jypeli;
3using System.Collections.Generic;
4
5public class F144 : PhysicsGame
6{
7    const bool FAST = false;
8    const double NOPEUS = 50;
9    double KOKO = 100, ERO = 10;
10    public static List<Fibo> fribsterit = new List<Fibo>();
11    static List<int> fibulos = new List<int>();
12    bool YksikaanLiikkunut = false;
13    bool YksikaanFibahtanut = false;
14    bool AlaSpawnaa = false;
15    string cons = "qwrtpsdfghjklzxcvbnmffffffffbbbbbbb";
16    string voks = "aeiyuuuoiiiiiiooooo";
17    public override void Begin()
18    {
19       Level.Background.Color = Color.Black;
20
21        fibulos.Add(1); fibulos.Add(1);
22        for (int i = 1; i < 20; i++)
23            fibulos.Add(fibulos[i] + fibulos[i - 1]);
24
25        for (int i = 0; i < 4; i++)
26        {
27            for (int j = 0; j < 4; j++)
28            {
29                Fibo fibbana = (new Fibo(KOKO) { X = -(KOKO + ERO) * 1.5 + i * (KOKO + ERO), Y = -(KOKO + ERO) * 1.5 + j * (KOKO + ERO), Row = i, Col = j });
30                Add(fibbana);
31                Add(fibbana.Fibautin,2);
32                fibbana.Fibautin.Add(fibbana.Fibbeli);
33                fibbana.Fibautin.Position = fibbana.Position;
34            }
35        }
36        Keyboard.ListenArrows(ButtonState.Pressed, SpawnaaRandom, null);
37        //SpawnaaRandom();
38
39        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
40        Keyboard.Listen(Key.F4, ButtonState.Pressed, ToggleSpawn, null);
41        Fibo fibsteri = RandomGen.SelectOne<Fibo>(fribsterit);// vapaat[  RandomGen.NextInt(vapaat.Count)];
42        AnnaArvo(fibsteri, RandomGen.SelectOne(1, 1, 1, 1, 2));
43
44        //AnnaArvo(fribsterit[0], 3);
45        //AnnaArvo(fribsterit[0], 1);
46        //AnnaArvo(fribsterit[0], 1);
47
48        YksikaanFibahtanut = false;
49    }
50
51    private void ToggleSpawn()
52    {
53        AlaSpawnaa = !AlaSpawnaa;
54    }
55
56    private void SpawnaaRandom(Vector v)
57    {
58        // liikuta
59        YksikaanFibahtanut = false;
60        YksikaanLiikkunut = true;
61
62        while (YksikaanLiikkunut)
63        {
64            YksikaanLiikkunut = false;
65            foreach (Fibo fib in GetObjectsWithTag("fibo"))
66            {
67                if (fib.IsChanged || fribsterit.Contains(fib)) continue;
68                int arvo = fib.Arvo;
69                Vector uudenPaikka = fib.Position + ((ERO + KOKO) * v);
70                List<GameObject> fibs = GetObjectsAt(uudenPaikka, "fibo", ERO);
71                if (fibs.Count < 1) continue;
72
73                Fibo fibuli = (Fibo)fibs[0];
74                if (fib.Equals(fibuli)) continue;
75                if (fibuli.IsMerged || fib.IsMerged) continue;
76                if (!AnnaArvo(fibuli, arvo)) continue;
77                fribsterit.Add(fib);
78                if (FAST)
79                {
80                    fib.Fibautin.Position = fib.Position;
81                    if (!fib.IsNew || !fib.HasFib)
82                    {
83                        fib.Fibautin.IsVisible = false;
84                        fib.Fibbeli.IsVisible = false;
85                    }
86                }
87                else
88                {
89                    YksikaanFibahtanut = true;
90                    fib.Fibautin.MoveTo(fibs[0].Position, 1000, delegate
91                    {
92                        fib.Fibautin.Position = fib.Position;
93                        KatkeFiibale(fib);
94
95                    });
96                }
97                fib.HasFib = false;
98                //fibuli.Color = Color.Red;
99            }
100        }
101
102        foreach (Fibo f in GetObjectsWithTag("fibo"))
103        {
104            f.IsChanged = false;
105            f.Color = Color.White;
106            f.IsMerged = f.IsNew = false;
107            if (f.HasFib)
108            {
109                f.Fibbeli.IsVisible = f.Fibautin.IsVisible = true;
110                f.Fibautin.Color = new Color(100, 255 - fibulos.IndexOf(f.Arvo) * 20, 163);
111            }
112        }
113        foreach (Fibo vapaa in fribsterit)
114        {   
115            vapaa.Color = Color.Gray;
116        }
117        if (YksikaanFibahtanut || AlaSpawnaa)
118        {
119            Fibo fibsteri = RandomGen.SelectOne<Fibo>(fribsterit);
120            AnnaArvo(fibsteri, RandomGen.SelectOne(1, 1, 1, 1, 2));
121            fibsteri.Fibautin.Color = Color.Turquoise;
122            fibsteri.IsNew = true;
123            MessageDisplay.Clear();
124            string fibulointi = Fibuloi();
125            MessageDisplay.Add("uus fib! " + fibsteri.Row + "," + fibsteri.Col + ",  " + fibulointi);
126            //Timer.SingleShot()
127        }
128    }
129
130    // 1 3 5 6 4 3 3
131
132    private void KatkeFiibale(Fibo fib)
133    {
134        if (!fib.IsNew)
135        {
136            fib.Fibautin.IsVisible = fib.Fibbeli.IsVisible = false;
137        }
138        if (fib.HasFib) fib.Fibautin.IsVisible = fib.Fibbeli.IsVisible = true;
139    }
140
141    private string Fibuloi()
142    {
143        string fibulointi = "Fib";
144        for (int i = 0; i < 1; i++)
145        {
146            fibulointi += voks[RandomGen.NextInt(voks.Length)];
147
148            fibulointi += cons[RandomGen.NextInt(cons.Length)];
149            fibulointi += voks[RandomGen.NextInt(voks.Length)];
150
151        }
152        return fibulointi;
153    }
154
155    //void Fibbeloi(
156    //{
157    //    fib.Fibautin.Position = fib.Position;
158    //    if (!fib.IsNew)
159    //    {
160    //        fib.Fibautin.IsVisible = false;
161    //        fib.Fibbeli.IsVisible = false;
162    //    }
163    //}
164
165    private bool AnnaArvo(Fibo fibsteri, int arvo)
166    {
167        if (fibsteri.HasFib)
168        {
169            if (fibsteri.IsMerged) return false; ///ehkä turha
170            int index1 = fibulos.IndexOf(arvo);
171            int index2 = fibulos.IndexOf(fibsteri.Arvo);
172            if (index1 == 0) index1 = 1;
173            if (index2 == 0) index2 = 1;
174
175            if ((arvo == 1 && 1 == fibsteri.Arvo) || Math.Abs(index2 - index1) == 1)
176            {
177                arvo = arvo + fibsteri.Arvo;
178                fibsteri.IsMerged = true;
179            }
180            else return false;
181        }
182        YksikaanLiikkunut = true;
183        fribsterit.Remove(fibsteri);
184        fibsteri.Arvo = arvo;
185        fibsteri.HasFib = true;
186       
187        fibsteri.Fibbeli.Text = fibsteri.Arvo + "";
188        //fibsteri.Fibbeli.Position = fibsteri.Position;
189        fibsteri.Fibbeli.IsVisible = true;
190        fibsteri.Fibautin.IsVisible = true;
191        fibsteri.IsChanged = false;
192        fibsteri.Color = Color.Orange;
193        return true;
194    }
195}
196
197public class Fibo : GameObject
198{
199    public bool IsMerged = false, ContainsValue = false, IsChanged = false, HasFib = false, IsNew = false;
200    public int Row = 0, Col = 0, Arvo = 0;
201    public Label Fibbeli = new Label();
202    public GameObject Fibautin = new GameObject(1, 1);
203
204    public Fibo(double s) : base(s,s) { F144.fribsterit.Add(this); Tag = "fibo"; Fibbeli.IsVisible = false;
205        Fibautin.Size = new Vector(s, s);
206        Fibautin.IsVisible = false;
207        Fibautin.Color = new Color( Color.Turquoise, 200);
208    }
209}
Note: See TracBrowser for help on using the repository browser.