Лучший способ начать - написать функцию, которая ищет возможные победы (вместо того, чтобы посмотреть, есть ли три подряд, проверьте, есть ли два подряд). Затем пусть функция вернет пространство, которое было бы победой, и вместо этого ИИ переместился туда. Пример: если матрица выглядит как
X X _
_ _ _
_ O O
Имеют функцию возврата 0,2 и 2,0.
Затем пусть ваш ИИ выберет это случайно.
После этого вы можете изменить эту функцию так, чтобы она показала возможную победу, и тогда ваш ИИ всегда предпочитает идти туда, где он победит.
Реализация может выглядеть примерно так:
#include <vector> // Vector comes from this
#include <utility> // Pair comes from this
std::vector<std::pair<bool, Point>> GetPossibleVictories()
{
std::vector<std::pair<bool, Point>> retVal;
// Check for two in a row Horitzontally, Vertically, and Diagonally.
{
if (/*IsPossibleWin*/)
{
retVal.push_back(std::pair<bool, Point>(isAIsVictory, Point{ X, Y }));
}
}
return retVal;
}
Кроме того, я бы также исследовал более современные конструкции C ++, которые могут вам помочь, такие как контейнеры (std :: vector, std :: list, std :: set и т. Д.), Которые могут помочь вам хранить вашу матрицу в более удобной форме. манипулировать способом.
В приведенном выше примере я использую пользовательский тип (Point), который в простейшем виде можно запрограммировать так:
struct Point
{
int X = 0;
int Y = 0;
};
Используя структуру (или класс, в котором каждый член по умолчанию открыт), вы можете хранить координаты вашей матрицы в одном объекте. Кроме того, я использую вектор, который действует как автоматически изменяющий размер массив. Вы можете пройти каждую вещь в векторе, как это:
for(const auto& possibleWin : possibleWins) // possibleWins is the vector returned from the previous example.
{
// possibleWin in this block will be the same value as if you used a for loop and did possibleWins[x]
}
Наконец, в приведенном выше примере используется пара, которая содержит два разных типа вещей. Может использоваться следующим образом:
std::pair<bool, Point> myPair;
myPair.first = true;
myPair.second = Point{0, 2};
Для дополнительного чтения (прокрутите вниз до примеров того, как их использовать):
Надеюсь, это даст вам некоторые идеи о том, как начать делать свой ИИ немного умнее.