Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- // Функция проверяет победителя для игрока player
- char check_winner(char board[3][3], char player) {
- char winner = NULL;
- // проверка по горизонтали
- for (int i = 0; i < 3; i++) {
- if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
- winner = player;
- }
- }
- if (winner != NULL) return winner;
- // проверка по вертикали
- for (int i = 0; i < 3; i++) {
- if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
- winner = player;
- }
- }
- if (winner != NULL) return winner;
- // проверка по диагонали
- for (int i = 0; i < 3; i++) {
- if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
- winner = player;
- }
- }
- if (winner != NULL) return winner;
- // проверка по обратной диагонали
- for (int i = 0; i < 3; i++) {
- if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
- winner = player;
- }
- }
- // проверяем, есть ли свободные клетки
- int cells = 0;
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- if (board[i][j] == ' ') {
- cells = 1;
- break;
- }
- }
- }
- // Если победитель не определился и кол-во свободных клеток равно 0, то ничья
- if (winner == NULL && cells == 0) {
- winner = 'T';
- }
- return winner;
- }
- int main() {
- // Наша карта 3х3
- char board[3][3] = {
- ' ', ' ', ' ',
- ' ', ' ', ' ',
- ' ', ' ', ' '};
- // Переменная хранит текущего игрока (X или O)
- char player = 'X';
- // Основной цикл игры
- while (1) {
- // Выводим сетку на экран
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- if (board[i][j] == ' ') {
- printf("_");
- } else {
- printf("%c", board[i][j]);
- }
- }
- printf("\n");
- }
- printf("Ходит %c. Введите числа по оси Х и Y\n", player);
- int row, col;
- // Читаем и проверяем данные из консоли (stdin)
- if (scanf("%d", &row) != 1) {
- printf("Неверный формат ввода по горизонтали\n");
- fgetc(stdin);
- continue;
- }
- if (scanf("%d", &col) != 1) {
- printf("Неверный формат ввода по вертикали\n");
- fgetc(stdin);
- continue;
- }
- if (row < 0 || row > 2 || col < 0 || col > 2) {
- printf("Вы ввели некорректные координаты!\n");
- fgetc(stdin);
- continue;
- }
- if (board[row][col] != ' ') {
- printf("Неправильный ход!\n");
- fgetc(stdin);
- continue;
- }
- // Проставляем знак в клетку
- board[row][col] = player;
- // Проверяем победителя
- char winner = check_winner(board, player);
- // Если победитель есть, то останавливаем игру и выводим победителя (или ничью)
- if (winner != NULL) {
- if (winner == 'T') {
- printf("Ничья!\n");
- } else {
- printf("Победил %c!\n", winner);
- }
- return 0;
- }
- // Переход хода
- if (player == 'X') {
- player = 'O';
- } else {
- player = 'X';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement