Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_Владимиров_П_А_1363.docx
Скачиваний:
0
Добавлен:
02.12.2024
Размер:
122.5 Кб
Скачать

Приложение 1. Руководство пользователя

  1. Краткое описание программы

Приложение крестики-нолики позволяет сыграть в настольную игру только на компьютере. Человек играет против умного компьютера, который старается не проиграть.

  1. Минимальные системные требования

  • Операционная система: Windows 10;

  • Процессор: 1ГГц;

  • Оперативная память: 1 ГБ для 32-разрядных систем или 2 ГБ для 64- разрядных;

  • Место на жестком диске: 16 ГБ для 32-разрядных систем или 32 ГБ для 64-разрядных систем;

  • Видеоадаптер: DirectX 9 или более поздней версии с драйвером WDDM 1.0;

  • Дисплей: 800 x 600.

  1. Установка программы Tic Tac Toe game.cbp

Скопировать исполняемый файл программы и файлы, необходимые для работы программы в директорию (папку), созданную пользователем.

  1. Запуск программы Tic Tac Toe game.cbp

Запустить исполняемый файл программы из директории, в которую была установлена программа.

  1. Работа с программой

Для начала игры – запустите приложение. Вы увидите небольшие правила и начальное поле (рисунок 5).

Рисунок 5 – Правила и начальное поле

Дальше человек должен сделать первый ход в любую из предложенных ячеек. После хода человека, программа сначала выводит на экран поле с ходом пользователя, а потом поле с ходом пользователя и компьютера (рисунок 6).

Рисунок 6 – Поля с ходами

Игра заканчивается, если найден конкретный победитель или же заполнены все клетки, а победителя нет, то есть ничья (на рисунке 7 показана ничья).

Рисунок 7 – Ничья

Приложение 2. Блок-схема алгоритма

Приложение 3. Исходный код программы

Файл GameResult.c:

#include <stdio.h>

#include <stddef.h>

int GameResult(char field[3][3])

{

if (field == NULL)

{

return 1;

}

for (size_t i = 0; i < 3; i++)

{

if (field[i][0] == field[i][1] && field[i][1] == field[i][2] && field[i][0]=='X')

{

return 10;

}

if (field[i][0] == field[i][1] && field[i][1] == field[i][2] && field[i][0] == '0')

{

return -10;

}

if (field[0][i] == field[1][i] && field[1][i] == field[2][i] && field[0][i] == 'X')

{

return 10;

}

if (field[0][i] == field[1][i] && field[1][i] == field[2][i] && field[0][i] == '0')

{

return -10;

}

}

if (field[0][0] == field[1][1] && field[1][1] == field[2][2] && field[0][0] == 'X')

{

return 10;

}

if (field[0][0] == field[1][1] && field[1][1] == field[2][2] && field[0][0] == '0')

{

return -10;

}

if (field[0][2] == field[1][1] && field[1][1] == field[2][0] && field[0][2] == 'X')

{

return 10;

}

if (field[0][2] == field[1][1] && field[1][1] == field[2][0] && field[0][2] == '0')

{

return -10;

}

for (size_t i = 0; i < 3; i++)

{

for (size_t j = 0; j < 3; j++)

{

if (field[i][j] == '_') return 4;

}

}

return 0;

}

Файл ComputerMove.c:

#include <stdio.h>

#include <stddef.h>

int ComputerMove(char field[3][3])

