private bool HorizontalAndVerticalTurn(ComputerButtonSearch cbs) { List <ButtonData> rowOrColumnFreeButtons = FreeButtonsData.FindAll(cbs.NameContainsString); if (rowOrColumnFreeButtons.Count == 2) { rowOrColumnFreeButtons[0].Text = "O"; OccupiedButtonsData.Add(rowOrColumnFreeButtons[0]); FreeButtonsData.Remove(rowOrColumnFreeButtons[0]); return(true); } else { return(false); } }
private void ComputerFindsBestLine(ComputerButtonSearch cbs) { bool turnComplete = false; bool canWin = true; List <ButtonData> tmpOccupiedButtons = new List <ButtonData>(OccupiedButtonsData); int buttonWithO; while (!turnComplete) { cbs.Text4Search = "O"; buttonWithO = tmpOccupiedButtons.FindIndex(cbs.TextContainsString); if (buttonWithO >= 0 && canWin == true) { ComputerFirstOptionTurn(tmpOccupiedButtons, cbs, out turnComplete); if (turnComplete) { return; } else { canWin = false; } } if (buttonWithO >= 0 && canWin == false) { ComputerSecondOptionTurn(tmpOccupiedButtons, buttonWithO, cbs, out turnComplete); if (turnComplete) { return; } tmpOccupiedButtons.Remove(tmpOccupiedButtons[buttonWithO]); } else { Random computerChoice = new Random(); int computerTurn = computerChoice.Next(0, FreeButtonsData.Count); FreeButtonsData[computerTurn].Text = "O"; OccupiedButtonsData.Add(FreeButtonsData[computerTurn]); FreeButtonsData.Remove(FreeButtonsData[computerTurn]); turnComplete = true; } } }
private void ComputerFirstTurn(ComputerButtonSearch cbs, out bool turnComplete) { cbs.Text4Search = "O"; int buttonWithO = OccupiedButtonsData.FindIndex(cbs.TextContainsString); if (buttonWithO < 0) { Random computerChoice = new Random(); int computerTurn = computerChoice.Next(0, FreeButtonsData.Count); FreeButtonsData[computerTurn].Text = "O"; OccupiedButtonsData.Add(FreeButtonsData[computerTurn]); FreeButtonsData.Remove(FreeButtonsData[computerTurn]); turnComplete = true; } else { turnComplete = false; } }
private bool BestHorizontalAndVerticalTurn(ComputerButtonSearch cbs, string textForSearch) { cbs.Text4Search = textForSearch; List <ButtonData> rowOrColumnFreeButtons = FreeButtonsData.FindAll(cbs.NameContainsString); //на условном боте 1 фри кнопка List <ButtonData> allOccupiedBySomeoneButtons = OccupiedButtonsData.FindAll(cbs.TextContainsString); //все кнопки с O List <ButtonData> rowOrColumnOccupiedBySomeoneButtons = allOccupiedBySomeoneButtons.FindAll(cbs.NameContainsString); //на условном боте 2 кнопки с O if (rowOrColumnFreeButtons.Count == 1 && rowOrColumnOccupiedBySomeoneButtons.Count == 2) { rowOrColumnFreeButtons[0].Text = "O"; OccupiedButtonsData.Add(rowOrColumnFreeButtons[0]); FreeButtonsData.Remove(rowOrColumnFreeButtons[0]); return(true); } else { return(false); } }
private bool DiagonalTurn() { int firstDiagonalCount = 0; int secondDiagonalCount = 0; for (int i = 0; i < DiagonalButtonsData.Count; i++) { if (DiagonalButtonsData[i].Name == "buttonBotLeft" || DiagonalButtonsData[i].Name == "buttonMidCenter" || DiagonalButtonsData[i].Name == "buttonTopRight") { if (DiagonalButtonsData[i].Text == string.Empty) { firstDiagonalCount++; } } } for (int i = 0; i < DiagonalButtonsData.Count; i++) { if (DiagonalButtonsData[i].Name == "buttonBotRight" || DiagonalButtonsData[i].Name == "buttonMidCenter" || DiagonalButtonsData[i].Name == "buttonTopLeft") { if (DiagonalButtonsData[i].Text == string.Empty) { firstDiagonalCount++; } } } if (firstDiagonalCount == 3 || secondDiagonalCount == 3) { ComputerButtonSearch cbs = new ComputerButtonSearch(); cbs.Name4Search = "buttonMidCenter"; int midButtonNumber = FreeButtonsData.FindIndex(cbs.NameContainsString); OccupiedButtonsData.Add(FreeButtonsData[midButtonNumber]); FreeButtonsData.Remove(FreeButtonsData[midButtonNumber]); return(true); } else { return(false); } }
private bool BestDiagonalTurn(ComputerButtonSearch cbs, string textForSearch) { //List<ButtonData> firstDiagonal = new List<ButtonData>() { buttonBotLeft, buttonMidCenter, buttonTopRight }; //List<ButtonData> secondDiagonal = new List<ButtonData>() { buttonBotRight, buttonMidCenter, buttonTopLeft }; List <ButtonData> firstDiagonal = new List <ButtonData>(DiagonalButtonsData); int tmpPosition1 = 0; int tmpPosition2 = 0; for (int i = 0; i < DiagonalButtonsData.Count; i++) { if (firstDiagonal[i].Name == "buttonBotRight") { tmpPosition1 = i; } if (firstDiagonal[i].Name == "buttonTopLeft") { tmpPosition2 = i; } } firstDiagonal.Remove(firstDiagonal[tmpPosition1]); firstDiagonal.Remove(firstDiagonal[tmpPosition2]); List <ButtonData> secondDiagonal = new List <ButtonData>(DiagonalButtonsData); for (int i = 0; i < DiagonalButtonsData.Count; i++) { if (secondDiagonal[i].Name == "buttonBotLeft") { tmpPosition1 = i; } if (secondDiagonal[i].Name == "buttonTopRight") { tmpPosition2 = i; } } secondDiagonal.Remove(secondDiagonal[tmpPosition1]); secondDiagonal.Remove(secondDiagonal[tmpPosition2]); cbs.Text4Search = ""; List <ButtonData> firstDiagonalFreeButtons = firstDiagonal.FindAll(cbs.TextContainsString); List <ButtonData> secondDiagonalFreeButtons = secondDiagonal.FindAll(cbs.TextContainsString); cbs.Text4Search = textForSearch; List <ButtonData> firstDOccupiedBySomeoneButtons = firstDiagonal.FindAll(cbs.TextContainsString); List <ButtonData> secondDOccupiedBySomeoneButtons = secondDiagonal.FindAll(cbs.TextContainsString); if (firstDiagonalFreeButtons.Count == 1 && firstDOccupiedBySomeoneButtons.Count == 2) { firstDiagonalFreeButtons[0].Text = "O"; OccupiedButtonsData.Add(firstDiagonalFreeButtons[0]); FreeButtonsData.Remove(firstDiagonalFreeButtons[0]); return(true); } else if (secondDiagonalFreeButtons.Count == 1 && secondDOccupiedBySomeoneButtons.Count == 2) { secondDiagonalFreeButtons[0].Text = "O"; OccupiedButtonsData.Add(secondDiagonalFreeButtons[0]); FreeButtonsData.Remove(secondDiagonalFreeButtons[0]); return(true); } else { return(false); } }