Добавлен: 05.04.2023
Просмотров: 198
Скачиваний: 2
cout << "Введите координату X Y от 1 до " << A << " через пробел: ";
if ((!(cin >> X) || !(cin >> Y)) || ((!(X < (A + 1) && X > 0) || !(Y < (B + 1) && Y > 0))) || (!(MAP[--Y][--X] == NUL)))
{
cin.clear(); while (cin.get() != '\n');
return false;
}
else
return true;
}
Порядок хода игроков определяется следующими функциями, для обработки выбора игрока используется условный оператор if совместно с else, для предоставления игрокам возможности ходить по очереди:
short int move()
{
Nmove++;
if (whoMove == P1)
{
MAP[Y][X] = P1;
return P1;
}
if (whoMove == P2)
{
MAP[Y][X] = P2;
return P2;
}
}
void nextMove()
{
whoMove == P1 ? whoMove = P2 : whoMove = P1;
}
Для повышения быстродействия кода в функцию main() добавляются только функции, после разработки функция main принимает вид:
void winner()
{
system("cls");
displayMap();
if (win != NUL)
cout << "Выиграл игрок " << win << "!\n";
else
cout << "Ничья!\n";
}
int main()
{
setlocale(LC_CTYPE, "Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
allNull();
randomFirstMove();
do
{
system("cls");
displayMap();
while (!input())
{ system("cls");
displayMap(); }
move();
whoWin();
nextMove();
} while ((win == NUL) && (Nmove < A*A+1));
winner();
_getch();
return 0;
}
Основная функция, определяющая игрока, победившего в текущей игре:
short int whoWin()
{
short int a = 0;
for (int i = 0; i < A; i++)
{
for (int j = 0; j < B - 1; j++)
if ((MAP[i][j] == MAP[i][j + 1]) && (MAP[i][j] != NUL))
a++;
if (a == B - 1)
{
win = whoMove;
return i + 1;//столбцы
}
else
a = 0;
}
a = 0;
for (int i = 0; i < A; i++)
{
for (int j = 0; j < B - 1; j++)
if ((MAP[j][i] == MAP[j + 1][i]) && (MAP[j][i] != NUL))
a++;
if (a == B - 1)
{
win = whoMove;
return i + 4;//строки
}
else
a = 0;
}
for (int i = 0, j = A - 1; i < A; i++, j--)
if ((MAP[i][j] == MAP[i + 1][j - 1]) && (MAP[i][j] != NUL))
a++;
if (a == B - 1)
{
win = whoMove;
return 7;
}
else
a = 0;
for (int i = 0, j = 1; i < A; i++, j++)
if ((MAP[i][i] == MAP[j][j]) && (MAP[i][i] != NUL))
a++;
if (a == B - 1)
{
win = whoMove;
return 8;
}
else
a = 0;
}
После компиляции вышеуказанного кода перед разработчиком появляется стартовое окно программы (рисунок 6)
Рисунок 6 - Окно программы после компиляции проекта
Заключение
Таким образом в рамках курсового проекта было разработано программное средство, реализующее принципы игры Крестики - Нолики. Было проведено исследование компонентов и основных возможней программной среды разработки приложений Embarcadero Rad Studio, изучены процедуры и функции, реализуемые в рамках курсового проекта.