예제 #1
0
        /// <summary>
        /// Method used to randomly select a unplaced tile for the AI if the checking
        /// has no suggestion.
        /// </summary>
        public void AiMove(SpaceTypes aiType)
        {
            var playerType = aiType == SpaceTypes.O ? SpaceTypes.X : SpaceTypes.O;

            #region Offensive Check

            if (_botDifficulty >= BotDifficulty.Hard)
            {
                #region Horizontal Check

                for (var r = 0; r < 3; r++)
                {
                    if (_fieldSpaces[r, 0] == aiType && _fieldSpaces[r, 1] == aiType &&
                        _fieldSpaces[r, 2] == SpaceTypes.Open)
                    {
                        PlaySpace(aiType, new FieldItem(r, 2));
                        return;
                    }
                    if (_fieldSpaces[r, 0] == aiType && _fieldSpaces[r, 1] == SpaceTypes.Open &&
                        _fieldSpaces[r, 2] == aiType)
                    {
                        PlaySpace(aiType, new FieldItem(r, 1));
                        return;
                    }
                    if (_fieldSpaces[r, 0] == SpaceTypes.Open && _fieldSpaces[r, 1] == aiType &&
                        _fieldSpaces[r, 2] == aiType)
                    {
                        PlaySpace(aiType, new FieldItem(r, 0));
                        return;
                    }
                }

                #endregion

                #region Vertical Check

                for (var c = 0; c < 3; c++)
                {
                    if (_fieldSpaces[0, c] == aiType && _fieldSpaces[1, c] == aiType &&
                        _fieldSpaces[2, c] == SpaceTypes.Open)
                    {
                        PlaySpace(aiType, new FieldItem(2, c));
                        return;
                    }
                    if (_fieldSpaces[0, c] == aiType && _fieldSpaces[1, c] == SpaceTypes.Open &&
                        _fieldSpaces[2, c] == aiType)
                    {
                        PlaySpace(aiType, new FieldItem(1, c));
                        return;
                    }
                    if (_fieldSpaces[0, c] == SpaceTypes.Open && _fieldSpaces[1, c] == aiType &&
                        _fieldSpaces[2, c] == aiType)
                    {
                        PlaySpace(aiType, new FieldItem(0, c));
                        return;
                    }
                }

                #endregion

                #region Cross Check
                if (_fieldSpaces[0, 0] == aiType && _fieldSpaces[1, 1] == aiType &&
                        _fieldSpaces[2, 2] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(2, 2));
                    return;
                }
                if (_fieldSpaces[0, 0] == aiType && _fieldSpaces[1, 1] == SpaceTypes.Open &&
                    _fieldSpaces[2, 2] == aiType)
                {
                    PlaySpace(aiType, new FieldItem(1, 1));
                    return;
                }
                if (_fieldSpaces[0, 0] == SpaceTypes.Open && _fieldSpaces[1, 1] == aiType &&
                    _fieldSpaces[2, 2] == aiType)
                {
                    PlaySpace(aiType, new FieldItem(0, 0));
                    return;
                }

                if (_fieldSpaces[0, 2] == aiType && _fieldSpaces[1, 1] == aiType &&
                        _fieldSpaces[2, 0] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(2, 0));
                    return;
                }
                if (_fieldSpaces[0, 2] == aiType && _fieldSpaces[1, 1] == SpaceTypes.Open &&
                    _fieldSpaces[2, 0] == aiType)
                {
                    PlaySpace(aiType, new FieldItem(1, 1));
                    return;
                }
                if (_fieldSpaces[0, 2] == SpaceTypes.Open && _fieldSpaces[1, 1] == aiType &&
                    _fieldSpaces[2, 0] == aiType)
                {
                    PlaySpace(aiType, new FieldItem(0, 2));
                    return;
                }
                #endregion
            }

            #endregion

            #region Defensive Check

            if (_botDifficulty >= BotDifficulty.Medium)
            {
                #region Horizontal Check

                for (var r = 0; r < 3; r++)
                {
                    if (_fieldSpaces[r, 0] == playerType && _fieldSpaces[r, 1] == playerType &&
                        _fieldSpaces[r, 2] == SpaceTypes.Open)
                    {
                        PlaySpace(aiType, new FieldItem(r, 2));
                        return;
                    }
                    if (_fieldSpaces[r, 0] == playerType && _fieldSpaces[r, 1] == SpaceTypes.Open &&
                        _fieldSpaces[r, 2] == playerType)
                    {
                        PlaySpace(aiType, new FieldItem(r, 1));
                        return;
                    }
                    if (_fieldSpaces[r, 0] == SpaceTypes.Open && _fieldSpaces[r, 1] == playerType &&
                        _fieldSpaces[r, 2] == playerType)
                    {
                        PlaySpace(aiType, new FieldItem(r, 0));
                        return;
                    }
                }

                #endregion

                #region Vertical Check

                for (var c = 0; c < 3; c++)
                {
                    if (_fieldSpaces[0, c] == playerType && _fieldSpaces[1, c] == playerType &&
                        _fieldSpaces[2, c] == SpaceTypes.Open)
                    {
                        PlaySpace(aiType, new FieldItem(2, c));
                        return;
                    }
                    if (_fieldSpaces[0, c] == playerType && _fieldSpaces[1, c] == SpaceTypes.Open &&
                        _fieldSpaces[2, c] == playerType)
                    {
                        PlaySpace(aiType, new FieldItem(1, c));
                        return;
                    }
                    if (_fieldSpaces[0, c] == SpaceTypes.Open && _fieldSpaces[1, c] == playerType &&
                        _fieldSpaces[2, c] == playerType)
                    {
                        PlaySpace(aiType, new FieldItem(0, c));
                        return;
                    }
                }

                #endregion

                #region Cross Check
                if (_fieldSpaces[0, 0] == playerType && _fieldSpaces[1, 1] == playerType &&
                        _fieldSpaces[2, 2] == SpaceTypes.Open)
                {
                    PlaySpace(playerType, new FieldItem(2, 2));
                    return;
                }
                if (_fieldSpaces[0, 0] == playerType && _fieldSpaces[1, 1] == SpaceTypes.Open &&
                    _fieldSpaces[2, 2] == playerType)
                {
                    PlaySpace(playerType, new FieldItem(1, 1));
                    return;
                }
                if (_fieldSpaces[0, 0] == SpaceTypes.Open && _fieldSpaces[1, 1] == playerType &&
                    _fieldSpaces[2, 2] == playerType)
                {
                    PlaySpace(playerType, new FieldItem(0, 0));
                    return;
                }

                if (_fieldSpaces[0, 2] == playerType && _fieldSpaces[1, 1] == playerType &&
                        _fieldSpaces[2, 0] == SpaceTypes.Open)
                {
                    PlaySpace(playerType, new FieldItem(2, 0));
                    return;
                }
                if (_fieldSpaces[0, 2] == playerType && _fieldSpaces[1, 1] == SpaceTypes.Open &&
                    _fieldSpaces[2, 0] == playerType)
                {
                    PlaySpace(playerType, new FieldItem(1, 1));
                    return;
                }
                if (_fieldSpaces[0, 2] == SpaceTypes.Open && _fieldSpaces[1, 1] == playerType &&
                    _fieldSpaces[2, 0] == playerType)
                {
                    PlaySpace(playerType, new FieldItem(0, 2));
                    return;
                }
                #endregion
            }

            #endregion

            #region Easy Mode Check

            if (_botDifficulty >= BotDifficulty.Easy)
            {
                if (_fieldSpaces[1, 1] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(1, 1));
                    return;
                }
                if (_fieldSpaces[0, 0] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(0, 0));
                    return;
                }
                if (_fieldSpaces[0, 2] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(0, 2));
                    return;
                }
                if (_fieldSpaces[2, 0] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(2, 0));
                    return;
                }
                if (_fieldSpaces[2, 2] == SpaceTypes.Open)
                {
                    PlaySpace(aiType, new FieldItem(2, 2));
                    return;
                }
            }

            #endregion

            #region Random

            if (_botDifficulty >= BotDifficulty.Random)
            {
                var index = _random.Next(_openFieldPlaces.Count);
                var played = _openFieldPlaces[index];
                PlaySpace(aiType, played);
            }

            #endregion
        }
예제 #2
0
        /// <summary>
        /// Method used to play any space on the board.
        /// </summary>
        /// <param name="type">SpaceType that is being played.</param>
        /// <param name="playedSpace">The position of the requested play space.</param>
        /// <returns>Returns true if space open and played, otherwise false if space is take</returns>
        public bool PlaySpace(SpaceTypes type, FieldItem playedSpace)
        {
            if (playedSpace.Posion.X == 4 || playedSpace.Posion.Y == 4 ||
                _fieldSpaces[playedSpace.Posion.X, playedSpace.Posion.Y] != SpaceTypes.Open) return false;

            _fieldSpaces[playedSpace.Posion.X, playedSpace.Posion.Y] = type;
            _openFieldPlaces.Remove(_openFieldPlaces.Find(x => x.Posion == new Point(playedSpace.Posion.X, playedSpace.Posion.Y)));
            DrawField();
            return true;
        }
예제 #3
0
 protected override void AppendAdditionalComponentMenuItems(ToolStripDropDown menu)
 {
     Utility.SetMenuList(this, menu, "", () => Space, o => Space = o);
 }
예제 #4
0
        public override bool Read(GH_IReader reader)
        {
            Space = reader.GetOrDefault("Space", SpaceTypes.XYZ);

            return(base.Read(reader));
        }
예제 #5
0
 /// <summary>
 /// Method called in order to get all of the values from the
 /// menu portion of this UI and begin the game.
 /// </summary>
 private void StartGame()
 {
     _playingBoard = new Board(_graphics, (BotDifficulty) Enum.Parse(typeof (BotDifficulty), botDifficulty.Text));
     _playingBoard.GameOver += GameOver;
     _playerType = (SpaceTypes)Enum.Parse(typeof(SpaceTypes), playerSpaceType.Text);
     _aiType = playerSpaceType.Text == @"X" ? SpaceTypes.O : SpaceTypes.X;
     _rounds = (int)roundCount.Value;
     _twoPlayers = typeBox.Text == @"Player Vs Player";
     _aiWins = 0;
     _playerWins = 0;
     _roundsPlayed = 1;
     roundLable.Text = $"Round {_roundsPlayed} out of {_rounds}";
     if (firstTurn.Checked) return;
     turnLable.Text = @"Current Turn: Player 2";
     if (!_twoPlayers)
         _playingBoard.AiMove(_aiType);
 }