dos.h – для стандартної функції delay().
В головній функції програми int main() визиваються наступні функції:
initgraph(&dr, &mod,””) – ініціалізація графіки;
menu() – виклик головного меню гри;
closegraph() – закриває графічний режим і переводить систему в текстовий режим.
5. Тестування і перевірка програми
4.1. Розробка тестів
Тестування направлене на знаходження та виправлення помилок у програмах. Один з методів тестування базується на спостереженні за роботою програми. Відомо, що помилки у програмному забезпеченні мають схильність групуватися (принцип Парето). В програмі завжди є модулі, які є більш проблематичними, ніж інші. Для даної програми таким модулем є функція new_game(), що виконує в програмі провідну роль.
Отож, запустимо програму і будемо вести спостереження. При тестуванні нас цікавитимуть:
1. Чи є помилки у графічній реалізації;
2. Чи правильно відбивається кулька від стінок та лопаток;
3. Ситуація, коли кулька пролітає поза лопаткою: чи можемо ми не влучити і чи правильно ведеться рахунок. Для цього необхідно випробувати ряд випадків відбивання кульки в різних положеннях лопаток, а також, спеціально не влучити і впевнитись у тому, що супернику було нараховано очко на його рахунок.
4.2. Аналіз результатів роботи програми
Під час перевірки та тестування було проведено ряд тестів, які було описано вище, і в результаті вияснено, що програма працює більш-менш надійно і злагоджено, помилок виявлено не було.
В результаті виконання даної курсовоїроботизасобамимовипрограмування С++ булорозробленопрограму, щореалізує гру “Відбивання кульки”. Виконані всі умови розробки програми.
Під час розробки даного курсового проекту, мною було вдосконалені деякі навички програмування на мові С++.
Список використаної літератури
1. В.В. Подбельский. Язык С++. М.: Финансы и статистика, 2005.
2. Шилдт Г. Искусство программирования на С++. СПб.: БХВ-Петербург, 2005
3. htpp://www.codenet.ru/
ДОДАТКИ
Додаток А:
#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
short num()//функцiя вибору к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+45,y+38,"3 гри");
outtextxy(x+46 ,y+39,"3 гри");
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+45,y+38,"5 iгор");
outtextxy(x+46 ,y+39,"5 iгор");
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+45,y+38,"10 iгор");
outtextxy(x+46 ,y+39,"10 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=2;
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==2){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>2)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+2*90,9);
floodfill(x+24,y+2*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();
if(i==0)return 3;
if(i==1)return 5;
if(i==2)return 10;
return 0;
}
short speed()//функц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+41,y+38,"Швидкiсть 1");
outtextxy(x+42 ,y+39,"Швидкiсть 1");
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+41,y+38,"Швидкiсть 2");
outtextxy(x+42 ,y+39,"Швидкiсть 2");
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+41,y+38,"Швидкiсть 3");
outtextxy(x+42 ,y+39,"Швидкiсть 3");
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=2;
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==2){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>2)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+2*90,9);
floodfill(x+24,y+2*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();
return 3-i+1;
}
void help()//процедура виводу пiдсказки
{
settextstyle(0,HORIZ_DIR,2);
setcolor(RED);
outtextxy(25,25,"Клавiшi керування:");
setcolor(GREEN);
settextstyle(1,HORIZ_DIR,0);
outtextxy(30,50,"Enter-початок гри");
setcolor(BLUE);
outtextxy(30,75,"ПЕРШИЙ ГРАВЕЦЬ:");
setcolor(GREEN);
outtextxy(30,100,"W - рух лопатки доверху");
outtextxy(30,125,"S - рух лопатки донизу");
setcolor(BLUE);
outtextxy(30,150,"ДРУГИЙ ГРАВЕЦЬ:");
setcolor(GREEN);
outtextxy(30,175,"Up - рух лопатки доверху");
outtextxy(30,200,"Down - рух лопатки донизу");
settextstyle(0,HORIZ_DIR,0);
setcolor(15);
outtextxy(30,250,"Для виходу натиснiть будь-яку клавiшу...");
getch();
}
void about()//процедура виводу iнформацii про автора
{
settextstyle(0,HORIZ_DIR,2);
setcolor(RED);
outtextxy(25,25,"Автор:");
setcolor(GREEN);
settextstyle(1,HORIZ_DIR,0);
outtextxy(30,50,"студент групи 1IС-05 ТКАЧУК АНДРIЙ");
settextstyle(0,HORIZ_DIR,0);
setcolor(15);
outtextxy(30,100,"Для виходу натиснiть будь-яку клавiшу...");
getch();
}
//Клас точки на екранi
class point
{
protected: // Захищенi данi класу:
int x, y; //Координати точки
// Прототипи загальнодоступних компонентних функцiй:
public:
// Конструктор з параметрами.
point(int xi = 0, int yi = 0);
int& givex(void); // Доступ до х ???
int& givey(void); // Доступ до у ???
void show(void); // Зобразити точку на екранi
// Перемiстити точку в нове мiсце екрану:
// (хn=0, уn=0 - замовчуванi значення параметрiв)
void move(int xn = 0, int yn = 0);
private: // Власна функцiя класу:
void hide(); // Забрати з екрану зображення точки
};
//***************************
// Описання функцiй класу.
//***************************
// Описання конструктора класу.
point::point(int xi, int yi)
{x=xi; y=yi;} // визначення даних об'екту
// Описання функцiй доступа до координат центру
// Описання функцiй зображення точки на екранi
void point::show(void)
// зафарбовуе пiксель з координатами
// X, Y поточним кольором малюнку
{putpixel(x,y,getcolor());}
//Забрати з екрану зображення точки
void point::hide(void)
// аналогiчно, але кольором фону
{putpixel(x,y,getbkcolor());}
// Перемiстити точку на нове мicце екрану
// з координатами XN, YN.
void point::move(int xn, int yn)
{
//спочатку забираемо з екрану поточну точку
hide();
//встановлюемо новi координати точки
x=xn; y=yn;
//Зображаемо на экранi точку на новому мicцi
show();
}
// Клас роботи з плямою на екранi.
// 'public' дозволить зберегти статуси доступу
// для наслiдуемих компонентiв класу POINT:
class spot:public point
{
//Статус доступностi даних в похiдному класi:
protected:
int rad; // Радiус плями (зображення)
int vis; // Видимiсть плями на екранi
int tag; // Ознака збереження образу в памятi
void *pspot; // показник на область пам'ятi для
// зображення (для бiтового образу)
public:
// Конструктор класу SPOT:
spot(int xi, int yi, int ri):
// Виклик конструктора базового класу:
point(xi,yi)
{
vis=tag=0; rad = ri;
// Визначити розмiри бiтового образу та
// видiлити пам'ять для нього. Розмiр
// визначаемо, задавши координати ЛIВИЙ
// ВЕРХНIЙ та ПРАВИЙ НИЖНIЙ.
pspot = new char[imagesize(xi-ri,yi-ri,xi+ri,yi+ri)];
}
~spot() // Деструктор класу SPOT
{
hide(); // Забрати з екрану зображення плями
tag =0; // скинути ознаку збереження в пам'ятi
delete pspot; // Звiльнити пам'ять бiтового образу
}
// Описання функцii зображення плями на екранi
void show ()
{ // Якщо бiтового образу НЕМАЕ в пам'ятi:
if (!tag)
{ // Намалювати поточним кольором на екранi
// коло вказаного радiуса та центру:
circle(x,y,rad);
// Замалювати вже обмежену зону кольорiв
// границi, де X,Y - внутрiшнi точки зони
floodfill(x,y,getcolor()) ;
// Запам'ятати бiтовий образ в пам'ятi:
getimage(x-rad,y-rad,x+rad,y+rad,pspot);
// введення ознаки збереження в пам'ятi
tag=1;
}
// Якщо Е, то
else
// Перенести зображення з пам'ятi на екран,
// починаючи з ЛIВОГО ВЕРХНЬОГО, СКIЛЬКИ,
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