Программа "Крестики-нолики"

Реализация программного кода с комментариями. Процесс игры между компьютером и игроком. Основные навыки использования языка Си, освоение концепций и стратегий по созданию консольного приложения "Крестики-нолики". Создание компиляторов для новых платформ.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.02.2019
Размер файла 84,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Федеральное агентство железнодорожного транспорта

Омский государственный университет путей сообщения

Кафедра «Автоматика и системы управления»

Курсовая работа

по дисциплине «Программирование»

ПРОГРАММА «КРЕСТИКИ-НОЛИКИ»

Студентка

Т.А. Исаева

Омск 2017

Реферат

Пояснительная записка к курсовой работе содержит 20 страниц, 4 рисунка, 3 использованных источника.

Объектом курсовой работы является консольная игра «Крестики-нолики».

Цель курсовой работы - получение основных навыков использования языка Си, создание популярной развлекательной игры «Крестики-нолики» с удобным и понятным для пользователя интерфейсом.

Результатом курсовой работы является игра «Крестики-нолики», написанная на языке Си в программе Notepad++.

В процессе создания игры была изучена лексика языка Си.

Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2007.

Введение

Язык программирования Си отличается минимализмом. Си часто называют языком среднего уровня или даже низкого уровня, учитывая то, как близко он работает к реальным устройствам. Однако в строгой классификации он является языком высокого уровня.

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

С 1989 года язык Си регламентируется стандартом Американского института национальных стандартов ANSI С. В настоящее время, кроме стандарта ANSI C разработан международный стандарт ISO C (International Standard Organization C).

Си позволяет быстро создавать компиляторы для новых платформ, а также позволяет программистам довольно точно представлять, как выполняются их программы. Благодаря этому программы, написанные на Си, эффективнее написанных на многих других языках.

Одним из последствий высокой эффективности и переносимости Си стало то, что многие компиляторы, интерпретаторы и библиотеки других языков высокого уровня часто написаны на языке Си.

Курсовая работа является примером реализации задачи создания игры «Крестики-нолики», написанной на языке Си.

программный игрок крестик компьютер

1. Правила игры

Крестики-нолики - логическая игра между двумя противниками на квадратном поле 3 на 3 клетки или большего размера (вплоть до «бесконечного поля»). Один из игроков играет «крестиками», второй - «ноликами».

Игроки по очереди ставят на свободные клетки поля 5х5 знаки (один всегда крестики, другой всегда нолики). Первый, выстроивший в ряд 5 своих символов по вертикали, горизонтали или диагонали, выигрывает.

2. Реализация программного кода с комментариями

В программе используются библиотеки:

#include <stdio.h> // библиотека ввода-вывода

#include <stdlib.h> // библиотека функций общего назначения

В начале кода игры приведены различные функции для упрощения реализации работы.

Функция инициализации поля, которая очищает поле, размером 5 на 5, заполняя его пробелами:

void init()

{

int i, j;

for(i=0;i<5;i++)

for(j=0; j<5; j++) a[i][j] = ' ';

}

Листинг 1 - Инициализация поля

Функция, которая выводит игровое поле:

void pole()

{

int t;

for(t=0; t<5; t++) {

printf(" % c | % c | % c | % c | % c ",a[t][0],

a[t][1],a[t][2],a[t][3],a[t][4]);

if(t!=4) printf("\n---|---|---|---|---\n");

}

printf("\n");

}

Листинг 2 - Вывод игрового поля

Функция, которая реализует размещение крестиков в поле игроком:

int gamer(){

int x, y, n=1,i,j;

char c,m;

for(i=0;i<5;i++){

for(j=0;j<5;j++)

if(a[i][j]==' ') break;

if(a[i][j]==' ') break;

}

if(i*j==25)

{

printf("Конец игры. Ничья.\n");

exit(0);

}

while (n){

printf("Ход крестиков!\n");

printf("Введите координату X Вашего хода: ");

scanf("%s",&c);

x=(int)c-48;

if(x<1 && x>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer(); // В случае недопустимого значения повторный вызов функции

}

else {

printf("Введите координату Y Вашего хода: ");

scanf("%s",&m);

y=(int)m-48;

if(y<1 && y>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer(); // В случае недопустимого значения повторный вызов функции

}

}

if(x==0&&y==0){

printf("Вы сдались!\nПобедили нолики!");

exit(0);}

if(x<6&&x>0&&y<6&&y>0) {

x--; y--;

if(a[x][y]!= ' '){

printf("Клетка уже занята, попробуйте другую! \n"); }else{

a[x][y] ='X'

n=0;

}

}else printf("Неверный ход, попытайтесь еще. \n");

}

}

