예제 #1
0
        public void UpdateMovePreview(int column)
        {
            if (Game.Finished || GetCurrentPlayerType == PlayerType.Computer)
            {
                return;
            }

            var row = GetEmptyRowIndex(column);

            if (row == -1)
            {
                return;
            }

            if (Preview == null)
            {
                Preview = new ChipViewModel();
                Chips.Add(Preview);
            }

            var previewChip = Preview.Chip;

            previewChip.Column = column;
            previewChip.Row    = row;
            previewChip.Player = Game.CurrentPlayer;
        }
예제 #2
0
        /// <summary>
        /// Perform a move for the <see cref="Game.CurrentPlayer"/>
        /// </summary>
        /// <param name="column">Index between 0 (inclusive) and <see cref="Game.COLUMNS"/>(exlusive)</param>
        private void DoMove(int column)
        {
            if (Game.Finished)
            {
                return;
            }

            var row = GetEmptyRowIndex(column);

            if (row == -1)
            {
                return;
            }

            Game.Board[column, row] = Game.CurrentPlayer;

            if (Preview == null)
            {
                Preview = new ChipViewModel();
                Chips.Add(Preview);
            }

            var chip = Preview.Chip;

            chip.Row    = row;
            chip.Column = column;
            chip.Player = Game.CurrentPlayer;

            if (HasCurrentPlayerWon())
            {
                Game.Finished = true;
                return;
            }

            Preview = null;
            Game.Turn++;

            // Immediately perform the move for the AI
            if (GetCurrentPlayerType == PlayerType.Computer)
            {
                // Determine best move
                var rand = new Random();
                var col  = rand.Next(0, COLUMNS);

                DoMove(col);
            }
        }