Программа "Наборщик"
Анализ методики реализации компьютерной игры, в ходе которой ходы компьютера осуществляются методом отличным от выбора хода случайным образом. Описание основных правил игрового процесса. Изучение основных методов программной реализации игрового поля.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 117,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное агентство железнодорожного транспорта
Омский государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
Программа «НАБОРЩИК»
Пояснительная записка к курсовой работе
по дисциплине «Программирование и основы алгоритмизации»
ИНМВ.411000.000 ПЗ
игра компьютерный программа
Студент гр. 23ф
А.К.Кучук
«__»________2014 г.
Руководитель -
доцент кафедры АиСУ
А. С. Окишев
«__»________2014 г.
Омск 2014
Пояснительная записка к курсовой работе содержит 20 страниц, 5 рисунков, 4 использованных источника, 2 приложения.
Игра «Наборщик», функция, программа, «Си», «Notepad++»
Объектом исследования является игра «Наборщик».
Цель курсовой работы - систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.
Игра «Наборщик» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке «Си».
В процессе разработки игры была изучена лексика языка «Си».
Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2007.
Задание
В курсовой работе нужно реализовать игру. Игра являются пошаговой с интерфейсом командной строки. Компьютер выводит в текстовом виде информацию о состоянии игры и ходе компьютера. Пользователь делает свой ход, вводя с клавиатуры нужные данные
Игра «Наборщик». На поле 8*8 игрок располагает n лис. Другой игрок должен подстрелить всех лис. При каждом выстреле он называет клетку поля. При этом другой игрок сообщает, попал ли выстрел в лису, и сколько лис в сумме находится в одном столбце и строке с выстрелом. Выигрывает тот, кто быстрее найдет всех лис.
Содержание
Введение
Основная часть
Заключение
Библиографический список
Приложение А
Введение
Данная курсовая работа написана на языке «Cи», компилируемом, статически типизированном языке программирования общего назначения. В ней реализована задача игры «Бергсона». «Cи» - стандартизированный процедурный язык программирования.
Язык «Cи» был разработан в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как наследник языка «B».
«Cи» был создан для использования в операционной системе UNIX, в том числе и для написания ядра системы. С тех пор он был портирован на многие другие операционные системы и стал одним из самых широко используемых языков программирования.
В 1978 году была опубликована книга «Язык программирования Cи» Ритчи и Кернигана; описанный в ней язык стал неформальным стандартом языка, известным как K&R «Cи».
Первый официальный стандарт языка был создан в 1989 году ANSI X3.159-1989 и в следующем году с незначительными изменениями принят как ISO/IEC 9899:1990; он известен как ANSI C. Следующими стандартами стали ISO 9899:1999 (C99) и ISO/IEC 9899:2011 (C11).
«Cи» ценят за его эффективность; он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ.
Особенности языка:
- минимальное количество ключевых слов;
-большинство возможностей языка вынесено в библиотек; использование препроцессора для определения макросов, включения исходных кодов других файлов и условной компиляции;
- статическая слабая типизация: у всех данных есть фиксированные типы, но неявные преобразования разрешены;
- разрешено определение пользовательских типов и составных типов;
-предоставляется низкоуровневый доступ к памяти (через преобразование машинных адресов в типизированные указатели);
- процедуры являются частным случаем функции, возвращающей специальный тип «void»;
- файлы можно компилировать отдельно и линковать друг с другом, контролируя видимость функций и данных ключевыми словами «static» и «extern».
Написанная игра является пошаговой, игрок вводит данные с клавиатуры, а компьютер выводит на экран результаты его хода.
Основная часть
В коде программы используется структура данных и присутствует 6 функций. Рассмотрим поочередно назначение и принцип работы каждой из них.
Структура данных.
struct state //структура данных
{
int f1[8][8];//игровое поле 1 игрока
int f2[8][8];//игровое поле 2 игрока
char f1v[8][8];//выводимое игровое поле 1 игрока в процессе
char f2v[8][8];//выводимое игр. поле 2 игрока в процессе игр
int x,y; // координаты
int fox1; // количество лис 1 игрока
int fox2; // количество лис 2 игрока
int pl;// режим игры
};
Функция вывода игрового поля на экран.
За вывод игрового поля на экран отвечает функция «void».На экран выводиться поле в соответствии состоянию игры, процесс реализован так, что игроки не знают расположения лис противника. Результат работы функции приведен на рисунке 1.
Вывод полей:
void pech_gl(int *b, int n, int *d) //вывод полей
int i,j;
printf("\n");
printf(" | 1");
for(i=2;i<9;i++)printf("%5i",i);
printf("\t\t | 1");
for(i=2;i<9;i++)printf("%5i",i);
printf("\n");
printf("----------------------------------------\t\t--------------------------------------\n");
for(i=0;i<8;i++)
{
printf("%i | ",i+1);
for(j=0;j<8;j++)
if(b[i*n+j]!=120)
if(b[i*n+j]>15)
printf("%1c%c%i ",76,47,b[i*n+j]-20);
else
printf("%1i ",b[i*n+j]);
else
printf("%1c ",b[i*n+j]);
printf("\t\t%i | ",i+1);
for(j=0;j<8;j++)
printf("%1c ",d[i*n+j]);
printf("\n\n");
}
Рисунок 1 - Результат работы функции «void»
Заполнение игрового поля и выбор типа игры. Для начала игры нужно выбрать режим игры и соответственно заполнить игровое поле. Эти действия реализованы в функции «while». После выбора режима игры, игроки поочередно заполняют игровое поле (ввод координат лис через пробел), при игре с компьютером его лисы расставляются случайно. Все действия осуществляются с клавиатуры.
while(er<1) //заполнение игрового поля
{
printf("vvedite coord lisi ");
scanf("%i%i",&str1,&sto1); str1--;sto1--;
if((str1<0)||(str1>7)||(sto1<0)||(sto1>7))
{printf("\n nevernaya koordinata\n");}
else er=1;
if((er==1)&&(d[str1*n+sto1]!=45))
{ printf("\n vi suda yzhe stavili\n"); er=0;}
}
w[str1*n+sto1]=1; d[str1*n+sto1]=76;
system("cls"); u++;
Функция подсчета лис в данном столбце и строке. Для осуществления игрового процесса нам требуется, чтобы после каждого хода в клетке, по которой стрелял игрок, выводилось количество лис находящихся в данном столбце и данной строке. В функцию передаются координаты выстрела , и массив хранящий игровое поле. Функция считает лис в столбце выстрела и строке выстрела. Полученное число переводиться в типа «char».
Процесс игры, ходы игроков.
Сам процесс игры, ходы игроков и компьютера реализованы в функции «void». Стратегия игры компьютера не идеальна, но вполне позволяет посоревноваться человеку и машине.
Так как игра пошаговая то игроки поочередно вводят координаты выстрела, после того как оба игрока совершили выстрелы, на экран выводится игровое поле с внесенными изменениями и сообщение о состоянии игры. После выстрела каждого игрока выводиться сообщение о том, было ли попадание или нет. На рисунке 2 представлен режим игры с компьютером, вводим количество лис и заполняем поле.
Ходы компьютера рассчитаны таким образом, что при попадании в пустую клетку, она помечается, и выстрелы по ней больше не производятся. Так же, если количество лис в данном столбце и строке оказывается равным нулю, то компьютер помечает все клетки в данной строке и данном столбце. Таким образом, компьютер быстро сокращает область поиска лис игрока.
Ввод координат:
printf("vvedite coord lisi protivnika "); //ввод координат
scanf("%i%i",&str,&sto); str--;sto--;
if((str<0)||(str>7)||(sto<0)||(sto>7))
{printf("\n nevernaya koordinata\n");}
else z=1;
if((z==1)&&(b[str*n+sto]!=120))
{ printf("\n vi suda yzhe strelyali\n"); z=0;}
Рисунок 2 - Режим игры с компьютером, вводим количество лис и заполняем поле
Управляющая функция «main».
Сам процесс игры будет контролировать главная функция нашей программы. В функции «main» поочередно выполняются вышеописанные функции вывода правил игры, функция заполнения игрового поля и функция контролирующая игровой процесс. На рисунке 3 изображено начало игры.
main() // главная функция
{
int a[64],i,j,n=8,kol,kol1,*c=&a[0],s=0,p,str,sto,shag=0,kol_ybit=0,kolich[64],str_y[64],sto_y[64],str_s[64],sto_s[64],strel[64],kol_strel=0;
int b[64],d[64],*dd=&d[0],w[64],*ww=&w[0],u,str1,sto1, er, par=0, per1=-1,per2=-1, par1=0, par2=0;
int *br=&b[0],ss=0, iskl[64], ii=0, parz=0,par_isk1, par_isk2,par3;
system("cls");
system("title ohota na lis v 1.0");
system("color 21");
printf("Pole na kotorom vi bydete iskat lis nahoditsya sleva a vashe pole sprava. Ydachi!\n");
system("pause");
system("cls");
time_t t;
srand(time(&t));
for(i=0;i<64;i++)
{a[i]=0;b[i]=120;d[i]=45;w[i]=0;}
}
Рисунок 3 - Начало игры
В приложении А содержится код программы, содержащий все пояснительные комментарии.
Заключение
В ходе выполнения задания на курсовую работу, были углублены знания по многим аспектам языка «Си».
Основная цель работы была выполнена, т.е. была написана пошаговая логическая игра Наборщик с псевдографическим интерфейсом.
В результате выполнения курсовой работы разработана программа на языке «Си», в текстовом редакторе «NotePad++», реализующая процесс, описанный в постановке задачи. В ходе написания игры я более подробно изучила этот язык.
В программе реализована возможность игры с компьютером, ходы компьютера осуществляются методом отличным от выбора хода случайным образом.
Считаю, что поставленная задача решена в полном объеме.
Библиографический список
1 Введение в программирование: Методические указания к лабораторным работам / Е. А. Альтман, А. В. Александров, Н. Г. Ананьева, Н. Е. Актаев; Омский гос. ун-т путей сообщения. Омск, 2011. 31 с.
2 Керниган. Б., Ритчи Д., Язык программирования «Си». 2-е издание , 2012.-304 с.
3 СТП ОмГУПС-1.2-2005
4 СТП ОмГУПС-1.2-02
Приложение А
Полный листинг программы:
include "stdio.h"
#include "stdlib.h"
#include "time.h"
int summa(int x, int y, int n, int *c) //сумма элементов в столбце и строке
{
int s=0,i,j;
for(j=0;j<n;j++)
{
s+=c[x*n+j];
}
for(i=0;i<n;i++)
{
s+=c[i*n+y];
}
if (c[x*n+y]==1) s-=1;
return s;
}
void pech_gl(int *b, int n, int *d) //вывод полей { int i,j; printf("\n"); printf(" | 1"); for(i=2;i<9;i++)printf("%5i",i); // формирование верхней строки 1го поля с указанием номеров столбцов printf("\t\t | 1"); for(i=2;i<9;i++)printf("%5i",i); // формирование верхней строки 2го поля с указание номеров столбцов printf("\n"); printf("----------------------------------------\t\t----------------------------------------\n");
// 2 строка обоих полей for(i=0;i<8;i++) { printf("%i | ",i+1); //формирование номеров строк 1го поля for(j=0;j<8;j++) //цикл обновления первого поля
if(b[i*n+j]!=120) //проверка на использование данной ячейки поля, если она не изменена (else) то печатается тот же символ "х"(он имеет код 120 если передавать в переменную типа char) if(b[i*n+j]>15) // если попал в лису то обновит поле, если нет, то покажет сколько лис по вертикале и горизонтали, относящихся к этой ячейке printf("%1c%c%i ",76,47,b[i*n+j]-20); /* выводит ячейку в которой была лиса (попадание игрока) с остатком, (L/2) число 76 - это "L", 47 - это "/". b[i*n+j]-20 показывает остаток лис, вычитается 20 так как в цикле основной программы, выигрышная комбинация была специально увеличена на 20, для реализации условия if*/ else printf("%1i ",b[i*n+j]); // выводит количество лис по вертикале и горизонтали, относящихся к этой ячейке, используется если игрок промазал else printf("%1c ",b[i*n+j]); //выводит символ "х", так как ячейка осталась нетронута printf("\t\t%i | ",i+1); // отступ для второго поля
for(j=0;j<8;j++) //цикл обновления второго поля printf("%1c ",d[i*n+j]); //выводит символы второго поля, по которому стреляет компьютер, коды символов идут в цикле выполнения хода компьютера printf("\n\n"); //новая строчка }
void ybil(int *a,int *b, int n, int str, int sto) //функция попадания в лису
{
a[str*n+sto]=0;
b[str*n+sto]+=19;
}
/*
a-массив для поля компьютера b - массив для прорисовки поля w и d аналогично для нашего поля, c,br,dd,ww соответственные к ним указатели
kol и kol1 - это оставшееся количество лис для нас и компьютера соответственно
i,j переменные для циклов, n - количество элементов в строке, p - переменная для заполнения поля компьютера str и sto - переменные которые соответствуют номеру
строки и столбца для нашего ввода, str1 и sto2 аналогично только для компьютера shag - количество сделанных шагов kol_ybit, kolich, str_y, sto_y -
переменные для запоминания убитых лис, делается для обновления, str_s, sto_s, strel, kol_strel - аналогично предыдущих только для стреляных клеток, где не было лис
u, par,par1,par2, parz,par_isk1,par_isk2, par3 - параметр выполнения цикла while; per1 и per2 переменные участвующие в стратегии компьютера
iskl и ii -это переменные массив исключения и его индексы
*/
main()
{
int a[64],i,j,n=8,kol,kol1,*c=&a[0],s=0,p,str,sto,shag=0,kol_ybit=0,kolich[64],str_y[64],sto_y[64],str_s[64],sto_s[64],strel[64],kol_strel=0;
int b[64],d[64],*dd=&d[0],w[64],*ww=&w[0],u,str1,sto1, er, par=0, per1=-1,per2=-1, par1=0, par2=0;
int *br=&b[0],ss=0, iskl[64], ii=0, parz=0,par_isk1, par_isk2,par3;
system("cls");
system("title ohota na lis v 1.0");
system("color 21");
printf("Pole na kotorom vi bydete iskat lis nahoditsya sleva a vashe pole sprava. Ydachi!\n");
system("pause");
system("cls");
time_t t;
srand(time(&t));
for(i=0;i<64;i++)
{a[i]=0;b[i]=120;d[i]=45;w[i]=0;}
do
{
printf("vvedite kolichestvo lis\n"); //ввод количества лис
scanf("%i",&kol); system("cls");
if((kol>64)||(kol<0)){ printf("nevernoe kolichestvo lis\n");system("pause");system("cls");}
}
while((kol>64)||(kol<0));
for(i=0;i<kol;i++)
{ s=1;
while (s!=0)
{p=rand()%64;
if(a[p]!=1)
{a[p]=1; s=0;}
}
}
u=0;
printf("rasstavte v levoe pole %i lis\n",kol);
system("pause");
while(u!=kol)
{
pech_gl(br,n,dd);
er=0;
while(er<1) //заполнение своей таблицы
{
printf("vvedite coord lisi ");
scanf("%i%i",&str1,&sto1); str1--;sto1--;
if((str1<0)||(str1>7)||(sto1<0)||(sto1>7))
{printf("\n nevernaya koordinata\n");}
else er=1;
if((er==1)&&(d[str1*n+sto1]!=45))
{ printf("\n vi suda yzhe stavili\n"); er=0;}
}
w[str1*n+sto1]=1; d[str1*n+sto1]=76;
system("cls"); u++;
}
printf("IGRA NACHINAETSYA\n");//начало игры
system("pause");
system("cls");
pech_gl(br,n,dd); kol1=kol;
int z;//параметр цикла
while((kol!=0)&&(kol1!=0))//главный цикл, завершение которого являеться завершение игры
{z=0;
while(z<1)
{
printf("vvedite coord lisi protivnika "); //ввод координат
scanf("%i%i",&str,&sto); str--;sto--;
if((str<0)||(str>7)||(sto<0)||(sto>7))
{printf("\n nevernaya koordinata\n");}
else z=1;
if((z==1)&&(b[str*n+sto]!=120))
{ printf("\n vi suda yzhe strelyali\n"); z=0;}
}
b[str*n+sto]=summa(str,sto,n,c); shag++;
if(a[str*n+sto]==1) //убийство лисы с обновлением всех полей
{ybil(c,br,n,str,sto); kol--;
kolich[kol_ybit]=str*n+sto; str_y[kol_ybit]=str; sto_y[kol_ybit]=sto;kol_ybit++; //обновление после попадания
if(kol_ybit>1) for(i=0;i<kol_ybit;i++)
{
int aa=str_y[i],bb=sto_y[i];
b[kolich[i]]=summa(aa,bb,n,c);
b[kolich[i]]+=20;
}
if(kol_strel>1) for(i=0;i<kol_strel;i++)
{
int xx=str_s[i],yy=sto_s[i];
b[strel[i]]=summa(xx,yy,n,c);
}
}
else {strel[kol_strel]=str*n+sto; str_s[kol_strel]=str; sto_s[kol_strel]=sto; kol_strel++;}//для обновления после попадания
int vv=0,ee,str_c, sto_c,ppp; // ходы компьютера + стратегия vv-параметр ee-переменая на ячейку поля str_c и sto_c строка и столбец в который стреляет
//компьютер
while(vv==0)
{ par3=0;
if(par==0)
{str_c=rand()%8;ppp=str_c;
sto_c=rand()%8;
}
else
if((par1==1)&&(per1<7))
{
per1++;
str_c=per1;
if(summa(str_c,sto_c,n,ww)==0) {par1=0; par2=1;}
}
else
if((par2==1)&&(per2<7))
{
per2++;
str_c=ppp;
sto_c=per2;
if(summa(str_c,sto_c,n,ww)==0) {par2=0; par=0;}
}
else par=0;
ee=str_c*n+sto_c;
ss=summa(str_c,sto_c,n,ww);
for(i=0;i<ii;i++)
{
if(ee==iskl[i]) par3=1; //проверка есть ли элемент в массиве исключения
}
if(par3!=1)//если есть то повторяем
{
if(ss==0) //составление таблицы исключения
{
if(parz==0)
{
for(i=0;i<8;i++)
{
iskl[ii]=str_c*n+i; ii++;
iskl[ii]=i*n+sto_c; ii++;
}
parz=1;
}
else
{
for(i=0;i<8;i++)
{
par_isk1=0;
par_isk2=0;
for(j=0;j<ii;j++)
{
if(iskl[j]==str_c*n+i) par_isk1=1;
}
if(par_isk1!=1)
{
iskl[ii]=str_c*n+i; ii++;
}
for(j=0;j<ii;j++)
{
if(iskl[j]==i*n+sto_c) par_isk2=1;
}
if(par_isk2!=1)
{
iskl[ii]=i*n+sto_c; ii++;
}
}
}
}
if((d[ee]==45)||(d[ee]==76))
if(w[ee]==1){kol1--; w[ee]=0; d[ee]=33;vv++;}
elseif(ss>0)
{
par=1; par1=1; d[ee]=120;vv++;
}
else {par==0;par1==0; per1=-1; per2=-1; d[ee]=120;vv++;}
}
}
system("cls");
printf("kol-vo shagov = %i ostalos lis sopernika = %i\t\t ostalos vashih lis =%i",shag,kol, kol1);
pech_gl(br,n,dd);
}
system("cls");if(kol==0)printf("POBEDA!!!!!!\n"); else printf("PORAZHENIE!!!!!!\n"); system("pause");//конец программы
}
Размещено на Allbest.ru
Подобные документы
Изучение существующих подходов к использованию компьютерных игр в образовательном процессе. Разработка и реализация проекта игрового обучающего приложения на мобильной платформе. Выбор платформы и средств реализации игрового обучающего приложения.
дипломная работа [3,4 M], добавлен 12.08.2017Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012Общие сведения и существующие среды реализации компьютерной игры "Лабиринт". Разработка алгоритмов в виде блок-схемы, принципы программной реализации игры. Особенности тестирования разработанного программного продукта. Аспекты эксплуатации продукта.
курсовая работа [1,4 M], добавлен 18.01.2017Определение понятия квадротомического дерева. Рассмотрение основных примеров квадродерева, его достоинств и недостатков. Визуализация квадротомированного изображения. Создание программы разбора бинарной, заполненной случайным образом, матрицы N на M.
курсовая работа [392,3 K], добавлен 09.08.2015Ознакомление с программой проведения сборки компьютера из деталей, имеющихся в базе данных. Рассмотрение правил создания иерархии классов. Описание основных методов и пользовательского интерфейса. Изучение системных требований и текстов основных классов.
курсовая работа [710,2 K], добавлен 26.07.2014Программный продукт для игры "Крестики-нолики". Описание пользовательского интерфейса. Факт базы данных, определяющий состояние счёта. Предикат изменяющий состояние игрового процесса и подсчитывающий количество занятых ячеек поля. Исходный код программы.
курсовая работа [34,6 K], добавлен 19.05.2014Обзор системного и прикладного программного обеспечения используемого в ООО "Игровые системы". Описание компьютерной сети предприятия. Разработка игрового продукта для планшетов Apple iPad. Реализация визуального интерфейса и алгоритма работы модуля.
отчет по практике [1,4 M], добавлен 18.01.2015Проект игры "Ловушка", созданный при помощи языка программирования C++. Описание заголовочных файлов. Правила и цель игры "Ловушка". Отображение движущихся объектов игры на экране с помощью заголовочного файла "gameclass.h". Описание игрового процесса.
курсовая работа [70,6 K], добавлен 14.10.2012Реализация программы для решения матричных игр. Задание матрицы игры вручную и случайным образом, нахождение оптимальных стратегий игроков итерационным и методом чистых стратегий. Проектирование и листинг программного кода, сохранение матрицы игры.
контрольная работа [716,7 K], добавлен 11.06.2011Обзор методов и средств реализации поставленной задачи. Описание компьютерной игры "Японские кроссворды". Обоснование инструментария разработки программного продукта. Алгоритмический анализ задачи. Графический интерфейс и лингвистическое обеспечение.
курсовая работа [725,4 K], добавлен 27.08.2013