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

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