示例#1
0
        public ValidPosition MakeTurn()
        {
            ValidPosition        bestPosition = this;
            Predicate <Position> betterScore  =
                p => p.Score > bestPosition.Score;

            for (int i = 0; i < 2 * COLUMN_COUNT - 1; ++i)
            {
                for (int j = 0; j < 2 * SHORT_COLUMN_LENGTH - 1; ++j)
                {
                    var point    = new RotationCenter(i, j);
                    var position = PositionBuilder.Generate(this, point, true).MakeTurn().Build();
                    if (betterScore(position))
                    {
                        bestPosition = position;
                    }
                    position = PositionBuilder.Generate(this, point, false).MakeTurn().Build();
                    if (betterScore(position))
                    {
                        bestPosition = position;
                    }
                }
            }
            return(bestPosition);
        }
示例#2
0
            public static PositionBuilder Generate(ValidPosition position, RotationCenter point, bool clockwise)
            {
                var shortColumns = position.ShortColumns;
                var longColumns  = position.LongColumns;

                point.Rotate(clockwise, shortColumns, longColumns);
                return(new PositionBuilder(shortColumns, longColumns, position.Score));
            }
示例#3
0
        public static ValidPosition Init()
        {
            var shortColumns = new int[COLUMN_COUNT, SHORT_COLUMN_LENGTH];
            var longColumns  = new int[COLUMN_COUNT, SHORT_COLUMN_LENGTH + 1];

            RandomLayout(shortColumns, longColumns);
            var position = new ValidPosition(shortColumns, longColumns, 0);

            if (position.ClusterCenterCount != 0)
            {
                throw new InvalidOperationException("Initial position not valid");
            }
            return(position);
        }
示例#4
0
        static void Main(string[] args)
        {
            var position = ValidPosition.Init();

            Console.WriteLine(position);
            var nextPosition = position.MakeTurn();

            while (nextPosition.Score > position.Score)
            {
                position = nextPosition;
                Console.ReadLine();
                Console.WriteLine(position);
                nextPosition = position.MakeTurn();
            }
            Console.WriteLine("The End");
            Console.ReadLine();
        }