Автор работы: Пользователь скрыл имя, 21 Января 2013 в 10:42, курсовая работа
В данном курсовом поекте разрабатывается игровая программа Xonix. В ходе разработки проанализирована литература в области компьютерных игр (как пользовательские обзоры, так и публикации разработчиков); проработаны источники по проектированию и программированию. Построены модели предметной области и программной системы, разработана архитектура программы и проведено кодирование на языке C++.
ВВЕДЕНИЕ
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
2. КОНСТРУКТОРСКАЯ ЧАСТЬ
2.1 Листинг программы Xonix.cpp
2.2 Листинг класса VRAG_CLS
2.3 Листинг класса MOUS_CLS
2.4 Листинг класса MESS_CLS
2.5 Листинг класса LIST_CLS
2.6 Листинг класса GERO_CLS
2.7Листинг класса BUTT_CLS
3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
ЗАКЛЮЧЕНИЕ
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ
2. КОНСТРУКТОРСКАЯ ЧАСТЬ
2.1 Листинг программы Xonix.cpp
2.2 Листинг класса VRAG_CLS
2.3 Листинг класса MOUS_CLS
2.4 Листинг класса MESS_CLS
2.5 Листинг класса LIST_CLS
2.6 Листинг класса GERO_CLS
2.7Листинг класса BUTT_CLS
3. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
ЗАКЛЮЧЕНИЕ
ВВЕДЕНИЕ
В данном курсовом поекте разрабатывается игровая программа Xonix. В ходе разработки проанализирована литература в области компьютерных игр (как пользовательские обзоры, так и публикации разработчиков); проработаны источники по проектированию и программированию. Построены модели предметной области и программной системы, разработана архитектура программы и проведено кодирование на языке C++.
В результате разработки получено устойчиво фукционирующее приложение, соответствующее заданию.
Программа-игра XONIX способствует развитию логического мышления и скорости реакции. В игре есть условия выигрыша и проигрыша, а также таблица рекордов, что вводит игрока в стремление победить и добиться определенного рекорда, чтобы быть рекордсменом.
Разработка мини игр является трудоемким процессом, помогающим усовершенствовать навыки работы в разработке приложений. Для создания мини игры необходимо продумать всевозможные компоненты игры и ее логику, а именно процесс взаимодействия игры с пользователем, условия выигрыша, фиксации результатов и т.п.
Это обеспечивает актуальность тематики.
Целью данной курсовой работы является написание полнофункционального приложения-игры, эмулирующей процесс работы мини-игры XONIX.
Объектом данной курсовой работы является процесс игры XONIX.
Предметом является логическая игра XONIX
Для достижения поставленной цели были поставлены следующие задачи:
1. Изучить предметную область игры;
2. Приобрести теоретические сведения и практические навыки по работе с языком программирования;
3. Разработать классы для проекта
4. Разработать удобный и понятный для пользователя интерфейс программы;
2.КОНСТРУКТОРСКАЯ ЧАСТЬ
Данный проект состоит непосредственно из файла проекта xonix.prj,
а также вспомогательных классов и функций.
Листинг программы
Xonix.cpp
#include <conio.h>
#include <stdio.h>
#include <bios.h>
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <dos.h>
#include <graphics.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//КЛАССЫ//
#include <c:\borland\xonix\vrag_cls.
#include <c:\borland\xonix\gero_cls.
#include <c:\borland\xonix\mous_cls.
#include <c:\borland\xonix\butt_cls.
#include <c:\borland\xonix\mess_cls.
#include <c:\borland\xonix\list_cls.
//ФУНКЦИИ//
mouse *m;
#include <c:\borland\xonix\sort_fun.
#include <c:\borland\xonix\fun_fun.cpp>
#include <c:\borland\xonix\game_fun.
void main(void)
{
if(grOk!=opengraph()) return;
///////////////заставка///////
cleardevice();
setcolor(1);
setfillstyle(1,2); bar3d(0,0,639,479,0,0); //поле
setpalette(10,2); //меняем 10 на 2
setcolor(15);settextstyle(4,0,
outtextxy(150,150,"XONIX");
vrag *v;v=NULL; v=add_vrag(v,100,109,1);
add_vrag(v,50,309 ,2);
add_vrag(v,70,309 ,3);
add_vrag(v,40,249 ,4);
add_vrag(v,210,349,1);
add_vrag(v,410,470,2);
add_vrag(v,400,109,3);
add_vrag(v,440,50 ,4);
add_vrag(v,354,350,1);
add_vrag(v,444,349,2);
add_vrag(v,333,470,3);
add_vrag(v,567,109,4);
add_vrag(v,561,50 ,1);
add_vrag(v,254,399,2);
add_vrag(v,344,349,3);
add_vrag(v,193,470,4);
add_vrag(v,197,90 ,1);
add_vrag(v,191,59 ,3);
while(!bioskey(1)) //цикл движений объектов заставки
{
delay(1);
v->pos();
}
delete(v); cleardevice();
//////////////////////////////
m=new mouse(); //объект для рабоы с мышью
button_1 *s,*e,*l,*h;
int i,k=0,key=0;
char name[15]; int level,life; long score,time; //исп для загрузки уровня
//аргументы//x,y,размер,цв.
s=new button_1 ("NEW GAME", 100,350,15,7,15,8,4); s->SHOV_PL();
l=new button_1 ("LOAD SAVE",250,350,15,7,15,8,4); l->SHOV_PL();
h=new button_1 ("info", 400,350,15,7,15,8,4); h->SHOV_PL();
e=new button_1 ("exit", 550,350,15,7,15,8,4); e->SHOV_PL();
while(bioskey(1)) getch(); //очистим буфер клавиатуры
setcolor(15);settextstyle(4,0,
outtextxy(100,120,"XONIX");
m->MOUSEshov(); //показать стрелку мыши
for(;k==0;) //цикл опроса кнопок
{
switch(s->BUT_STATUS(m)) //опрос кнопки "start"
{
case 0:break;
case 1:
case 7181: m->MOUSEhide();
GAME_FUN("unknown",1,skill(),
setcolor(15);settextstyle(4,0,
outtextxy(100,120,"XONIX");
e->SHOV_PL(); //показать кнопки в обратном порядке
h->SHOV_PL();
l->SHOV_PL();
s->SHOV_PL();
m->MOUSEshov();
break;
case 283: k=1;break;
default:m->MOUSEset(l->x,l->y)
break;
}
switch(l->BUT_STATUS(m)) //опрос кнопки "load"
{
case 0:break;
case 1:
case 7181:m->MOUSEhide();
cleardevice();
if(1==open(name,&level,&life,&
GAME_FUN(name,level,life,
setcolor(15);settextstyle(4,0,
outtextxy(100,120,"XONIX");
e->SHOV_PL();
s->SHOV_PL();
h->SHOV_PL();
l->SHOV_PL();
m->MOUSEshov();
break;
case 283: k=1;break;
default:m->MOUSEset(h->x,h->y)
break;
}
switch(h->BUT_STATUS(m)) //опрос кнопки "info"
{
case 0:break;
case 1:
case 7181: m->MOUSEhide();
cleardevice();
settextstyle(1,0,3);
for(i=8;;)
{
setcolor(i);
outtextxy(190,100,"КУРСОВОЙ ПРОЕКТ");
delay(100);
outtextxy(60,120,"по предмету Программирование на тему: игра XONIX");
delay(100);
outtextxy(30,140,"студента 1-го курса гр.3-11ИВТ2 БГТУ");
delay(100);
outtextxy(170,160,"
delay(100);
outtextxy(100,180,"Арсюкова Василия Николаевича.");
delay(100);
outtextxy(80,400,"г.Брянск 2012. ");
delay(100);
if(i==15)break;
if(i==7)i=15;
if(i==8)i=7;
}
e->SHOV_PL();
while(bioskey(1)) getch(); //очистим буфер клавиатуры
m->MOUSEshov();
for(i=0;i<1;)
{
switch(e->BUT_STATUS(m)) //опрос кнопки "exit"
{
case 0: break;
default: m->MOUSEhide();
cleardevice();
setcolor(15);settextstyle(4,0,
outtextxy(100,120,"XONIX");
s->SHOV_PL();
l->SHOV_PL();
h->SHOV_PL();
e->SHOV_PL();
m->MOUSEshov();
i=1; //выход из цикла опроса "exit"
}
if(bioskey(1)) //опрос клавиши
{
bioskey(0);
m->MOUSEhide();
cleardevice();
setcolor(15);settextstyle(4,0,
outtextxy(100,120,"XONIX");
s->SHOV_PL();
l->SHOV_PL();
h->SHOV_PL();
e->SHOV_PL();
m->MOUSEshov();
i=1;
}
}
break;
case 283: k=1; break; //esc
default:m->MOUSEset(e->x,e->y)
break;
}
switch(e->BUT_STATUS(m)) //опрос кнопки "exit"
{
case 0: break;
case 1:
case 7181:
case 283: k=1; break;
default: m->MOUSEset(s->x,s->y);
break;
}
if(bioskey(1)) //опрос клавиши esc
{
key=bioskey(0);
switch(key)
{
case 283: k=1;break;
default : m->MOUSEset(s->x,s->y);
}
}
};//f конец цикла опроса кнопок
m->MOUSEhide();
cleardevice();
setcolor(1); settextstyle(1,0,3);
outtextxy(220,400,"г.Брянск 2012. БГТУ");
delay(2000);
closegraph();
delete(m);delete(s);delete(e);
return;
}
Листинг класса
VRAG_CLS
class vrag
{
void *temp,*img; //указатель на память
int color_s;
public:
int x,y,di; //координаты
vrag *next; //указатель на следующий объект
vrag(int a,int b,int c) //конструктор
{
x=a;
y=b;
di=c;
next=NULL;
unsigned int size; //содержит размер изображения
size=imagesize(x-4,y-4,x+4,y+
color_s=getpixel(x,y);
if(color_s==1)
{
temp=malloc(size); //выделить память под изоброжения
img=malloc(size);
getimage(x-4,y-4,x+4,y+4,temp)
setcolor(5);
circle(x,y,4);
setfillstyle(1,13); floodfill(x,y,5);
getimage(x-4,y-4,x+4,y+4,img); //запомнить образ врага
}
else
{
temp=malloc(size);
img=malloc(size);
getimage(x-4,y-4,x+4,y+4,temp)
setcolor(10);
bar3d(x-4,y-4,x+4,y+4,0,0);
setcolor(15);
circle(x,y,4);
setcolor(7);
circle(x,y,3);
setfillstyle(1,14); floodfill(x,y,7);
getimage(x-4,y-4,x+4,y+4,img);
}
}
~vrag(void)
{
free(temp);
free(img );
if(next) delete(next); //удаляет всех врагов
}
int vrag::pos(void); //измнть позицию объкта
void vrag::VRAG_HIDE(void); //стереть
void vrag::VRAG_SHOV(void); //покозать
void vrag::VRAG_LYAP(int color);//закрасить
};
void vrag::VRAG_HIDE(void)
{
putimage(x-4,y-4,temp,0); //рисуем почву по старым координатам
};
void vrag::VRAG_SHOV(void)
{
getimage(x-4,y-4,x+4,y+4,temp)
putimage(x-4,y-4,img,0);
};
void vrag::VRAG_LYAP(int color)
{
if(color_s==2) //если создан на зелени то может закрашивать свою область
{
setfillstyle(1,color); floodfill(x,y,BLUE); //враг закрашивает под собой
}
if(next) next->VRAG_LYAP(color);
}
int vrag::pos(void) //измнть позицию объкта
{
VRAG_HIDE();
switch(di)
{
case 1:if(getpixel(x,y+6)!=color_s)
{
if((getpixel(x,y+6)==0)||(
di=4;
break;
}
if(getpixel(x-6,y)!=color_s)
{
if((getpixel(x-6,y)==0)||(
di=2;
break;
}
if(getpixel(x-5,y+5)!=color_s)
{
if((getpixel(x-5,y+5)==0)||(
di=3;
break;
}
x--;
y++;
break;
case 2:if(getpixel(x,y+6)!=color_s)
{
if((getpixel(x,y+6)==0)||(
di=3;
break;
}
if(getpixel(x+6,y)!=color_s)
{
if((getpixel(x+6,y)==0)||(
di=1;
break;
}
if(getpixel(x+5,y+5)!=color_s)
{
if((getpixel(x+5,y+5)==0)||(
di=4;
}
x++;
y++;
break;
//
case 3:if(getpixel(x,y-6)!=color_s)
{
if((getpixel(x,y-6)==0)||(
di=2;
break;
}
if(getpixel(x+6,y)!=color_s)
{
if((getpixel(x+6,y)==0)||(
di=4;
break;
}
if(getpixel(x+5,y-5)!=color_s)
{
if((getpixel(x+5,y-5)==0)||(
di=1;
break;
}
x++;
y--;
break;
case 4:if(getpixel(x-6,y) !=color_s)
{
if((getpixel(x-6,y)==0)||(
di=3;
break;
}
if(getpixel(x,y-6) !=color_s)
{
if((getpixel(x,y-6)==0)||(
di=1;
break;
}
if(getpixel(x-5,y-5)!=color_s)
{
if((getpixel(x-5,y-5)==0)||(
di=2;
break;
}
x--;
y--;
break;
};
if(next)
{
VRAG_SHOV();
return next->pos();
}
VRAG_SHOV();
return 0; //шаг успешный
}
Листинг класса
MOUS_CLS
class mouse
{
union REGS inregs, outregs;
public:
int x,y,buttons;
mouse()
{
inregs.x.ax = 0x00; // подфункция 0 - инициализация
int86(0x33, &inregs, &outregs);
}; //0x33 номер прерывания мыши.
void MOUSEshov()
{
inregs.x.ax = 0x01; // подфункция 1 - показать курсор
int86(0x33, &inregs, &outregs);
};
void MOUSEhide()
{
inregs.x.ax = 0x02; //УБРАТЬ КУРСОР;
int86(0x33, &inregs, &outregs);
}
void MOUSEstatus()
{
inregs.x.ax = 0x03; // подфункция 3 - получить статус мыши
int86(0x33, &inregs, &outregs);
x=outregs.x.cx; //извлечь информацию
y=outregs.x.dx;
buttons=outregs.x.bx;
}
void MOUSEset(int x,int y)
{
inregs.x.ax=0x04;
inregs.x.cx=x;
inregs.x.dx=y;
int86(0x33,&inregs, &outregs);
}
};
Листинг класса
MESS_CLS
class message
{
int x,y,key;
unsigned int size;
void *image;
button_1 *button;
char text[20],text1[20];
public:
message(int a,int b,char *t,char *t1)
{
x=a;
y=b;
strcpy(text,t);
strcpy(text1,t1);
button=new button_1 ("",x,y+20,18,5,3,15,4);
size=imagesize(x-91,y-61,x+91,
image=malloc(size);
}
~message()
{
delete(button);
free(image);
}
int shov(void)
{
getimage(x-91,y-61,x+91,y+61,
setcolor(15); setfillstyle(1,0);
for(key=0;key<61;key++)
{
bar3d(x-90,y-key,x+90,y+key,0,
delay(5);
}
setcolor(7);
rectangle(x-91,y-61,x+91,y+61)
setcolor(15);
settextstyle(1,0,2); outtextxy(x-6*strlen(text)-4,