Здравствуйте, столкнулся с проблемой в игре Крестики нолики, при игре с компютером. Сейчас ходы комьютера производятся с помощью рандома, мне надо сделать так, чтобы он предотвращал потенциальный выигрыш икрока, тоесть когда стоит 2 в ряд, ии ставил свой символ в 3ий пустой слот.
private IEnumerator BotStep() {
yield return new WaitForSeconds(0.5f);
List<int> numbers = new List<int>();
for (int i = 0; i < values.Length; i++) {
if (values[i] == 0) {
Debug.Log(i + " in list");
numbers.Add(i);
}
}
var potentialWin = CheckPreWin(2) != -1 ? CheckPreWin(2) : CheckPreWin(1) != -1 ? CheckPreWin(1) : -1;
var maxLength = numbers.Count;
var random = UnityEngine.Random.Range(0, maxLength);
var index = numbers[random];
numbers[random] = potentialWin;
Debug.Log("BOT CAN CHOOSE THIS");
buttons[index].interactable = false;
buttons[index].GetComponent<Image>().sprite = o;
values[index] = 2;
Debug.Log("123");
CheckWin(2);
isXStep = true;
}
private void CheckWin(int number) {
var compareCount = 0;
var isDraw = 0;
var isWin = false;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 3; j++) {
var winNumber = WinCombinations[i, j];
if (values[winNumber] == number) {
compareCount += 1;
} else {
compareCount = 0;
break;
}
}
if (compareCount == 3) {
isWin = true;
Debug.Log(number + " WIN");
GameOver.SetActive(true);
WhoWin.transform.GetComponent<Image>().sprite = number == 1 ? x :o;
Wintext.transform.GetComponent<Text>().text = "WIN";
break;
}
}
foreach (var num in values) {
if (num == 0) isDraw += 1;
//if (compareCount == 3) isDraw -= 1;
//if (compareCount == 0 ) isDraw += 1;
}
if (isDraw == 0 && !isWin) {
Debug.Log("MATCH IS DRAW");
GameOver.SetActive(true);
WhoWin.transform.GetComponent<Image>().sprite = draw;
Wintext.transform.GetComponent<Text>().text = " ";
}
}
private int CheckPreWin(int number) {
var potentialWin = 0;
var compareCount = 0;
var neededNumber = -1;
var isDraw = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 3; j++) {
var winNumber = WinCombinations[i, j];
if (values[winNumber] == number) {
compareCount += 1;
} if (values[winNumber] != number) {
neededNumber = values[winNumber];
}
}
if (compareCount == 2) break;
else if (compareCount < 2) {
compareCount = 0;
neededNumber = -1;
}
}
return neededNumber;
}