{

int flag = 0;

if (field == NULL)

{

return 1;

}

for (size_t i = 0; i < 3; i++)

{

for (size_t j = 0; j < 3; j++)

{

if (field[i][j] == '_')

{

flag = 1;

break;

}

}

if (flag==1) break;

}

for (size_t i = 0; i < 3; i++)

{

if (field[i][0] == field[i][1] && field[i][2] == '_' && field[i][0] == '0')

{

field[i][2] = '0';

return 3;

}

if (field[i][0] == field[i][2] && field[i][1] == '_' && field[i][0] == '0')

{

field[i][1] = '0';

return 3;

}

if (field[i][1] == field[i][2] && field[i][0] == '_' && field[i][2] == '0')

{

field[i][0] = '0';

return 3;

}

if (field[0][i] == field[1][i] && field[2][i] == '_' && field[1][i] == '0')

{

field[2][i] = '0';

return 3;

}

if (field[0][i] == field[2][i] && field[1][i] == '_' && field[2][i] == '0')

{

field[1][i] = '0';

return 3;

}

if (field[1][i] == field[2][i] && field[0][i] == '_' && field[2][i] == '0')

{

field[0][i] = '0';

return 3;

}

}

for (size_t i = 0; i < 3; i++)

{

if (field[i][0] == field[i][1] && field[i][2] == '_' && field[i][0] == 'X')

{

field[i][2] = '0';

return 3;

}

if (field[i][0] == field[i][2] && field[i][1] == '_' && field[i][0] == 'X')

{

field[i][1] = '0';

return 3;

}

if (field[i][1] == field[i][2] && field[i][0] == '_' && field[i][2] == 'X')

{

field[i][0] = '0';

return 3;

}

if (field[0][i] == field[1][i] && field[2][i] == '_' && field[1][i] == 'X')

{

field[2][i] = '0';

return 3;

}

if (field[0][i] == field[2][i] && field[1][i] == '_' && field[2][i] == 'X')

{

field[1][i] = '0';

return 3;

}

if (field[1][i] == field[2][i] && field[0][i] == '_' && field[2][i] == 'X')

{

field[0][i] = '0';

return 3;

}

}

if (field[0][0] == field[1][1] && field[2][2] == '_' && field[1][1] == '0')

{

field[2][2] = '0';

return 3;

}

if (field[0][0] == field[2][2] && field[1][1] == '_' && field[2][2] == '0')

{

field[1][1] = '0';

return 3;

}

if (field[2][2] == field[1][1] && field[0][0] == '_' && field[1][1] == '0')

{

field[0][0] = '0';

return 3;

}

if (field[0][2] == field[1][1] && field[2][0] == '_' && field[1][1] == '0')

{

field[2][0] = '0';

return 3;

}

if (field[0][2] == field[2][0] && field[1][1] == '_' && field[2][0] == '0')

{

field[1][1] = '0';

return 3;

}

if (field[2][0] == field[1][1] && field[0][2] == '_' && field[1][1] == '0')

{

field[0][2] = '0';

return 3;

}

if (field[0][0] == field[1][1] && field[2][2] == '_' && field[1][1] == 'X')

{

field[2][2] = '0';

return 3;

}

if (field[0][0] == field[2][2] && field[1][1] == '_' && field[2][2] == 'X')

{

field[1][1] = '0';

return 3;

}

if (field[2][2] == field[1][1] && field[0][0] == '_' && field[1][1] == 'X')

{

field[0][0] = '0';

return 3;

}

if (field[0][2] == field[1][1] && field[2][0] == '_' && field[1][1] == 'X')

{

field[2][0] = '0';

return 3;

}

if (field[0][2] == field[2][0] && field[1][1] == '_' && field[2][0] == 'X')

{

field[1][1] = '0';

return 3;

}

if (field[2][0] == field[1][1] && field[0][2] == '_' && field[1][1] == 'X')

{

field[0][2] = '0';

return 3;

}

int MoveIndex = rand()%9;

while (field[MoveIndex/3][MoveIndex%3] != '_')

{

MoveIndex = rand()%9;

}

field[MoveIndex / 3][MoveIndex % 3] = '0';

return 3;

}

Файл main.c:

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

int GameResult(char field[3][3]);

int ComputerMove(char field[3][3]);

int PrintField(char field[3][3])

{

if (field == NULL) return 1;

for (size_t i = 0; i < 3; i++)

{

for (size_t j = 0; j < 3; j++)

{

if (printf("%c ", field[i][j]) < 0)

{

printf("Error\n");

return 2;

}

}

if (printf("\n") < 0)

{

printf("Error\n");

return 2;

}

}

return 5;

}

int main()

{

if (printf("Welcome to the Tic Tac toe game!\n")<0)

{

printf("Error!\n");

return 2;

}

if (printf("Your goal is to make a line of three ")<0)

{

printf("Error!\n");

return 2;

}

if (printf("crosses vertically or horizontally or diagonally!\n")<0)

{

printf("Error!\n");

return 2;

}

if (printf("You go first! Enter the number from 0 to 8 to make move!\n")<0)

{

printf("Error!\n");

return 2;

}

if (printf("Good luck!\n")<0)

{

printf("Error!\n");

return 2;

}

srand(time(NULL));

char field[3][3]= {{'_','_','_'},{'_','_','_'},{'_','_','_'}};

if (PrintField(field) != 5)

{

if(printf("Error while printing board\n")<0){

printf("Error\n");

return 2;

}

return 7;

}

if (printf("________\n") < 0)

{

printf("Error\n");

return 2;

}

while (1)

{

int posIndex;

if (scanf("%d", &posIndex) != 1)

{

if(printf("Incorrect index\n")<0){

printf("Error\n");

return 2;

}

continue;

}

if (posIndex<0 || posIndex>8)

{

if(printf("Incorrect index\n")<0){

printf("Error\n");

return 2;

}

continue;

}

if (field[posIndex / 3][posIndex % 3] != '_')

{

if(printf("Incorrect index\n")<0){

printf("Error\n");

return 2;

}

continue;

}

field[posIndex / 3][posIndex % 3] = 'X';

if (PrintField(field) != 5)

{

if(printf("Error while printing board\n")<0){

printf("Error\n");

return 2;

}

return 7;

}

if (printf("________\n") < 0)

{

printf("Error\n");

return 2;

}

int result = GameResult(field);

switch(result)

{

case 10:

if(printf(" You win\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

case -10:

if(printf("Computer win\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

case 0:

if(printf("Draw\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

}

if (ComputerMove(field) != 3)

{

if(printf("Error while making move\n")<0){

printf("Error\n");

return 2;

}

return 6;

}

result = GameResult(field);

if (PrintField(field) != 5)

{

printf("Error while printing board\n");

return -1;

}

if (printf("________\n") < 0)

{

printf("Error while printing board\n");

return -1;

}

switch(result)

{

case 10:

if(printf(" You win\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

case -10:

if(printf("Computer win\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

case 0:

if(printf("Draw\n")<0){

printf("Error\n");

return 2;

}

return 0;

break;

}

}

}