Программа "Крестики-нолики"
Реализация программного кода с комментариями. Процесс игры между компьютером и игроком. Основные навыки использования языка Си, освоение концепций и стратегий по созданию консольного приложения "Крестики-нолики". Создание компиляторов для новых платформ.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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