Игра Хonix
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
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,
settextstyle(0,0,1);
strcpy(button->text,text1);
button->SHOV_PL();
while(bioskey(1)) getch(); //очистим буфер клавиатуры
m->MOUSEshov();
while(0==button->BUT_STATUS(m)
{ //курсор не над кнопкой
if(bioskey(1)) //если нажали клавишу
{ //определяем какую
key=bioskey(0);
if(283 ==key) //esc
{
m->MOUSEhide();
hide();
return 0;
}
if(7181==key) //enter
{
m->MOUSEhide();
hide();
return 1; //от сообщения -> нажали кнопку
}
}
}
m->MOUSEhide();
hide();
return 1;
}
void TEXTS(char *a,char *b)
{
strcpy(text,a);
strcpy(text1,b);
}
void hide(void)
{
putimage(x-91,y-61,image,0);
}
};
Листинг класса
LIST_CLS
class list
{
public:
char name[15];
int level,life,act;
long score,time;
list *next;
list(list *j,char *name_,int *level_,int *life_,long *score_,long *time_)
{
strcpy(name,name_);
level=*level_;
life =*life_;
score=*score_;
time =*time_;
act=0;
next=j;
}
// Деструктурируем
~list()
{
if(next) delete(next);
}
void out(int x,int y)
{
gotoxy(x,y);
cout<<setw(15)<<setfill(' ')<<setiosflags(ios::left )<<name
<<setw(3) <<setfill(' ')<<setiosflags(ios::right)<<
<<setw(2) <<setfill(' ')<<setiosflags(ios::right)<<
<<setw(2) <<setfill('0')<<setiosflags(
<<setw(2) <<setfill('0')<<setiosflags(
<<setw(17) <<setfill(' ')<<setiosflags(ios::right)<<
if(act)//рисуем активность
{
setcolor(14);
rectangle(x*8-14, y*16-16, (x*8-13)+(53*8+6+8), (y*16-18)+16);
}
else //стираем активность
{
setcolor(0);
rectangle(x*8-14, y*16-16, (x*8-13)+(53*8+6+8), (y*16-18)+16);
}
}
void outset(int x,int y,int n,int m)
{
list *t; t=this;
int i;
for(i=1;i<n;i++)
{
if(!t->next) break;//если следующего нет то выходим
t=t->next; //следующий
}
for(i=0;i<m;i++)
{
t->out(x,y+i); //вывод
t=t->next;
if(!t) break;
}
setcolor(9);
rectangle(x*8-16, y*16-19, (x*8-13)+(53*8+6+10), (y*16-18)+(16*m+3));
setcolor(1);
rectangle(x*8-17, y*16-20, (x*8-13)+(53*8+6+11), (y*16-18)+(16*m+4));
}
};
Листинг класса
GERO_CLS
class geroi
{
void *temp,*image; //указатель на временную память,на изобр.героя
public:
int x,y,
t1_x/*наличие цели закраски*/,key,key0,flag;/*
char name[15];
long score,cur_time;
geroi(char *n,int a,int b) //конструктор
{
x=a; y=b; key=0; flag=0; score=0; s=0; cur_time=0; t1_x=0;
strcpy(name,n);
unsigned int size; //содержит размер изображения
size =imagesize(x-5,y-5,x+5,y+5); //размер
temp =malloc(size); //выделить память под изоброжения
image=malloc(size);
getimage(x-5,y-5,x+5,y+5,temp)
setcolor(2);setfillstyle(1,0);
line(x-5,y-5,x-1,y-1); line(x+1,y+1,x+5,y+5);
line(x-5,y+5,x-1,y+1); line(x+1,y-1,x+5,y-5);
sector(x+1,y-1,0,90,3,3);
sector(x-1,y-1,90,180,3,3);
sector(x-1,y+1,180,270,3,3);
sector(x+1,y+1,270,360,3,3);
getimage(x-5,y-5,x+5,y+5,
putimage(x-5,y-5,temp,0);
}
~geroi(void) //деструктор
{
free(temp);
free(image);
}
void RESET() //устанавливает исходное состояние объекта
{
x=8; y=240;
score=0; s=0; flag=0; t1_x=0; cur_time=0;// sTemp=0;
}
void geroi::pos(int n); //измнть позицию объкта
void geroi::GERO_HIDE(void); //стереть
void geroi::GERO_SHOV(void); //покозать
int geroi::GERO_FUN(vrag *v); //обработка героя
int geroi::SQUARE(); //считает площадь,вычисляет очки
void geroi::input_name(void); //запрашивает имя игрока
void geroi::out_time(void); //считает время
};
void geroi::pos(int n)
{
GERO_HIDE(); //стереть объект
if((n==1)&&(y<471)) y++; //вниз //
if((n==2)&&(y> 8)) y--; //вверх 13 //изменяем координаты
if((n==3)&&(x<492)) x++; //вправо //
if((n==4)&&(x> 8)) x--; //влево //
GERO_SHOV(); //нарисовать объект
};
void geroi::GERO_HIDE(void)
{
putimage(x-5,y-5,temp,3); //рисуем почву по старым координатам
}; //3 - чтобы небыло конфликта с белыми
void geroi::GERO_SHOV(void)
{
getimage(x-5,y-5,x+5,y+5,temp)
putimage(x-5,y-5,image,2); //2-позволяет быть невидемым на зелюном цвете
delay(1);
};
int geroi::GERO_FUN(vrag *v)
{
static int t1_y=0,
t2_x=0,t2_y=0;
if(bioskey(1))
key0=bioskey(0);
switch(key0)
{
case 283:key0=key;//чтобы после исчезновения сообщения герой продожал двигатся
return 3; //esc
case 8051:key0=key;//'s'
return 4;
}
if(flag) //защита от реверсивного наезда на хвост
{
switch(key0)
{
case 18432: if(key!=20480)
key=key0;
break;
case 20480: if(key!=18432)
key=key0;
break;
case 19712: if(key!=19200) //если не едем в лево
key=key0; //то можно ехать вправо
break;
case 19200: if(key!=19712) //если не едем в право
key=key0; //то можно ехать влево
break;
}
}
else
key=key0;
switch(key)
{
case 18432: pos(2); //команда - вверх
switch(getpixel(x,y)) //АНАЛИЗ ПОЧВЫ :)
{
case GREEN: putpixel(x,y,0); //ставим точку
if(!flag) flag=1; //пилим
if(getpixel(x-1,y)==GREEN && //если по сторонам зелёные точки
getpixel(x+1,y)==GREEN && !t1_x)
{
t1_x=x-1; t1_y=y; //устанавливаем цель
t2_x=x+1; t2_y=y;
}
else
{
if( (getpixel(t1_x,t1_y)!=2) ||
(getpixel(t2_x,t2_y)!=2) )
t1_x=0;
}
break;
case 0: t1_x=0;flag=0; return 1; //наехал на свой след
case BLUE: if(t1_x && flag) //съезд с зелёного на синий при условии что цель закраски создана
{
GERO_HIDE();
setfillstyle(1,BLUE); floodfill(x,y+1,GREEN);//
v->VRAG_LYAP(10);
if(getpixel(t1_x,t1_y)==2) //закршиваем зелёные области
{
setfillstyle(1,BLUE); floodfill(t1_x,t1_y,BLUE);
}
if(getpixel(t2_x,t2_y)==2)
{
setfillstyle(1,BLUE); floodfill(t2_x,t2_y,BLUE);
}
v->VRAG_LYAP(2);
if(SQUARE()==1)
{
GERO_SHOV();
key0=0;
t1_x=0;flag=0; //закончили
return 2;
}
GERO_SHOV();
t1_x=0;flag=0; //закончили
}
else //съезд с зелёного на синий при условии что цель закраски не создана
if(flag) //необходимо закрасить след
{
GERO_HIDE();
setfillstyle(1,BLUE);
GERO_SHOV();
flag=0;
}
break;
};
break;
case 20480: pos(1); //вниз
switch(getpixel(x,y)) //АНАЛИЗ ПОЧВЫ
{
case GREEN: putpixel(x,y,0); //ставим след
if(!flag) flag=1;
if(getpixel(x-1,y)==GREEN && //если по сторонам зелёные точки
getpixel(x+1,y)==GREEN && !t1_x)
{
t1_x=x-1; t1_y=y; //устанавливаем цель
t2_x=x+1; t2_y=y;
}
else
{
if( (getpixel(t1_x,t1_y)!=2) || (getpixel(t2_x,t2_y)!=2) ) t1_x=0;
}
break;
case 0: t1_x=0;flag=0; return 1; //наехал на свой след
case BLUE: if(t1_x && flag) //съехал с синего
{
GERO_HIDE();
setfillstyle(1,BLUE); floodfill(x,y-1,GREEN);//
v->VRAG_LYAP(10);
if(getpixel(t1_x,t1_y)==
{
setfillstyle(1,BLUE); floodfill(t1_x,t1_y,BLUE);
}
if(getpixel(t2_x,t2_y)==
{
setfillstyle(1,BLUE); floodfill(t2_x,t2_y,BLUE);
}
v->VRAG_LYAP(2);
if(SQUARE()==1)
{
GERO_SHOV();
key0=0;
t1_x=0;flag=0; //закончили
return 2;
}
GERO_SHOV();
t1_x=0;flag=0;
}
else
if(flag)
{
GERO_HIDE();
setfillstyle(1,BLUE);
GERO_SHOV();
flag=0;
}
break;
}
break;
case 19712: pos(3); //вправо
switch(getpixel(x,y))
{
case GREEN:putpixel(x,y,0); //ставим красую точку
if(!flag) flag=1;
if(getpixel(x,y-1)==GREEN && //если по сторонам синие точки
getpixel(x,y+1)==GREEN && !t1_x) //&& )!t1_x) //и цель закраски не установлена то
{
t1_x=x; t1_y=y-1;//устанавливаем цель
t2_x=x; t2_y=y+1;
}
else
{
if( (getpixel(t1_x,t1_y)!=2) || (getpixel(t2_x,t2_y)!=2) ) t1_x=0;
}
break;
case 0:t1_x=0;flag=0; return 1; //наехал на свой след
case BLUE:if(t1_x && flag) //при условии что цель закраски создана
{
GERO_HIDE();
setfillstyle(1,BLUE);
v->VRAG_LYAP(10);
if(getpixel(t1_x,t1_y)==GREEN) //
{
setfillstyle(1,BLUE); floodfill(t1_x,t1_y,BLUE);
}
if(getpixel(t2_x,t2_y)==GREEN)
{
setfillstyle(1,BLUE); floodfill(t2_x,t2_y,BLUE);
}
v->VRAG_LYAP(2);
if(SQUARE()==1)
{
GERO_SHOV();
key0=0;
t1_x=0;flag=0; //закончили
return 2;
}
GERO_SHOV();
t1_x=0;flag=0;
}
else
if(flag)
{
GERO_HIDE();
setfillstyle(1,BLUE);
GERO_SHOV();
flag=0;
}
break;
}
break;
case 19200: pos(4); //влево
switch(getpixel(x,y))
{
case GREEN:putpixel(x,y,0); //ставим красую точку
if(!flag) flag=1;
if(getpixel(x,y-1)==GREEN && //если по сторонам зелёные точки
getpixel(x,y+1)==GREEN && !t1_x)
{
t1_x=x; t1_y=y-1; //устанавливаем цель
t2_x=x; t2_y=y+1;
}
else
{
if( (getpixel(t1_x,t1_y)!=2) || (getpixel(t2_x,t2_y)!=2) ) t1_x=0;
}
break;
case 0:t1_x=0;flag=0;return 1; //наехал на свой след
case BLUE:if(t1_x && flag) //при условии что цель закраски создана
{
GERO_HIDE();
setfillstyle(1,BLUE); floodfill(x+1,y,GREEN);//
v->VRAG_LYAP(10);
if(getpixel(t1_x,t1_y)==GREEN)
{
setfillstyle(1,BLUE); floodfill(t1_x,t1_y,BLUE);
}
if(getpixel(t2_x,t2_y)==GREEN)
{
setfillstyle(1,BLUE); floodfill(t2_x,t2_y,BLUE);
}
v->VRAG_LYAP(2);
if(SQUARE()==1)
{
GERO_SHOV();
key0=0;
t1_x=0;flag=0; //закончили
return 2;
}
GERO_SHOV();
t1_x=0; flag=0;
}
else
if(flag)
{
GERO_HIDE();
setfillstyle(1,BLUE);
GERO_SHOV();
flag=0;
}
break;
}
break;
}
return 0;
};
int geroi::SQUARE()
{
static int i,j;
static long sTemp=0;
for(i=18;i<482;i=i+20)
{
for(j=18;j<462;j=j+20)
if(getpixel(i,j)==BLUE) sTemp++; //сколько отрезано на данный момент
}
score=score+(sTemp-s)*(sTemp-
s=sTemp; // s-сколько было отрезано в прошлый раз 551 - вся площадь
//обновим поле прогресса
setcolor(5);
setfillstyle(1,11); bar(511,429, 511+(123*sTemp/51)/10 ,447);
if(sTemp>510) //предел
{
sTemp=0;
return 1; //complete
}
sTemp=0;
gotoxy(65,19); cout<<setw(15)<<setfill(' ')<<setiosflags(ios::right)
<<score;
return 0;
}
void geroi::input_name(void)
{
char text[]="YOUR NAME ?";
int i, x=320,y=240;
float j;
setcolor(15); setfillstyle(1,1);
for(j=0;j<61;j++)
{
bar3d(x-j*1.5,y-j,x+j*1.5,y+j,
delay(9);
}
settextstyle(1,0,2); outtextxy(x-6*strlen(text)-4,
settextstyle(0,0,1);
gotoxy((x-60)/8,(y+30)/16);
cout<<"Name: ";
*(name)='\0';
for(i=0;;i++)
{
if(i<13) //не более 13 букв
{
*(name+i)=getch();
*(name+i+1)='\0';
if(8==*(name+i)) //есил нажали кнопку назад
{
if(i)
{
i--;
*(name+i) =' ';
*(name+i+1)='\0';
i--;
}
else //если нулевой символ "назад"
{
*(name+i) ='\0'; //то стереть его
i--;
}
}
if(13==*(name+i)) //есил нажали кнопку ENTER
{
*(name+i)='\0';
if(i>0) break;
i--;
}
}
else
{
if(8==getch())
{
i--; *(name+i)=' ';
}
i--;
}
gotoxy(((x-60)/8), (y+30)/16); cout<<"Name:"<<name;
}
}//кон функции
void geroi::out_time(void)
{
static long temp,ntime;
time(&ntime);
if(temp!=ntime) cur_time++;
temp=ntime;
gotoxy(66,23); cout<<setw(2)<<setfill('0')<<
<<cur_time/60<<" min."
<<setw(2)<<setfill('0')<<
<<cur_time%60<<" sec.";
}
Листинг класса
BUTT_CLS
class button_1 // клас кнопка
{
int key,size,color_bar,color_act_
public:
int x,y;
char text[15];
button_1(char *t,int x0,int y0,int size_,int color_bar_, int color_act_bar_,
int color_text_,int color_act_text_) //конструктор
{
strcpy(text,t); //устанавливаем текст кнопки
x=x0;
y=y0; //координаты
size=size_;
color_bar =color_bar_;
color_act_bar =color_act_bar_;
color_text =color_text_;
color_act_text=color_act_text_
}
int BUT_STATUS(mouse *m) //прин. ук. на объект мыыши возвр 1 если мышь над кнопкой
{
m->MOUSEstatus();
if( (m->x) > (x-3*size) && (m->x) < (x+3*size) //если на територии кнопки b
&& (m->y) > (y-size) && (m->y) < (y+size) ) //3- отношене 3:1
{//стрелка над кнопкой - увеличиваем кнопку
size=size+1;
m->MOUSEhide();
SHOV_ACT();
m->MOUSEshov();
delay(40);
size=size+1;
m->MOUSEhide();
SHOV_ACT();
m->MOUSEshov();
while( (m->x) > (x-3*size) && (m->x) < (x+3*size)
&& (m->y) > (y-size) && (m->y) < (y+size) ) //ждём нажаия кнопки пока стрелка над кнопкой
{
m->MOUSEstatus();
if(m->buttons==1) //проверяем нажатия левой
{
m->MOUSEhide();
BUT_HIDE();
size=size-2; // восоновим размер по нажатию
SHOV();
m->MOUSEshov();
while(m->buttons==1) //пока не отпустил
m->MOUSEstatus(); //проверяем не отпустил ли
return 1; //выход на кнопку нажали
};
if(bioskey(1))
{
key=bioskey(0);
m->MOUSEhide();
BUT_HIDE();
size=size-2; // восоновим размер по нажатию
SHOV();
m->MOUSEshov();
return key;
}
};
//востанавливаем размер после съезда с кнопки за два захода
m->MOUSEhide();
BUT_HIDE();
size=size-1;
SHOV();
m->MOUSEshov();
delay(40);
m->MOUSEhide();
BUT_HIDE();
size=size-1;
SHOV();
m->MOUSEshov();
return 0; //просто съехали с кнопки

- Игристые виноградные вина
- Игристые виноградные вина. Товароведная характеристика шампанского. Экспертиза качества
- Игр как основной способ приобщения детей к английскому языку
- Игровая активность дошкольников и их статус в группе
- Игровая активность дошкольников и их статус в группе
- Игровая деятельность в младшем школьном возрасте
- Игровая деятельность в образовательном процессе
- Игра на уроках иностранного языка
- Игра на уроках словесности
- Игра на уроке истории и обществознания
- Игра «Пятнашки»
- Игра слов в произведениях Л. Кэрролла "Приключения Алисы в стране чудес" и "Алиса в зазеркалье" и их переводах на русский и немецкий я
- Игра слов как переводческая проблема
- Игра – форма организации коллектива детей