Листинг 3 - Размещение крестиков в поле игроком

Функция, реализующая ход компьютера:

void komp()

{int i, j;

for(i=0;i<5;i++){

for(j=0;j<5;j++)

if(a[i][j]==' ') break;

if(a[i][j]==' ') break;

}

if(i*j==25)

{

printf("Конец игры. Ничья.\n");

exit(0);

}

else a[i][j] ='O';

}

Листинг 4 - Размещение ноликов в поле компьютером.

Функция, реализующая проверку строк, столбцов и диагоналей на заполнение одинаковыми символами, тест на победу:

char test()

{

int i;

for(i=0;i<5;i++) //проверка строк

if(a[i][0]==a[i][1] && a[i][0]==a[i][2] && a[i][0]==a[i][3] && a[i][0]==a[i][4])

return a[i][0];

for(i=0;i<5;i++) //проверка столбцов

if(a[0][i]==a[1][i] && a[0][i]==a[2][i] && a[0][i]==a[3][i] && a[0][i]==a[4][i])

return a[0][i];

//проверка диагоналей

if(a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[1][1]==a[3][3] && a[1][1]==a[4][4])

return a[0][0];

if(a[0][3]==a[0][2] && a[0][3]==a[0][1] && a[0][1]==a[0][0] && a[0][1]==a[0][4])

return a[0][0];

return ' ';

}

Листинг 5 - Тест на победу

После описания всех функций приведена главная часть программы, в которой в соответствующих местах кода вызываются описанные ранее функции.

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

int main()

{

int p;

printf("Меню: \n");

printf("1-Игра против компьютера \n");

printf("2-Игрок против игрока \n");

printf("3-Правила игры \n");

printf("4-Выход \n");

scanf("%i",&p);

if(p==1){

char znach;

znach = ' ';

init();

do {

komp();

pole();

znach = test(); //проверка, есть ли победитель

if(znach!=' ') break; //eсть победитель

gamer();

znach = test(); //проверка, есть ли победитель

} while(znach==' ');

printf("\n");

pole(); //конечный вывод поля

if(znach=='X') printf("Вы победили! \n");

else printf("Победил компьютер! \n");

return 0;

}

if(p==2){

char znach;

znach = ' ';

init();

do {

pole();

gamer();

znach = test(); //проверка, есть ли победитель

if(znach!=' ') break; //eсть победитель

pole();

gamer2();

znach = test(); //проверка, есть ли победитель

} while(znach==' ');

pole();//конечный вывод поля

printf("\n");

if(znach=='X') printf("Победили крестики! \n");

else printf("Победили нолики! \n");

return 0;}

if(p==3){

int q;

printf("Правила игры: \n - Расставьте крестики(нолики) так, чтобы они заполняли всю строку, столбец или диагональ\n");

printf(" - Вводить координаты можно только цифрами от 1 до 5 \n - Победителем считается тот, кто заполнит ряд своими символами быстрее \n");

printf(" - Для того чтобы сдаться введите координаты X-0,Y-0\n");

printf("1-Возврат в меню\n2-Выход\n");

scanf("%i",&q);

if(q==1)

main();

if(q==2)

exit(0);

}

if(p==4) exit(0);

}

Листинг 6 - Игровой процесс

3. Инструкция пользователя

Игра начинается таким образом: выводится главное меню, где игроку предлагают выбрать режим игры с помощью нажатия на соответствующую цифру.

Рисунок 1 - Главное меню

После выбора режима игры с компьютером на экране появляется игровое поле, с введённым компьютером ноликом. Игроку предлагается ввести координаты его хода, сначала координату строки x, затем координату столбца y.

Рисунок 2 - Игра с компьютером

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

Рисунок 3 - Отображение ходов на поле

Игра продолжается до тех пор, пока кто-то из игроков не построит в ряд 5 знаков. В этом случае на экране отображается соответствующее сообщение об окончании игры.

Рисунок 4 - Конец игры

