Смекни!
smekni.com

Розробка гри Відбивання кульки (стр. 2 из 3)

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