
- •Аннотация
- •Содержание
- •Введение
- •Теоретическая часть
- •Реализация программы
- •2.1. Язык программирования
- •2.2. Использованное по
- •2.3. Реализованные функции
- •Результаты тестирования программы
- •Заключение
- •Список использованных источников
- •Приложение 1. Руководство пользователя
- •Приложение 2. Блок-схема алгоритма
- •Приложение 3. Исходный код программы
Приложение 1. Руководство пользователя
Краткое описание программы
Приложение крестики-нолики позволяет сыграть в настольную игру только на компьютере. Человек играет против умного компьютера, который старается не проиграть.
Минимальные системные требования
Операционная система: Windows 10;
Процессор: 1ГГц;
Оперативная память: 1 ГБ для 32-разрядных систем или 2 ГБ для 64- разрядных;
Место на жестком диске: 16 ГБ для 32-разрядных систем или 32 ГБ для 64-разрядных систем;
Видеоадаптер: DirectX 9 или более поздней версии с драйвером WDDM 1.0;
Дисплей: 800 x 600.
Установка программы Tic Tac Toe game.cbp
Скопировать исполняемый файл программы и файлы, необходимые для работы программы в директорию (папку), созданную пользователем.
Запуск программы Tic Tac Toe game.cbp
Запустить исполняемый файл программы из директории, в которую была установлена программа.
Работа с программой
Для начала игры – запустите приложение. Вы увидите небольшие правила и начальное поле (рисунок 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;
}
}
}