Заключение

Во время выполнения курсовой работы были получены основные навыки использования языка Си, были освоены концепции и стратегии по созданию консольного приложения «Крестики-нолики», которое является результатом выполнения курсовой работы.

Библиографический список

1 Керниган Б. Язык программирования Си 2-е издание / Б. Керниган Д. Ричи М.: Издательский дом "Вильямс", 2012. 272 с.

2 Википедия. Свободная энциклопедия [Электронный ресурс]

3 Википедия. Свободная энциклопедия [Электронный ресурс]

Приложение А

(обязательное)

Код программы

#include <stdio.h>

#include <stdlib.h>

char a[5][5]; //размерность поля

// Инициализация матрицы игры

void init()

{

int i, j;

for(i=0;i<5;i++)

for(j=0; j<5; j++) a[i][j] = ' ';

}

//Вывод поля на экран

void pole()

{

int t;

for(t=0; t<5; t++) {

printf(" % c | % c | % c | % c | % c ",a[t][0],

a[t][1],a[t][2],a[t][3],a[t][4]);

if(t!=4) printf("\n---|---|---|---|---\n");

}

printf("\n");

}

//xод игрока

int gamer(){

int x, y, n=1,i,j;

char c,m;

for(i=0;i<5;i++){

for(j=0;j<5;j++)

if(a[i][j]==' ') break;

if(a[i][j]==' ') break;

}

if(i*j==25)

{

printf("Конец игры. Ничья.\n");

exit(0);

}

while (n){

printf("Ход крестиков!\n");

printf("Введите координату X Вашего хода: ");

scanf("%s",&c);

Листинг А.1 - Крестики-нолики, лист 1

x=(int)c-48;

if(x<1 && x>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer(); // В случае недопустимого значения повторный вызов функции

}

else {

printf("Введите координату Y Вашего хода: ");

scanf("%s",&m);

y=(int)m-48;

if(y<1 && y>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer(); // В случае недопустимого значения повторный вызов функции

}

}

if(x==0&&y==0){

printf("Вы сдались!\nПобедили нолики!");

exit(0);}

if(x<6&&x>0&&y<6&&y>0) {

x--; y--;

if(a[x][y]!= ' '){

printf("Клетка уже занята, попробуйте другую! \n");

}else{

a[x][y] ='X';

n=0;

}

}else printf("Неверный ход, попытайтесь еще. \n");

}

}

void gamer2(){

int x, y, n=1,i,j;

char w,e;

for(i=0;i<5;i++){

for(j=0;j<5;j++)

if(a[i][j]==' ') break;

if(a[i][j]==' ') break;

}

if(i*j==25)

{

Листинг А.1, лист 2

printf("Конец игры. Ничья.\n");

exit(0);

}

while (n){

printf("Ход ноликов!\n");

printf("Введите координату X Вашего хода: ");

scanf("%s",&w);

x=(int)w-48;

if(x<1 && x>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer2(); // В случае недопустимого значения повторный вызов функции

}

else {

printf("Введите координату Y Вашего хода: ");

scanf("%s",&e);

y=(int)e-48;

if(y<1 && y>5) {

printf("Некорректный ввод!\n");

printf("Попробуйте еще раз:\n");

gamer2(); // В случае недопустимого значения повторный вызов функции

}

}

if(x==0&&y==0){

printf("Вы сдались!\nПобедили крестики!\n");

exit(0);}if(x<6&&x>0&&y<6&&y>0) {

x--; y--; if(a[x][y]!= ' '){

printf("Клетка уже занята, попробуйте другую! \n");

}else{

a[x][y] = 'O';

n=0;

}

}else printf("Неверный ход, попытайтесь еще. \n");

}

}

void komp()

{int i, j;

Листинг А.1, лист 3

for(i=0;i<5;i++){

for(j=0;j<5;j++)

if(a[i][j]==' ') break;

if(a[i][j]==' ') break;

}

if(i*j==25)

{

printf("Конец игры. Ничья.\n");

exit(0);

}

else a[i][j] ='O';

}

//Тест на победу

char test()

