| Назва: | Розробка гри “Відбивання кульки” |
| Тип: | Реферати |
| Мова: | Українська |
| Розмiр: | 94,12 KB |
| Скачувань: | 27 |
putimage(x-rad,y-rad,pspot,XOR_PUT);
vis=1;
}
// Описання функцii прибирання плями з екрану
void hide()
{
// Вихiд, якщо немае чого прибирати
if (!vis) return;
// Iнакше,стерти зображення з екрану:
putimage(x-rad,y-rad,pspot,XOR_PUT);
// вводимо ознаку очистки екрану
vis=0;
}
// Перемiстити зображення:
void move(int xn, int yn)
{
hide(); // Прибрати старе зображення з екрану
// Змiнити координати центру плями:
x=xn; y=yn;
show(); // Вивести зображення в новому мiсцi
}
void hider()//Процедура стирання прямокутника
{
// Вихiд, якщо немае що прибирати
if (!vis) return;
// Инакше стерти зображення з екрану:
putimage(x,y,pspot,XOR_PUT);
// взвожу ознаку очистки екрану
vis=0;
}
void mover(int xn,int yn)//Процедура переносу прямокутника
{
hider();
x=xn;y=yn;
showr();
}
void showr ()//Процедура малювання прямокутника
{ // Якщо бiтового образу НЕМАЕ в пам'ятi:
if (!tag)
{ // Намалювати поточним кольором на екранi
// прямокутник в заданому мicцi:
rectangle(x,y,x+5,y+rad);
// Замалювати уже обмежену зону кольорiв
// границi, де X,Y - внутрiшнi точки зони
floodfill(x,y,getcolor()) ;
// Запам'ятати бiтовий образ в пам'ятi:
getimage(x,y,x+5,y+rad,pspot);
// взвод ознаки збереження в пам'ятi
tag=1;
}
// Якщо Е, то
else
// Перенести зображення з пам'ятi на екран
// починаючи з ЛIВОГО ВЕРХНЬОГО, СКIЛЬКИ,
putimage(x,y,pspot,XOR_PUT);
vis=1;
}
};
void new_game()
{
int sc,p1=0,ch,p2=0,kol,i,j,dv=5,i1,j1,i2,j2;
char s1[10],s2[10];
kol=num();
sc=speed();
setfillstyle(1,15);
{
i1=10;//Позиiя прямокутника 1го гравця по осi X
j1=205;//Початкова позиiя 1го гравця по осi Y
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;//вниз
}
vis=1;
}
// Описання функцii прибирання плями з екрану
void hide()
{
// Вихiд, якщо немае чого прибирати
if (!vis) return;
// Iнакше,стерти зображення з екрану:
putimage(x-rad,y-rad,pspot,XOR_PUT);
// вводимо ознаку очистки екрану
vis=0;
}
// Перемiстити зображення:
void move(int xn, int yn)
{
hide(); // Прибрати старе зображення з екрану
// Змiнити координати центру плями:
x=xn; y=yn;
show(); // Вивести зображення в новому мiсцi
}
void hider()//Процедура стирання прямокутника
{
// Вихiд, якщо немае що прибирати
if (!vis) return;
// Инакше стерти зображення з екрану:
putimage(x,y,pspot,XOR_PUT);
// взвожу ознаку очистки екрану
vis=0;
}
void mover(int xn,int yn)//Процедура переносу прямокутника
{
hider();
x=xn;y=yn;
showr();
}
void showr ()//Процедура малювання прямокутника
{ // Якщо бiтового образу НЕМАЕ в пам'ятi:
if (!tag)
{ // Намалювати поточним кольором на екранi
// прямокутник в заданому мicцi:
rectangle(x,y,x+5,y+rad);
// Замалювати уже обмежену зону кольорiв
// границi, де X,Y - внутрiшнi точки зони
floodfill(x,y,getcolor()) ;
// Запам'ятати бiтовий образ в пам'ятi:
getimage(x,y,x+5,y+rad,pspot);
// взвод ознаки збереження в пам'ятi
tag=1;
}
// Якщо Е, то
else
// Перенести зображення з пам'ятi на екран
// починаючи з ЛIВОГО ВЕРХНЬОГО, СКIЛЬКИ,
putimage(x,y,pspot,XOR_PUT);
vis=1;
}
};
void new_game()
{
int sc,p1=0,ch,p2=0,kol,i,j,dv=5,i1,j1,i2,j2;
char s1[10],s2[10];
kol=num();
sc=speed();
setfillstyle(1,15);
{
i1=10;//Позиiя прямокутника 1го гравця по осi X
j1=205;//Початкова позиiя 1го гравця по осi Y
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;//вниз
}