Программа "Ним"
Рассмотрение особенностей разработки программного кода игры "Ним": знакомство с основными правилами, анализ игрового процесса. Общая характеристика ключевых функций, в которых реализован механизм работы игры. Способы проверки корректности данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 247,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Программа "Ним"
Введение
В данной пояснительной записке описываются все основные особенности разработки игры "Ним". Разработка программного кода состоит из нескольких частей: реализация интерфейса, основное механизм работы игры и реализация искусственного интеллекта. Было создано несколько функций, содержащих в себе циклы. При разработке игры понадобился опыт работы с массивами и их печати.
Практическое значение проекта состоит в том, что бы получить первичные навыки разработки простейшего программного обеспечения и реализации искусственного интеллекта. Игра "Ним" одна из элементарных игр, но при этом её разработка включает в себя применение основных навыков программирования.
1. Правила игры
На столе находится некоторое количество кучек, с некоторым количеством спичек (например, 5 кучек с 8, 13, 7, 5, 9 спичками). При своем ходе игрок может взять из любой одной кучки любое число спичек, но не меньше одной. Выигрывает тот, кто берет последнюю спичку .
2. Разработка программного кода игры
2.1 Игровой процесс
Для работы программы были подключены библиотеки: ввода/вывода и заголовочный файл для русификации игры
#include "stdio.h"
#include <locale>
Главная функция, в которой реализован механизм работы игры. В программе было реализовано 2 режима. Режим игры против ИИ и игры вдвоем. Сначала необходимо выбрать режим. В консоли появляется сообщение о том, что бы пользователь выбрал режим игры( рисунок 1).
int main()
{
setlocale(LC_ALL, "Russian");
int q;
printf("1)против ИИ \n2) 2 игрока ");
scanf_s("%i", &q);
Рисунок 1. Сообщение о выборе режима игры
Если выбран 2 режим 2 игрока:
Объявлены 3 переменные типа int ? количества спичек в каждой кучке.
if (q == 2)
{
setlocale(LC_ALL, "Russian");
int n = 7, n1 = 7, n2 = 8;
spichki(n, n1, n2);
int x, y, c = 1;
В цикле While содержатся основные действия и вывод на экран: какой из 2 игроков должен походить в данный момент. Затем происходит вывод на экран 3 кучек со спичками ( рисунок 2).
while (n >= 0 && n1 >= 0 && n2 >= 0)
{
c++;
if (c % 2 == 0)
{
printf(" 1-ый игрок ходит ");
}
else
{
printf(" 2-ой игрок ходит ");
}
printf(" \n");
printf(" из какой кучи? ");
scanf_s("%i", &x);
if (x > 3)
{
printf("такой кучи нет. Введи номер кучи, которая доступна");
scanf_s("%i", &x);
}
printf(" сколько спичек берете? ");
scanf_s("%i", &y);
if (y > n && y > n1 && y > n2)
{
printf("нельзя взять спичек больше, чем лежит в кучи. Введите доступное количество спичек.");
scanf_s("%i", &y);
}
if (x == 1)
{
n = n - y;
}
if (x == 2)
{
n1 = n1 - y;
}
if (x == 3)
{
n2 = n2 - y;
}spichki(n, n1, n2)
Рисунок 2 ? Вывод на экран кучек со спичками.
Также присутствует проверка корректности введенных данных, например, если кучи, из которого необходимо взять спички, не существует или количество спичек больше, чем есть на самом деле, произойдёт вывод сообщения о некорректности введенных данных и предложение ввести номер кучи или количество спичек повторно (рисунок 3).
Рисунок 3. Проверка корректности данных.
Когда спички во всех 3-х столбцах закончились, на экран выводятся сведения, который из игроков выиграл. ( Рисунок 4)
if (n <= 0 && n1 <= 0 && n2 <= 0)
{
if (c % 2 == 0)
{
printf(" 1-ый игрок выиграл ");
return 0;
}
else
{
printf(" 2-ой игрок выиграл ");
return 0;
}
}
}
}
Рисунок 4. Сообщение о победе 1-го или 2-го игрока.
2.2 Игровой интерфейс
игра программный код
Вывод на экран 3-х кучек со спичками реализуется с помощью функции печати спичек. Она представляет собой набор из 3 массивов, символом ,обозначающий спички был выбран "l".
Аргументами функции печати являются переменные n,n1,n2 типа int. Они обозначают количество спичек в куче в данный момент.
void spichki(int n, int n1, int n2)
{
setlocale(LC_ALL, "Russian");
char mas1[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
char mas2[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
char mas3[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
int i;
printf(" 1 : ");
for (i = 0; i < n; i++)
{
printf("%c", mas1[i]);
}
printf(" 2: ");
for (i = 0; i < n1; i++)
{
printf("%c", mas2[i]);
}
printf(" 3 : ");
for (i = 0; i < n2; i++)
{
printf("%c", mas3[i]);
}
printf(" \n ");
}
Если выбран режим игры против ИИ( Искусственного интеллекта):
else
{
setlocale(LC_ALL, "Russian");
int n = 7, n1 = 7, n2 = 8;
spichki(n, n1, n2);
int x, y, c = 1;
В цикле while содержатся основные действия. На экран выводится только сообщение о том, что должен походить игрок. Т.к. игрок всего 1.
while ((n >= 0 && n1 >= 0) && (n2 >= 0))
{
printf(" 1-ый игрок ходит ");
printf(" \n");
printf(" из какой кучи? ");
scanf_s("%i", &x);
printf(" сколько спичек берете? ");
scanf_s("%i", &y);
2.3 Работа искусственного интеллекта
Реализация искусственного интеллекта по больше части состоит из реакции компьютера на действия, произведенные игроком. Игрок вводит данные о том, сколько спичек и откуда он хочет взять, а в ответ на это происходят очевидные действия и вывод на экран сообщения о действиях ИИ. Сколько он взял спичек и откуда. А затем с помощью функции печати происходит вывод кучек после действий ИИ. Реализуется он с помощью функции spichki1 , которая содержит в себе основой механизм работы ИИ и функции spichki2, которая вывод сообщение о победе компьютера.
Если игрок не разобрался в правилах игры или специально поддается то, программа его выиграет и произойдёт вывод сообщения о том, что ИИ победил. Если же игрок взял последним, то произойдёт вывод на экран сообщения, что игрок победил.
void spichki2(int n, int n1, int n2)
{
if (n1 == 0 && n == 0 && n2 == 0)
{
printf(" ИИ выиграл ");
}
}
int spichkiII(int x,int y,int n,int n1,int n2)
{
if (x == 1)
{
n = n - y;
}
if (x == 2)
{
n1 = n1 - y;
}
if (x == 3)
{
n2 = n2 - y;
}
spichki(n, n1, n2);
if (n == 0 && n1 == 0 && n2 == 0)
{
printf(" 1 игрок выиграл ");
}
if (n == 0 && n1 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 3, n2);
n2 = 0;
spichki2( n, n1, n2);
}
if (n == 0 && n2 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 2, n1);
n1 = 0;
spichki2(n, n1, n2);
}
if (n1 == 0 && n2 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 1, n);
n = 0;
spichki2(n, n1, n2);
}
if (n == 0)
{
printf(" ИИ берет из %i кучи %i спичек2 \n", 3, 1);
n2 = n2 - 1; spichki2(n, n1, n2);
}
if (n1 == 0 && n2 > 0)
{
printf(" ИИ берет из %i кучи %i спичек \n ", 3, 1);
n2 = n2 - 1;
spichki2(n, n1, n2);
}
if (n2 == 0 && n > 0)
{
printf(" ИИ берет из %i кучи %i спичек \n ", 1, 1);
n = n - 1; spichki2(n, n1, n2);
}
if (n > 0)
{
if (n1 > 1)
{
printf(" ИИ берет из %i кучи %i спичек \n", 2, 1);
n1 = n1 - 1; spichki2(n, n1, n2);
}
else
{
printf(" ИИ берет из %i кучи %i спичек \n", 3, 1);
n2 = n2 - 1; spichki2(n, n1, n2);
}
}
return n1, n2, n;
Заключение
игра программный код
Результатом проделанной работы стала работоспособная игры "Ним"
В процессе разработки игры были применены на практике знания и получен опыт создания простейшего программного обеспечения. Был реализован искусственный интеллект программы.
Библиографический список
1.Керниган Б, Ритчи Д. Язык программирования Си / 2-е издание. : Пер. с англ. -- М. : Издательский дом "Вильяме", 2009. -- 304 с.
2. Альтман Е. А , Александров А. В., Ананьева Н. Г., Актаев Н. Е. Методические указания к лабораторным работам / Омский гос. ун-т путей сообщения. Омск, 2011. 31 с.
3.Г. М. Фалалеева , А. Ю. Тэттэр, Б. Б. Сергеев./ СТП ОмГУПС-1.2-2005
Приложение А
Листинг программы
#include "stdio.h"
#include <locale>
void spichki(int n, int n1, int n2)
{
setlocale(LC_ALL, "Russian");
char mas1[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
char mas2[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
char mas3[] = { 'l', ' l', 'l', ' l', 'l', 'l', 'l', 'l' };
int i;
printf(" 1 : ");
for (i = 0; i < n; i++)
{
printf("%c", mas1[i]);
}
printf(" 2: ");
for (i = 0; i < n1; i++)
{
printf("%c", mas2[i]);
}
printf(" 3 : ");
for (i = 0; i < n2; i++)
{
printf("%c", mas3[i]);
}
printf(" \n ");
}
void spichki2(int n, int n1, int n2)
{
if (n1 == 0 && n == 0 && n2 == 0)
{
printf(" ИИ выиграл ");
}
}
int spichkiII(int x,int y,int n,int n1,int n2)
{
if (x == 1)
{
n = n - y;
}
if (x == 2)
{
n1 = n1 - y;
}
if (x == 3)
{
n2 = n2 - y;
}
spichki(n, n1, n2);
if (n == 0 && n1 == 0 && n2 == 0)
{
printf(" 1 игрок выиграл ");
}
if (n == 0 && n1 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 3, n2);
n2 = 0;
spichki2( n, n1, n2);
}
if (n == 0 && n2 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 2, n1);
n1 = 0;
spichki2(n, n1, n2);
}
if (n1 == 0 && n2 == 0)
{
printf(" ИИ берет из %i кучи %i спичек ", 1, n);
n = 0;
spichki2(n, n1, n2);
}
if (n == 0)
{
printf(" ИИ берет из %i кучи %i спичек2 \n", 3, 1);
n2 = n2 - 1; spichki2(n, n1, n2);
}
if (n1 == 0 && n2 > 0)
{
printf(" ИИ берет из %i кучи %i спичек \n ", 3, 1);
n2 = n2 - 1;
spichki2(n, n1, n2);
}
if (n2 == 0 && n > 0)
{
printf(" ИИ берет из %i кучи %i спичек \n ", 1, 1);
n = n - 1; spichki2(n, n1, n2);
}
if (n > 0)
{
if (n1 > 1)
{
printf(" ИИ берет из %i кучи %i спичек \n", 2, 1);
n1 = n1 - 1; spichki2(n, n1, n2);
}
else
{
printf(" ИИ берет из %i кучи %i спичек \n", 3, 1);
n2 = n2 - 1; spichki2(n, n1, n2);
}
}
return n1, n2, n;
int main()
{
setlocale(LC_ALL, "Russian");
int q;
printf("1)против ИИ \n2) 2 игрока ");
scanf_s("%i", &q);
if (q == 2)
{
setlocale(LC_ALL, "Russian");
int n = 7, n1 = 7, n2 = 8;
spichki(n, n1, n2);
int x, y, c = 1;
while (n >= 0 && n1 >= 0 && n2 >= 0)
{
c++;
if (c % 2 == 0)
{
printf(" 1-ый игрок ходит ");
}
else
{
printf(" 2-ой игрок ходит ");
}
printf(" \n");
printf(" из какой кучи? ");
scanf_s("%i", &x);
if (x > 4)
{
printf("такой кучи нет. Введи номер кучи, которая доступна");
scanf_s("%i", &x);
}
printf(" сколько спичек берете? ");
scanf_s("%i", &y);
if (y > n && y > n1 && y > n2)
{
printf("нельзя взять спичек больше, чнм лежит в кучи.Введите доступное колличество спичек.");
scanf_s("%i", &y);
}
if (x == 1)
{
n = n - y;
}
if (x == 2)
{
n1 = n1 - y;
}
if (x == 3)
{
n2 = n2 - y;
}
spichki(n, n1, n2);
if (n <= 0 && n1 <= 0 && n2 <= 0)
{
if (c % 2 == 0)
{
printf(" 1-ый игрок выиграл ");
return 0;
}
else
{
printf(" 2-ой игрок выиграл ");
return 0;
}
}
}
}
else
{
setlocale(LC_ALL, "Russian");
int n = 7, n1 = 7, n2 = 8;
spichki(n, n1, n2);
int x, y, c = 1;
while ((n > 0 && n1 > 0) && (n2 > 0))
{
printf(" 1-ый игрок ходит ");
printf(" \n");
printf(" из какой кучи? ");
scanf_s("%i", &x);
printf(" сколько спичек берете? ");
scanf_s("%i", &y);
spichkiII(x,y,n,n1,n2);
spichki(n, n1, n2);
}
}
}
Приложение Б
Примеры интерфейса игры
Рисунок Б.1- Выбор режима игры
Рисунок Б.2 -Ход первого игрока
Рисунок Б.3- Ход второго игрока, лист 1
Рисунок Б.4 - Ход первого игрока
Рисунок Б.5 - Ход второго игрока, лист 2
Рисунок Б.6 - Ход первого игрока. Первый игрок побеждает, лист 3
Размещено на Allbest.ru
...Подобные документы
Технические и пользовательские характеристики игры, требования к программному обеспечению и среде разработки C#. Составление блок-схемы алгоритма, uml-диаграммы и текста программы, тестирование корректности компьютерного кода и результатов его работы.
курсовая работа [1,8 M], добавлен 05.03.2013Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013"Точки" как игра на бумаге в клетку, в которой участвуют от двух и более человек, знакомство с правилами. Рассмотрение особенностей реализации игры "Точки" на любом из объектно-ориентированных языках программирования. Этапы развития Visual Basic.
курсовая работа [554,5 K], добавлен 15.05.2014Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.
курсовая работа [160,3 K], добавлен 03.12.2014Память вычислительной машины как иерархия запоминающих устройств, отличающихся средним временем доступа. Знакомство с основными принципами кэширования. Анализ ключевых функций кэш-контроллера. Рассмотрение недостатков работы устройства при кэшировании.
курсовая работа [1,3 M], добавлен 04.10.2014Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012Анализ деятельности группы компаний "Инрэко ЛАН". Общая характеристика, основы проектирования и разработка операционной системы Android. Этапы разработки программного игрового приложения с использованием физики. Скриншоты, отображающие игровой процесс.
отчет по практике [2,7 M], добавлен 19.07.2012Анализ моделей и методов реализации интеллектуальных игр в системе человек-робот. Среда разработки Choreographe. Алгоритмы модуля распознавания, обработки данных, функций модуля игры. Тестирование программного комплекса, исправление и редакция ошибок.
дипломная работа [1,7 M], добавлен 12.08.2017Рассмотрение особенностей структурной и целостной частей реляционной модели базы данных, их функции. Знакомство с основными этапами разработки стратегии поддержания ссылочной целостности. Общая характеристика способов манипулирования реляционными данными.
курсовая работа [565,8 K], добавлен 25.04.2013Методика и основные этапы разработки стратегической игры, ее элементы и принцип работы программы. Порядок построения информационной модели. Диаграмма потоков данных и действий. Выбор языка программирования и его обоснование. Критерии качества среды.
курсовая работа [3,5 M], добавлен 11.12.2012Общая характеристика ключевых этапов разработки программного обеспечения "Автоматизация учета сведений о графике работы сотрудников и расчёт заработной платы". Знакомство с основными особенностями использования электронно-вычислительной техники в учете.
дипломная работа [362,7 K], добавлен 08.12.2014Реализация программы для решения матричных игр. Задание матрицы игры вручную и случайным образом, нахождение оптимальных стратегий игроков итерационным и методом чистых стратегий. Проектирование и листинг программного кода, сохранение матрицы игры.
контрольная работа [716,7 K], добавлен 11.06.2011Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.
курсовая работа [236,5 K], добавлен 27.01.2014Определение унитарных и бинарных функций. Представление булевых функций: дизъюнктивная и конъюнктивная нормальная форма. Общая характеристика правил и стратегии игры в шашки. Особенности математической модели цифрового устройства для игры в шашки.
курсовая работа [544,0 K], добавлен 28.06.2011Проект игры "Ловушка", созданный при помощи языка программирования C++. Описание заголовочных файлов. Правила и цель игры "Ловушка". Отображение движущихся объектов игры на экране с помощью заголовочного файла "gameclass.h". Описание игрового процесса.
курсовая работа [70,6 K], добавлен 14.10.2012Разработка компьютерной игры "Эволюция" с помощью игрового движка Unit. Сравнение критериев игры-аналога и разрабатываемой игры. Разработка графического интерфейса пользователя. Настройки камеры в редакторе Unity. Структура файла сохранения игры.
дипломная работа [3,6 M], добавлен 11.02.2017Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.
контрольная работа [286,3 K], добавлен 10.04.2011Знакомство с особенностями и этапами разработки приложения для платформы Android. Рассмотрение функций персонажа: бег, прыжок, взаимодействие с объектами. Анализ блок-схемы алгоритма генерации платформ. Способы настройки функционала рабочей области.
дипломная работа [3,4 M], добавлен 19.01.2017Ознакомление с понятием компьютерных игр и их основными жанрами. Выбор сюжета игры и среды программирования. Отрисовка графики; проведение функционального и интерфейсного тестирования программы. Анализ условий труда в данной компьютерной лаборатории.
дипломная работа [3,2 M], добавлен 13.07.2014Анализ правил выбора хода на шахматной доске К. Шеннона. Характеристика программного модуля искусственного интеллекта для игры в шахматы. Контроль времени, поиск лучшего хода в шахматных алгоритмах. Разработка программы для игры с компьютерным оппонентом.
дипломная работа [3,7 M], добавлен 07.07.2012