{

int i;

for(i=0;i<5;i++) //проверка строк

if(a[i][0]==a[i][1] && a[i][0]==a[i][2] && a[i][0]==a[i][3] && a[i][0]==a[i][4])

return a[i][0];

for(i=0;i<5;i++) //проверка столбцов

if(a[0][i]==a[1][i] && a[0][i]==a[2][i] && a[0][i]==a[3][i] && a[0][i]==a[4][i])

return a[0][i];

//проверка диагоналей

if(a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[1][1]==a[3][3] && a[1][1]==a[4][4])

return a[0][0];

if(a[0][3]==a[0][2] && a[0][3]==a[0][1] && a[0][1]==a[0][0] && a[0][1]==a[0][4])

return a[0][0];

return ' ';

}

int main()

{

int p;

printf("Меню: \n");

printf("1-Игра против компьютера \n");

printf("2-Игрок против игрока \n");

printf("3-Правила игры \n");

printf("4-Выход \n");

scanf("%i",&p);

Листинг А.1, лист 4

if(p==1){

char znach;

znach = ' ';

init();

do {

komp();

pole();

znach = test(); //проверка, есть ли победитель

if(znach!=' ') break; //eсть победитель

gamer();

znach = test(); //проверка, есть ли победитель

} while(znach==' ');

printf("\n");

pole(); //конечный вывод поля

if(znach=='X') printf("Вы победили! \n");

else printf("Победил компьютер! \n");

return 0;

}

if(p==2){

char znach;

znach = ' ';

init();

do {

pole();

gamer();

znach = test(); //проверка, есть ли победитель

if(znach!=' ') break; //eсть победитель

pole();

gamer2();

znach = test(); //проверка, есть ли победитель

} while(znach==' ');

pole();//конечный вывод поля

printf("\n");

if(znach=='X') printf("Победили крестики! \n");

else printf("Победили нолики! \n");

return 0;}

if(p==3){

int q;

printf("Правила игры: \n - Расставьте крестики(нолики) так, чтобы они заполняли всю строку, столбец или диагональ\n");

printf(" - Вводить координаты можно только цифрами от 1 до 5 \n - Победителем считается тот, кто заполнит ряд своими символами быстрее \n");

Листинг А.1, лист 5

printf(" - Для того чтобы сдаться введите координаты X-0,Y-0\n");

printf("1-Возврат в меню\n2-Выход\n");

scanf("%i",&q);

if(q==1)

main();

if(q==2)

exit(0);

}

if(p==4) exit(0);

}

Размещено на Allbest.ru


Подобные документы

  • Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.

    курсовая работа [236,5 K], добавлен 27.01.2014

  • Разработка популярной развлекательной игры крестики-нолики. Возможность играть с компьютером, который играет согласно созданному алгоритму. Новые возможности Visual Studio. Легкое усвоение программы. Удобный интерфейс - "визитная карточка" приложения.

    курсовая работа [74,6 K], добавлен 20.12.2009

  • Разработка консольного приложения: описание и сценарий использования программы, интерфейс пользователя. Поэтапное описание создание кода компьютерной игры "Крестики нолики". Функциональные и нефункциональные требования, описание исключительных ситуаций.

    методичка [819,6 K], добавлен 12.05.2013

  • Проект программы "Крестики-нолики". Блок-схема алгоритма. Описание работы программного продукта. Инструкция по инсталляции. Инструкция программисту, возможность доработки с целью упрощения исполняемых кодов. Инструкция по проверке и тестированию.

    курсовая работа [235,8 K], добавлен 05.12.2009

  • Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.

    контрольная работа [380,0 K], добавлен 28.04.2014

  • Общая характеристика языков программирования. Краткий обзор C, C++, Java, PHP, Python, Delphi и Visual Basic. Процесс разработки программы игра "Крестики и нолики" с помощью AppWizard. Компиляция и компоновка модулей, определение интерфейса приложения.

    курсовая работа [2,5 M], добавлен 27.05.2014

  • Программный продукт для игры "Крестики-нолики". Описание пользовательского интерфейса. Факт базы данных, определяющий состояние счёта. Предикат изменяющий состояние игрового процесса и подсчитывающий количество занятых ячеек поля. Исходный код программы.

    курсовая работа [34,6 K], добавлен 19.05.2014

  • Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.

    курсовая работа [352,8 K], добавлен 14.04.2011

  • Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

    курсовая работа [821,5 K], добавлен 13.02.2012

  • Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.

    курсовая работа [281,5 K], добавлен 30.01.2018

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.