i2=630;//Позиiя прямокутника 2го гравця по осi X
j2=205;//Початкова позиiя 2го гравця по осi Y
i=320;//Початкове положення
j=240;// плями А
spot A(i,j,3); // Створюеться невидима пляма А
spot P1(i1,j1,50);// Створюеться невидимий прямокутник 1го гравця
spot P2(i2,j2,50);// Прямокутник 2го гравця
randomize();
A.show(); // Виведення плями А на екранi
P1.showr();//Виведення прямокутника 1го гравця на екран
P2.showr();//Виведення прямокутника 2го гравця на екран
setcolor(BLUE);
outtextxy(10,450,"Гравець 1");
outtextxy(10,460,"Score:");//Виведення рахунку для 1го гравця
itoa(p1,s1,10);//Переведення рахунку в строковий параметр
outtextxy(60,460,s1);//Виведення рахунку на екран
setcolor(RED);
outtextxy(550,450,"Гравець 2");
outtextxy(550,460,"Score:");//Виведення рахунку для 2го гравця
itoa(p2,s2,10);
outtextxy(600,460,s2);
setcolor(GREEN);
line(320,0,320,480);
do
//Визначення поведiнки плями А и ii взаемозалеж. з границями екрану
{
if((dv==2)&&(j-1<=5))dv=1;//Вiдбиття вiд
if((dv==4)&&(j-1<=5))dv=3;//верхньоi границi екрану
if((dv==1)&&(j+1>=475))dv=2;//Вiдбиття вiд
if((dv==3)&&(j+1>=475))dv=4;//нижньоi границi екрану
if((i-1<=i1+5)&&(j>=j1-3)&&(j<=j1+55))//Якщо пляма потрапляе в область
//прямокутника 1го гравця
{
if(dv==3)dv=1; //Вiдбиття вiд
if(dv==4)dv=2; //прямокутника 1го гравця
}
if(i-1<=5)//Якщо пляма не влучила в прямокутник 1го гравця
{
dv=5; //зупинити рух плями А
setcolor(BLACK);
outtextxy(600,460,s2);//Замалювати текст попереднього рахунку
setcolor(RED);
p2++;
itoa(p2,s2,10);
outtextxy(600,460,s2);//Виведення нового рахунку на екран
kol--;//Зменшити змiнну кiлькостi iгор
i=320; //Помiстити
j=240; //пляму А в
A.move(i,j); //середину екрану
if(kol==0)ch=27;//Якщо число iгор рiвне 0, вийти
}
if((i+1>=i2-5)&&(j>=j2-3)&&(j<=j2+55))//Спiвставлення прямокутника
//2го гравця та плями А
{
if(dv==1)dv=3; //Вiдбиття руху
if(dv==2)dv=4; //вiд прямокутника 2го граця
}
if(i+1>=640)
{
dv=5;
setcolor(BLACK);
outtextxy(60,460,s1);
setcolor(BLUE);
p1++;
itoa(p1,s1,10);
outtextxy(60,460,s1);//Вивiд на екран змiненого рахунку
kol--;//Зменшення кiлькостi iгор
i=320; //Повернення
j=240; //плями А
A.move(i,j); //в центр екрану
if(kol==0)ch=27;//Якщо уci iгри зiгранi - вихiд
}
switch(dv)//Змiнa руху плями А
{//вiдносно заданого напряму
case 1: i+=1;j+=1;break;
case 2: i+=1;j-=1;break;
case 3: i-=1;j+=1;break;
case 4: i-=1;j-=1;break;
Default: break;
}
A.move(i,j);// Перемiстити пляму A
if(kbhit())//Якщо натиснута клавiша
{
ch=getch();//Запам'ятати код натиснутоi клавiшi
//Гравець 1 може рухати лише якщо пляма А
if((dv==3)||(dv==4)){// рухаеться в його сторону
if((ch==119)&&(j1-5>=5))j1-=5;//при натисненнi клавiшi W, змiнити
//координаты
if((ch==115)&&(j1+5<=425))j1+=5;//при натисненнi клавiшi S
//змiнити координати
}
//Гравець 2 може рухати лише якщо пляма А
if((dv==1)||(dv==2)){//рухаеться в його сторону
if((ch==72)&&(j2-5>=5))j2-=5;//вверх
if((ch==80)&&(j2+5<=425))j2+=5;//вниз
}
if ((ch==13)&&(dv==5))dv=random(4)+1;//Якщо натиснутий Enter i
//пляма А без руху, змiнити рух плями
P1.mover(i1,j1);//Показати на екранi нове положення 1го прямокутника
P2.mover(i2,j2);//Показати на екранi нове положення 2го прямокутника
}
delay(5*sc);//Затримка при перемiщеннi плями А
}
while(ch!=27);//Вихiд iз циклу при натисненнi Esc
setcolor(LIGHTGREEN);
if(p1>p2)outtextxy(260,200,"Гравець 1 перемiг!");
if(p2>p1)outtextxy(260,200,"Гравець 2 перемiг!");
outtextxy(260,150,"<<<GAME OVER>>>");
delay(3000);
cleardevice();
} }
short menu()//функцiя для виводу головного меню i вибору подальших дiй
{
int x,y,i,key;
x=212;y=77;
setcolor(BLUE);
setlinestyle(0,0,3);
rectangle(x,y,x+221,y+86);
rectangle(x+3,y+3,x+221-3,y+86-3);
circle(x+25,y+43,10);
settextstyle(0,HORIZ_DIR,2);
outtextxy(x+43,y+38,"Нова гра");
outtextxy(x+44 ,y+39,"Нова гра");
y=y+90;
rectangle(x,y,x+221,y+86);
rectangle(x+3,y+3,x+221-3,y+86-3);
circle(x+25,y+43,10);
outtextxy(x+43,y+38,"Допомога");
outtextxy(x+44 ,y+39,"Допомога");
y=y+90;
rectangle(x,y,x+221,y+86);
rectangle(x+3,y+3,x+221-3,y+86-3);
circle(x+25,y+43,10);
outtextxy(x+43,y+38,"Про автора");
outtextxy(x+44 ,y+39,"Про автора");
y=y+90;
rectangle(x,y,x+221,y+86);
rectangle(x+3,y+3,x+221-3,y+86-3);
circle(x+25,y+43,10);
outtextxy(x+43,y+38,"Вихiд");
outtextxy(x+44 ,y+39,"Вихiд");
x=212;y=120;i=0;
setfillstyle(1,4);
setlinestyle(0,0,0);
setcolor(4);
circle(x+24,y+i*90,9);
floodfill(x+24,y+i*90,4);
while(!kbhit())
{
key=getch();if(key==13) break;//вихiд з функцii
key=getch();
//управлiння клавiшами курсора
switch(key)
{
case 72:
i--;
if(i<0) i=3;
setfillstyle(1,4);
setcolor(4);
circle(x+24,y+i*90,9);
floodfill(x+24,y+i*90,4);
setfillstyle(1,0);
setcolor(0);
if(i==3){circle(x+24,y,9);
floodfill(x+24,y,0);}
else {circle(x+24,y+(i+1)*90,9);
floodfill(x+24,y+(i+1)*90,0);}
break;
case 80:
i++;
if(i>3)i=0;
setfillstyle(1,4);
setcolor(4);
circle(x+24,y+i*90,9);
floodfill(x+24,y+i*90,4);
setfillstyle(1,0);
setcolor(0);
if(i==0){
circle(x+24,y+3*90,9);
floodfill(x+24,y+3*90,0);}
else {circle(x+24,y+(i-1)*90,9);
floodfill(x+24,y+(i-1)*90,0);}
break;
}
}
setlinestyle(0,0,0);
settextstyle(0,HORIZ_DIR,0);
setcolor(15);
setfillstyle(0,14);
cleardevice();
switch(i)
{
case 0:new_game();cleardevice();menu();break;
case 1:help();cleardevice();menu();break;
case 2:about();cleardevice();menu();break;
case 3:break;
}
return i;
}
void main ()
{
int dr=DETECT,mod;
initgraph(&dr,&mod,"");
menu();
closegraph();
}
Додаток Б: