/// <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 }
/// <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; }
protected override void AppendAdditionalComponentMenuItems(ToolStripDropDown menu) { Utility.SetMenuList(this, menu, "", () => Space, o => Space = o); }
public override bool Read(GH_IReader reader) { Space = reader.GetOrDefault("Space", SpaceTypes.XYZ); return(base.Read(reader)); }
/// <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); }