Программа "Наборщик"

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

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

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