Программа "Охота на лис"
Анализ методов создания исходного кода игры "Охота на лис" на языке C, который бы выполнял свои расчетные функции. Описание правил игры. Изучение основных методов программной реализации игрового поля, на котором будут производиться действия по ходу игры.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 79,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное агентство железнодорожного транспорта
Омский государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
Программа «ОХОТА НА ЛИС»
Пояснительная записка к курсовой работе
ИНМВ.400000.000 ПЗ
Студент гр. 23и
________ Крузе И.И.
16.05.2014
Руководитель - доцент кафедры АиСУ
________ Альтман Е.А.
«__»________2014 г.
Омск 2014
Пояснительная записка к курсовой работе содержит 16 страниц, 10 рисунков, 3 использованных источника, 1 приложение.
C, MinGW, NotePad++.
Объектом курсовой работы является игра «Охота на лис».
Цель курсовой работы - научиться реализовывать пошаговую игру.
Результатом курсовой работы является рабочая игра «Охота на лис».
Игра «Охота на лис» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке С. В процессе разработки игры была изучена лексика языка С. Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2007.
- Содержание
- Введение
- 1 Постановка игры
- 1.1 Задание
- 1.2 Правила игры
- 2 Реализация задания
- 2.1 Игровое поле
- 2.2 Очистка поля
- 2.3 Подсчет лис
- 2.4 Проверка на победу
- 2.5 Игровой цикл
- 2.6 Логика компьютера
- 2.7 Сборка игры
- Заключение
- Библиографический список
- Приложение А
Введение
Язык программирования С -- стандартизированный процедурный язык программирования, разработанный в 1969 -- 1973 годах сотрудниками BellLabs Кеном Томпсоном и Деннисом Ритчи как развитие языка Би. Си был создан для использования в операционной системе UNIX. С тех пор он был перенесён на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения.
Целью данной работы является создание исходного кода игры «Охота на лис» на языке C, который бы выполнял свои расчетные функции. Также игра должна отображать своевременно необходимую пользователю информацию.
1 Постановка игры
1.1 Задание
На языке С, используя знания, полученные в ходе семестра на лекциях, практиках, лабораторных занятиях, а также самостоятельно, написать игру «Охота на лис».
1.2 Правила игры
Программу для советского программируемого микрокалькулятора Электроника МК-54 первым опубликовал в номере 12 журнала «Наука и жизнь» за 1985 год А. Несчетный из Ленинграда. Она создана по мотивам радиолюбительской игры по спортивному радиоориентированию, являющейся дисциплиной радиоспорта, зародившейся в Дании и Англии сразу после Второй мировой войны. Представляет собой состязание между спортсменами, которые с помощью карты местности, компаса и радиоприемника с направленной антенной, должны найти 5 радиопередатчиков в лесу, на пересеченной местности. Цель состязания -- найти заданное количество «лис» за наименьшее время. Участие в соревнованиях требует не только значительной физической, но и умственной тренировки.
В электронном варианте, при запуске игры, игрок видит игровое поле (рисунок 1).
Рисунок 1 - Игровое поле
На игровом поле неизвестным для игрока образом расставляются «лисы», число которых зависит от заданного числа, запрашиваемого в начале игры (рисунок 2).
Рисунок 2 - Ввод количества лис
Игрок должен ввести координаты места куда совершит свой выстрел (рисунок 3).
Рисунок 3 - Ввод координат игроком
После хода игрока, на поле отображается, попал он в лису или же промахнулся. Ниже игрового поля выводится сообщение о том сколько лис находится в строке и столбце относительно выстрела. Выше поля ведется лог ходов (рисунок 4).
Рисунок 4 - Вид игрового поля после хода
Игра продолжается до тех пор, пока не будут найдены все «лисы», при этом считается количество ходов, затраченных на поиск всех «лис». Играть можно вдвоем, выигрывает тот, кто найдет всех «лис» за меньшее число ходов (рисунок 5).
Рисунок 5 - Конец игры
2 Реализация задания
2.1 Игровое поле
Для запуска игры необходимо программно реализовать игровое поле, на котором будут производиться действия по ходу игры. Храниться поле будет в двумерном массиве matrixx, а информация о том открыто ли поле в данной точке или нет, в двумерном массиве open. Для выполнения этого задания воспользуемся функцией draw_matrix (рисунок 6).
игра охота лиса программа
Рисунок 6 -Игровое поле
2.2 Очистка поля
Для игры нам нужно очистить поле, то есть заполнить оба двумерных массива нулями. Для этого используется функция clean.
2.3 Подсчет лис
Чтобы играть по правилам, нам нужна функция, которая подсчитывает количество лис в строке и столбце, относительно сделанного выстрела. Эту задачу выполняет функция sum_fox, пробегая по столбцу и строке в поиске «лис» и в случае удачи, увеличивая счетчик (рисунок 7).
Рисунок 7 - Вывод сообщения о количестве лис
2.4 Проверка на победу
Для правильного завершения игры, нужно проверять, найдены ли все «лисы». Эта проверка происходит в функции checkwin при помощи счетчика.
2.5 Игровой цикл
Основную игровую роль для игрока-человека выполняет функция game, которая содержит в себе размещение лис на поле и основной игровой цикл, обращающийся к функциям описанным выше. Игровой цикл также содержит в себе проверку на корректность ходов (рисунок 8). Цикл завершается, когда функция checkwin, возвращает истину.
Рисунок 8 - Сообщение об ошибке
2.6 Логика компьютера
Логика компьютера реализуется с помощью нескольких функций, каждая из которых выполняет определенную роль. Функция place_fox запрашивает у пользователя (рисунок 9), каким образом расставлять лис для игрока-компьютера, opened_fox - подсчитывает количество уже открытых лис, относительно сделанного выстрела. Последняя из перечисленных функций вызывается в функции computer, которая собственно содержит в себе игровой цикл с логикой компьютера. Компьютер совершает первые 15 ходов, открывая первый столбец и последнюю строку, записывая все полученные данные в массив. Затем, анализируя полученные данные, компьютер находит те ячейки, в которых 100% не содержится лис, путем сравнения количества уже открытых лис и лис, которые есть в данной строке и столбце. Ячейки, в которых лис нет, компьютер соответственно пропускает. После каждого хода, происходит новый анализ данных, относительно уже сделанных ходов и производится выстрел.
Рисунок 9 - Запрос о расстановке лис
2.7 Сборка игры
В конечном итоге собираем все в главной функции main, она делает запросы у пользователя на выбор того, кто будет играть, он или компьютер, и на количество лис, которое расположится в игровом поле. Главная функция завершается запросом о желании пользователя продолжить игру или завершить её (рисунок 10).
Рисунок 10 - Запрос о продолжении игры
Заключение
В данной работе был рассмотрен процесс программной реализации логической игры «охота на лис». Программа была реализована в консольном режиме с использованием языка С. Отображение результата производится с использованием псевдографики консольного режима.
Разработанная программа отвечает всем требованиям поставленным в условиях задания.
Программа была реализована на языке высокого уровня, что обеспечило максимальную эффективность ее работы.
Библиографический список
1 Гpиффитс, Артур. GCC: Настольная книга пользователей, программистов и системных администраторов.: Пер. с анrл./Артур Гриффитс. К.: ООО «ТИД «ДС», 2004. 624 с.
2 Керниган, Брайан У., Ритчи, Деннис М. Язык программмирования С, 2-е издание.: Пер. с англ. М.: Издательский дом «Вильямс», 2009. 304 с.
3 Википедия [Электронный ресурс] / Электрон.текстовые дан. - Режим доступа http://ru.wikipedia.org/wiki/Охота_на_лис_(логическая_игра)
4 Helloworld [Электронный ресурс] / Электрон.текстовые дан. - Режим доступа http://www.helloworld.ru/texts/comp/lang/c/c/dir.htm
Приложение А
Листинг программы
#include "stdio.h"//библиотека ввода-вывода
#include "time.h"//для работы с датой и временем (рандом)
#define N 8
int matrixx[N][N];//матрица, содержащая игровое поле
int open [N][N];//матрица, содержащая в себе значения, указывающие на то, открыто ли поле
void draw_matrix()
//рисование поля, с учетом изменений
{
int i, j;
printf (" |0|1|2|3|4|5|6|7|\n");
for (i=0; i<N; i++)
{
printf ("%i|", i);
for (j=0; j<N; j++)
{
if (open[i][j])//если поле открыто
{
if (matrixx[i][j]==9)//если в поле лиса
printf ("F|");
else if (matrixx[i][j]==0)//если поле пустое
printf("x|");
}
else//если поле закрыто
printf ("-|");
}
printf("\n");
}
}
void clean()
//функция заполнения поля нулями
{
int c;
//все чистим, заполняем весь массив нулями
for(c=0; c<64; c++)
{
matrixx[c/8][c%8]=0;
open[c/8][c%8]=0;
}
}
int sum_fox (int o, int g)
//считает количество лис в столбце и строке
//o,g-координаты
{
int count=0, i, j;//count-число лис,i,j-координаты
for (i=0; i<N; i++)//пробегаем по столбцу
{
if (matrixx[i][g]==9)//если есть лисы
count++;//увеличиваем счетчик
}
for (j=0; j<N; j++)//пробегаем по строке
{
if (matrixx[o][j]==9)//если есть лисы
count++;//увеличиваем счетчик
}
if(matrixx[o][g]==9)//если лиса находилась в точке выстрела
count=count-1;//уменьшаем счетчик на единицу, чтобы
return count;//возвращаем число лис
}
int checkwin (int fox_num)
//функция проверки на победу
//fox_num-общее число лис, фукция возвращает истину или ложь
{
int x, y, k=0;//x,y-координаты, k-cчетчик
for(x=0; x<N; x++)//циклы для проверки всего поля
{
for(y=0; y<N; y++)
{
if((matrixx[x][y]==9) && (open[x][y]))//если лиса открыта увеличиваем счетчик
k++;
if (k==fox_num)//если счетчик равен количеству лис
return 1;//возвращаем истину
}
}
return 0;
}
void fox_in_matrix(int fox_num)
//функция размещения лис вручную
//fox_num-количество лис
{
int a,b,i;
for(i=0; i<fox_num; i++)
{
do//считываем введенные координаты, если поле уже занято, цикл повторяется
{
printf("Координаты: ");
scanf("%i", &a);
scanf("%i", &b);
}
while(matrixx[a][b]!=0);
if (a<0 || a>7 || b<0 || b>7)//проверка на допустимость координат
{
printf ("Координаты введены неверно!\n");
fox_num++;//если координаты введены неверно, увеличиваем кол-во шагов цикла на единицу(чтобы лиса не терялась)
continue;
}
matrixx[a][b]=9;//размещаем в данном поле лису
}
}
void fox_in_matrix_rand(int fox_num)
//функция размещения лис случайно
//fox_num-количество лис
{
int a,b,i;
for(i=0; i<fox_num; i++)
{
srand(time(NULL));
do//получаем кооординаты, если поле уже занято, цикл повторяется
{
a=rand()%8;
b=rand()%8;
}
while(matrixx[a][b]!=0);
matrixx[a][b]=9;//размещаем в точке лису
}
}
void place_fox (int fox_num)
//ввод расположения лис
//fox_num-число лис
{
int a, b, i;//a-введенное число выбора, затем координата,b-координата,i-счетчик цикла
printf ("Расставляете лис самостоятельно или позволим сделать это рандому?\n1 - рандом, иначе - самостоятельно\n");
scanf("%i", &a);//считываем число введенное пользователем
if (a==1)//если а=1, то запускается рандомная расстановка лис
fox_in_matrix_rand(fox_num);
else//если а!=1, то запускается ручное размещение лис
{
printf ("Вводите координаты размещения лис (номер строки 'пробел' номер столбца)\n");
fox_in_matrix(fox_num);
}
}
int opened_foxes(int o, int g)
//уже открытые лисы(для логики)
//o,g-координаты, возвращает количество открытых лис
{
int count=0, i, j;//count-число открытых лис,i,j-координаты
for (i=0; i<N; i++)//пробегаем по столбцу
{
if (matrixx[i][g]==9 && (open[i][g]))//если в ячейке есть лиса и она открыта
count++;//увеличиваем счетчик
}
for (j=0; j<N; j++)//пробегаем по строке
{
if (matrixx[o][j]==9 && (open[o][j]))
count++;
}
if (matrixx[o][g]==9 && (open[o][g]))//если лиса находилась в точке выстрела и была открыта
count=count-1;//уменьшаем счетчик
return count;//возвращаем число лис
}
void computer(int fox_num)
//логика компьютера
//fox_num-количество лис
{
int i=-1, j=0, h=0, count=0, p=0, g, n, k,m;//i,j-координаты,h-ходы,count-число лис,g,n,m-счетчики при анализе,k-счетчик для записи значений в массив
int foxes[64], coords_X[64], coords_Y[64], hh[64], crdi[50], crdj[50];//массивы для хранения значений
do
{
system("cls");//очищаем консоль
printf ("Ход: %i\n", h);//печатаем номер хода
draw_matrix();//рисуем поле
printf("\n");
if (h<=14)//первые ходы компьютера всегда открывают последнюю строку и первый столбец
{
if (i<8) i++;
if (i==8 && j<=7) {j++;i=7;}
}
else//начиная с 15 хода, компьютер анализирует данные, исходя из первых ходов
{
k=0;//индекс массивов для записи координат
do
{
if(m<5)//если зацикливается и не может найти ход, то откроем случайные координаты
{
for(g=0;g<7;g++)//внешний цикл с i от 0 до 6
{
for(n=8;n<15;n++)//внутренний цикл с j от 1 до 7
{
//если количество лис на определенном ходу было равно количеству лис открытых на этом же ходу, то поле пустое
if (foxes[hh[g]]==opened_foxes(coords_Y[g], coords_X[g]) && foxes[hh[n]]==opened_foxes(coords_Y[n], coords_X[n]))
continue;
else//иначе записываем координаты выстрела
{
crdi[k]=g;//записываем все значения в массив
crdj[k]=n-7;
}
k++;//увеличение счетчика
}
}
i=crdi[h-15];//присваиваем координатам значение из массива
j=crdj[h-15];
m++;
}
else
{
i=rand()%8;
j=rand()%8;
}
}
while(open[i][j]);//цикл выполняется снова, если поле открыто
}
if (i<0 || i>7 || j>7 || j<0)//проверка на выход за пределы массива
continue;
count = sum_fox(i,j);//подсчет количества лис
open[i][j]=1;//открываем поле
m=0;
foxes[p]=count;//записываем все данные в массивы (для анализа)
coords_X[p]=j;
coords_Y[p]=i;
hh[p]=h;
p++;//увеличение счетчика
h++;//увеличение счетчика на единицу (ходы)
}
while(checkwin(fox_num)!=1);//основной цикл выполняется, пока не будет выполнено условие победы
system("cls");//очищаем консоль
printf("Все лисы найдены!\nКоличество ходов: %i\n", h);
draw_matrix();//рисуем поле с последней лисой
}
int limits (int i, int j)
//проверяет на выход за пределы
//i,j-координаты
{
if (i<0 || i>7 || j>7 || j<0)//проверка на диапазон координат
{
printf ("Координаты введены неверно!");
getch();
return 0;
}
return 1;
}
void game(int fox_num)
//игра человека
//fox_num-количество лис
{
int i,j, h=1, count=0, v, p=0;//c,v,p-счетчики, i,j-координаты, h-ход, count-число лис в строке и столбце,
int foxes[64], coords_X[64], coords_Y[64], hh[64];//массивы для хранения ходов и вывода лога
//заполняем массив поля лисами
fox_in_matrix_rand(fox_num);
//основной игровой цикл
do
{
system("cls");//очищаем консоль
printf ("Ход: %i\n", h);//печатаем номер хода
for(v=0;v<h-1;v++)//вывод лога ходов
printf("\tХод:%2i. Координаты:%i %i. Лис: %i.\n", hh[v],coords_Y[v],coords_X[v],foxes[v]);
printf("\n");
draw_matrix();//рисуем поле
printf("\n");
printf ("Количество лис в строке и столбце: %i\n", count);//печатаем количество лис
//запрашиваем координаты удара
printf("Введите координаты удара (номер строки 'пробел' номер столбца): ");
scanf("%i", &i);//считываем информацию
scanf("%i", &j);
if (!limits(i,j))//проверка на диапазон координат
continue;
if(open[i][j]==1)//если поле уже открыто
{
printf("Вы уже стреляли сюда!");
getch();
continue;
}
count = sum_fox(i,j);//функция подсчета лис в строке и столбце
foxes[p]=count;////записываем все данные в массивы (для лога)
coords_X[p]=j;
coords_Y[p]=i;
hh[p]=h;
p++;//увеличиваем счетчик на 1
open[i][j]=1;//открываем поле
h++;//увеличение счетчика на единицу (ходы)
}
while(checkwin(fox_num)!=1);//основной цикл выполняется, пока не будет выполнено условие победы
h--;
system("cls");//очищаем консоль
printf("Все лисы найдены!\nКоличество ходов: %i\n", h);
draw_matrix();//рисуем поле с последней лисой
}
main()
{
int fox_num=33, select, i;
//fox_num-количество лис на поле, select-выбор режима
system("cls");//очищаем командную строку
clean();//все чистим, заполняем весь массив нулями
printf ("Игра Охота на лис!\n");
for(i=0;fox_num<1 || fox_num>32; i++)//цикл для проверки количества введенных лис
{
printf ("Введите количество лис (не более 32): ");
scanf ("%i", &fox_num);
if (!(fox_num>0 && fox_num<33))//если не входит в диапазон, выводится сообщение и цикл повторяется
{
printf ("Введите количество лис в допустимом диапазоне!\n");
getch();
}
}
printf ("Играет компьютер или вы?\n1 - Вы, иначе - компьютер\n");//запрос на выбор
scanf ("%i", &select);//считываем информацию
//если select==1, то запускается игра против компьютера
if (select==1)
{
game(fox_num);
}
//если select!=1, то запускается игра компьютера`
else
{
place_fox(fox_num);//функция расположения лис
computer(fox_num);//логика компьютера
}
printf ("\n1 - играть с начала, иначе - выход\n");
scanf("%i", &i);
if (i==1)//если введено 1, то игра начинается сначала
main();
else//иначе, выход
return 0;
}
Размещено на Allbest.ru
...Подобные документы
Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012История создания игры "Тетрис", смысл и правила данной головоломки. Разработка поля игры и фигур тетрамино. Процедуры и функции, используемые для реализации движения фигур, их поворота и складывания в ряды, удаления и подсчета количества целых рядов.
курсовая работа [87,0 K], добавлен 02.02.2013Проект игры "Ловушка", созданный при помощи языка программирования C++. Описание заголовочных файлов. Правила и цель игры "Ловушка". Отображение движущихся объектов игры на экране с помощью заголовочного файла "gameclass.h". Описание игрового процесса.
курсовая работа [70,6 K], добавлен 14.10.2012Разработка компьютерной игры "Эволюция" с помощью игрового движка Unit. Сравнение критериев игры-аналога и разрабатываемой игры. Разработка графического интерфейса пользователя. Настройки камеры в редакторе Unity. Структура файла сохранения игры.
дипломная работа [3,6 M], добавлен 11.02.2017Общие сведения и существующие среды реализации компьютерной игры "Лабиринт". Разработка алгоритмов в виде блок-схемы, принципы программной реализации игры. Особенности тестирования разработанного программного продукта. Аспекты эксплуатации продукта.
курсовая работа [1,4 M], добавлен 18.01.2017История возникновения и происхождения игры в шашки, ее популярность. Классификация шашечных игр по размерам доски и особенностям правил, виды и варианты шашек. Правила воспроизведения сражений в "Русские шашки". Составление алгоритма и кода программы.
курсовая работа [250,3 K], добавлен 28.01.2012Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.
курсовая работа [645,0 K], добавлен 26.03.2014Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.
курсовая работа [281,5 K], добавлен 30.01.2018Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.
дипломная работа [3,3 M], добавлен 18.02.2017Обзор методов и средств реализации поставленной задачи. Описание компьютерной игры "Японские кроссворды". Обоснование инструментария разработки программного продукта. Алгоритмический анализ задачи. Графический интерфейс и лингвистическое обеспечение.
курсовая работа [725,4 K], добавлен 27.08.2013Исследование базовых концепций программирования приложений под операционную систему Windows. Изучение истории создания универсального языка программирования Си. Разработка графического пользовательского интерфейса. Обзор правил игры и алгоритма работы.
курсовая работа [58,2 K], добавлен 09.11.2012Понятие и эволюция игр, анализ их различных жанров и существующих аналогов. Выбор программных средств для реализации игры, написание сюжета и выбор среды разработки игры. Алгоритмы для придания гибкости обучающей игре. Описание программных модулей.
дипломная работа [2,7 M], добавлен 27.10.2017Технические и пользовательские характеристики игры, требования к программному обеспечению и среде разработки C#. Составление блок-схемы алгоритма, uml-диаграммы и текста программы, тестирование корректности компьютерного кода и результатов его работы.
курсовая работа [1,8 M], добавлен 05.03.2013Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний вид. Необходимые переменные, процедуры и функции. Характеристика объектов, используемых в приложении.
курсовая работа [950,1 K], добавлен 05.11.2012Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.
курсовая работа [160,3 K], добавлен 03.12.2014Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Игровая программа "шашки" для игры между человеком и компьютером. Разработка алгоритмов, историческая линия развития задач. Различные подходы к построению систем. Сокращенный листинг программы и описание алгоритма. Компоненты искусственного интеллекта.
курсовая работа [196,2 K], добавлен 26.03.2009Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Язык программирования Pascal и его турбооболочка. Аналитический обзор игрового программного обеспечения. Функции модуля Crt. Постановка задачи создания несложной игровой программы "Турбозмей", алгоритм реализации и описание пользовательского интерфейса.
курсовая работа [100,4 K], добавлен 15.05.2014