예제 #1
0
        private void btnRand_Click(object sender, EventArgs e)
        {
            var cube = new Cube();

            var rand = new Random();

            var twists = new List <Twist>();

            for (int i = 0; i < 100; i++)
            {
                var t = Twist.Twists[rand.Next(0, Twist.Twists.Length - 1)];

                cube.twist(t);

                twists.Add(t);

                // ce modèle ne respecte pas la norme où les movement u,l,d,r,b bougent 2 couronnes. Ici la fonction twist n'en bouge qu'une. Le 2eme est bougé artificiellement
                if (char.IsLower(t.Name[0]))
                {
                    var t2 = Twist.Twists.First(x => x.Name == t.Name.ToUpper());

                    cube.twist(t2);
                }
            }

            var colorCube = new ColorCube();

            colorCube.setColors(cube);

            using (var state = GlobalState.GetState())
            {
                state.InitialCube = colorCube;
            }
        }
        public static ColorCube GetCube(IList <Color> colors)
        {
            var result = Classify(colors);

            result.Groups.ForEach((x) => x.UpdateAverageColor());


            var orderedRGroups = result.Groups.OrderBy((x) => x.AverageColor.R).ToList();

            if (orderedRGroups[0].AverageColor.B < orderedRGroups[1].AverageColor.B)
            {
                orderedRGroups[0].TheoreticalColor = Color.Green;
                orderedRGroups[1].TheoreticalColor = Color.Blue;
            }
            else
            {
                orderedRGroups[0].TheoreticalColor = Color.Blue;
                orderedRGroups[1].TheoreticalColor = Color.Green;
            }

            orderedRGroups[5].TheoreticalColor = Color.Orange;

            var orderedGGroups = orderedRGroups.Skip(2).Take(3).OrderBy((x) => x.AverageColor.G).ToList();

            orderedGGroups[0].TheoreticalColor = Color.Red;


            if (orderedGGroups[1].AverageColor.B < orderedGGroups[2].AverageColor.B)
            {
                orderedGGroups[1].TheoreticalColor = Color.Yellow;
                orderedGGroups[2].TheoreticalColor = Color.White;
            }
            else
            {
                orderedGGroups[1].TheoreticalColor = Color.White;
                orderedGGroups[2].TheoreticalColor = Color.Yellow;
            }

            var cube = new ColorCube();

            Console.WriteLine("R;G;B;ID;Color");
            result.Points.ForEach((x) => Console.WriteLine(x.MeasuredColor.R + ";" + x.MeasuredColor.G + ";" + x.MeasuredColor.B + ";" + x.Group.ID + ";" + x.Group.TheoreticalColor.Name));

            cube.setColors(result.Points.Select((x) => x.Group.TheoreticalColor).ToArray());

            return(cube);
        }
예제 #3
0
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            var cube = new Cube();

            var rand = new Random();

            var twists = new List <Twist>();

            for (int i = 0; i < udMoves.Value; i++)
            {
                var t = Twist.Twists[rand.Next(0, Twist.Twists.Length - 1)];

                cube.twist(t);

                twists.Add(t);

                // ce modèle ne respecte pas la norme où les movement u,l,d,r,b bougent 2 couronnes. Ici la fonction twist n'en bouge qu'une. Le 2eme est bougé artificiellement
                if (char.IsLower(t.Name[0]))
                {
                    var t2 = Twist.Twists.First(x => x.Name == t.Name.ToUpper());

                    cube.twist(t2);
                }
            }

            var colorCube = new ColorCube();

            colorCube.setColors(cube);

            var c1 = string.Join("", colorCube.FaceColors.Select(x => x.ToString()));

            var c1Split = Enumerable.Range(0, c1.Length / 16).Select(i => c1.Substring(i * 16, 16)).ToArray();

            // le solver java attend les couleurs des faces dans l'ordre URFDLB alors que le modèle renvoi ULFRBD donc on split la chaine en 6 et on réordonne
            txtColors.Text = string.Join("", c1Split[0], c1Split[3], c1Split[2], c1Split[5], c1Split[1], c1Split[4]);

            txtMoves.Text = string.Join(" ", twists.Select(x => x.Name));



            btnGo_Click(sender, e);
        }