Розробка гри "Відбивання кульки"

Вимоги до програмної реалізації, функціональні можливості програми. Варіантний аналіз і вибір методу вирішення основної задачі. Початок загального алгоритму вирішення задачі, структурні зв'язки між функціями програми. Реалізація гри "Відбивання кульки".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 13.11.2017
Размер файла 44,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсова робота

Розробка гри “Відбивання кульки”

Зміст

Вступ

1. Розробка і обґрунтування технічного завдання

1.1 Вимоги користувача

1.2 Вимоги до програмної реалізації

1.3 Функціональні можливості програми

1.4 Можливі варіанти зміни та вдосконалення програми

1.5 Варіантний аналіз і вибір методу вирішення основної задачі

2. Розробка структури програмної системи

2.1 Початок загального алгоритму вирішення задачі

2.2 Структурні зв'язки між функціями програми

3. Програмна реалізація

4. Тестування і перевірка програми

4.1 Розробка тестів

4.2 Аналіз результатів роботи програми

Висновки

Список використаної літератури

Додатки

Вступ

програма алгоритм гра кулька

Розвиток обчислювальної техніки супроводжується створенням нових і вдосконаленням існуючих мов програмування--засобів спілкування програмістів з ЕОМ. Під мовою програмування розуміють правила подання даних і запису алгоритмів їх обробки, що автоматично виконуються ЕОМ. У більш абстрактному вигляді, - це засіб створення програмних моделей об'єктів і явищ зовнішнього світу. На сьогодні вже створено десятки різних мов (як примітивних, так і близьких до мови людини).

Їх розвиток невпинно йшов від першої мови асемблера до мов високого рівня і до систем автоматизованого проектування. Під час розробки мов програмування за мету ставилося розробити мову, яка могла б виконувати всі необхідні для роботи функції і при цьому не була б складною у використанні.

З часом мови програмування ставали все ефективнішими та зрозумілими навіть для рядових користувачів. За їх допомогою стало можливим одним рядком описувати функції, для опису яких мовами молодших поколінь потрібно було б сотні-тисячі рядків початкового коду.

C++ - універсальна мова програмування, що належить до високорівневих, трансльованих, об'єктно-орієнтованих мов. Була розроблена Бьярном Страуструпом у 1983 році. Базується на мові Сі. У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення.

Нововведенням С++ в порівнянні з С є: підтримка об'єктно-орієнтованого програмування через класи, підтримка узагальненого програмування через шаблони, доповнення до стандартної бібліотеки, додаткові типи даних, виключень, простору імен, вбудовувані функції, посилання і оператори керування вільно розподілюваною пам'яттю.

Мова С++ має достатньо шиpокi гpафiчнi можливостi. Всi необхiднi визначення для графiчного модуля мови С++ дано в файлi graphics.h . При виборi вiдповiдного режиму вiн повинен бути включеним в програму за допомогою директиви #include<graphics.h>, а перед використанням графічних функцій повинна бути проініціалізована графічна система (вказаний графічний драйвер та режим його роботи).

1. Розробка і обґрунтування технічного завдання

1.1 Вимоги користувача

Необхідно розробити програму, що відтворює гру “Відбивання кульки”, в якій приймають участь двоє гравців.

Після запуску програми на екрані повинне з'явитися меню, з пунктами для початку гри, виведення підказки, інформації про автора гри та для виходу з меню.

Пункти меню:

– “Нова гра” - запуск гри. Після натискання даної клавіші у робочому вікні з'являється одне за одним меню для вибору кількості ігор (партій) (3, 5, 10) та швидкості руху кульки (3 швидкості), а за ними і ігрове поле. Ігрове поле розділено на дві частини. Зліва та справа присутні лопатки гравців у вигляді прямокутників для відбивання кульки. Знизу ведеться рахунок вдалих ударів для кожного гравця;

– „Допомога” - виводить список клавіш, які використовуються у грі;

– „Про автора” - виводить інформацію про розробника даної програми;

– „Вихід” - дозволяє вийти з програми після її завершення.

1.2 Вимоги до програмної реалізації

Програма повинна відповідати вимогам користувача.

Гра програмується на мові С++. Програміст може використовувати стандартні функції даної мови програмування, а також створювати свої власні, підключати заголовочні файли даного компілятора.

Програма має бути реалізована графічно. Вибір відповідних пунктів меню здійснюється за допомогою клавіш курсора та клавіші ENTER. Програма має витримувати усі тести користувача. На кожній сторінці повинна бути доповнена коментарями.

Програмний комплекс повинен містити стандартні модулі, а також модулі користувача (за наявності), процедури і функції користувача.

Програма повинна відтворювати гру “Відбивання кульки”.

1.3 Функціональні можливості програми

В програмі міститься меню, до пунктів якого можна звертатися у довільному порядку. Вибір конкретного пункту здійснюється за допомогою клавіш курсору та клавіші ENTER. Є можливість вибору кількості партій та швидкості руху кульки для ускладнення гри. За вдалі удари очки нараховуються гравцю, за промахи - супернику. Після того, як сума очок досягає обраної кількості партій, визначається переможець.

1.4 Можливі варіанти зміни та вдосконалення програми

Для зміни реалізації основної задачі можна внести зміни у функції new_game(), speed(), num(). Наприклад, для зміни інтервалу можливих швидкостей можна змінити параметр функції delay(), що використовується в new_game() для затримки руху кульки, а також розширити можливі варіанти вибору швидкостей у меню з функції speed(). У функції num() можливо збільшити кількість партій. Можна також змінити в new_game() діаметр кульки, розміри лопаток, швидкість їх руху тощо. aftvin

1.5 Варіантний аналіз і вибір методу вирішення основної задачі

При розробці даної курсової роботи, основною задачею було зобразити рух об'єкта (кульки), що рухається по полю, відбиваючись від стінок та лопаток гравців, а також здійснення управління самими лопатками доверху та вниз.

Для цього були розроблені клас point (клас точки на екрані) та клас spot (для роботи з плямою на екрані), що наслідує компоненти класу point: функції void show() - функція зображення плями на екрані, void hide() - функція прибирання плями з екрану, та функція void move(int xn, int yn) - переміщення зображення.

void show() - функція, що малює коло, заповнює її кольором та запам'ятовує його бітовий образ в пам'яті;

void hide() - стирає зображення з екрану;

void move(int xn, int yn) - містить в собі функції hide() та show(). Після стирання зображення змінює координати центру плями та виводить її у новому місці з центром у точці (xn, yn).

Аналогічно до процедур роботи з плямою були створені процедури для роботи з прямокутниками (лопатками): void showr() - малювання прямокутника; void hider() - процедура стирання прямокутника;

void mover(int xn, int yn) - переміщення прямокутника, де xn, yn - координати його верхнього лівого кута в новій позиції.

Функція new_game() об'єднує роботу всіх вище переглянутих функцій. Основною задачею цієї функції є узгодження роботи всіх інших функцій і перехоплення і оброблення нажатих користувачем клавіш.

2. Розробка структури програмної системи

2.1 Початок загального алгоритму вирішення задачі

1. Початок;

2. Ініціалізація і об'явлення змінних;

3. Ініціалізація графіки;

4. Виведення на екран головного меню гри;

5. Перевіряємо, яка кнопка натиснута:

Якщо натискаємо кнопку “Нова гра”, викликається функція new_game(), а в ній викликаються одна за одною функції num() (повертає значення кількості ігор), speed() (повертає значення швидкості), після завершення двох останніх функцій починається сама гра;

При натисканні кнопки “Допомога” викликається функція help() з підказкою про використання клавіш у грі;

Якщо натиснута кнопка “Про автора”, то запускається функція about(), яка виводить прізвище, імя розробника програми та деяку інформацію про нього;

Якщо ж натиснути кнопку (Вихід), це приведе до виходу з програми.

6. Кінець.

2.2 Структурні зв'язки між функціями програми

На початку програми робимо доступними бібліотеки з допомогою заголовних файлів: graphics.h; conio.h; stdlib.h; dos.h. Потім описуємо функції і підключаємо графічний режим.

Далі йде виклик функції menu(). Виводиться головне меню гри з чотирма кнопками: 1.Нова гра, 2.Допомога, 3.Про автора, 4.Вихід.

При виборі 1-го пункту запускається функція new_game(), яка виконує головне завдання. В ній викликаються функції num() i speed(), після чого на екран виводиться ігрове поле, малюється в центрі кулька, лінія, що розділяє поле навпіл, два прямокутника по бокам. І після натиснення ENTER кулька починає рухатися по полю, а гравці повинні керувати лопатками та відбивати її.

При натисканні кнопки 2 спрацьовує функція help().

Якщо натиснута кнопка 3, то спрацьовує функція about(), яка при використанні стандартних функцій графічної бібліотеки:setcolor(), outtextxy(), виводить інформацію, тобто прізвище, імя, та номер групи розробника даної програми.

Коли натиснута кнопка 4, командою break переривається цикл перевірки і програма закінчує свою роботу.

3. Програмна реалізація

Директива #include<…> призначена для включення в текст програми тексту файла із каталогу “заголовочних файлів”, що постачаються разом зі стандартними бібліотеками компілятора. На початку програми відбувається

підключення бібліотек graphics.h; conio.h; stdlib.h; dos.h.

graphics.h - використовується для графічної реалізації програми;

stdlib.h - включений в програму для виклику стандартних бібліотечних функцій randomize(), itoa(), random();

conio.h - для стандартної функції getch() та kbhit();

dos.h - для стандартної функції delay().

В головній функції програми int main() визиваються наступні функції:

initgraph(&dr, &mod,””) - ініціалізація графіки;

menu() - виклик головного меню гри;

closegraph() - закриває графічний режим і переводить систему в текстовий режим.

4. Тестування і перевірка програми

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

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();

}

Додаток Б

Размещено на Allbest.ru

...

Подобные документы

  • Розробка і обґрунтування технічного завдання, вимоги до програмної реалізації та користувача. Можливі варіанти зміни та вдосконалення програми. Початок загального алгоритму вирішення задачі. Структурні зв’язки між функціями програми, її тестування.

    курсовая работа [1,8 M], добавлен 14.03.2013

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Дослідження методу сплайнів для вирішення задачі інтерполяції. Вибір методів технічних та інструментальних засобів вирішення задачі, їх алгоритми. Розробка логічної частини програми, результати обчислень. Розв’язання задачі в пакетах прикладних програм.

    курсовая работа [278,5 K], добавлен 03.12.2009

  • Розбиття загальної задачі на під задачі. Вибір засобу реалізації кожної з підзадач. Обґрунтування вибору ОМК для вирішення задачі. Функціональна схема пристрою та її короткий опис. Алгоритм роботи МКП. Розподіл пам’яті даних та програм. Текст програми.

    контрольная работа [508,3 K], добавлен 21.01.2009

  • Характеристика середовища програмування Microsoft Visual C++ та бібліотеки класів MFC. Знаходження коефіцієнтів при невідомих за допомогою методу найменших квадратів. Створення програми для вирішення задачі обраним методом, її алгоритм та інтерфейс.

    курсовая работа [434,8 K], добавлен 20.01.2014

  • Розробка резидентної програми за допомогою мови асемблер, яка дозволить перехопити зміст текстового та графічного екрану у файл (відповідно TXT і BMP). Вибір та обґрунтування методу розв'язки даної задачі. Алгоритм і реалізація програми, системні вимоги.

    курсовая работа [14,9 K], добавлен 08.08.2009

  • Формулювання умови задачі в термінах теорії графів. Метод вирішення задачі й алгоритм написання програми на мові C++. Розробка інструкції користувача, розрахунок контрольних прикладів й аналіз результатів. Приклади практичного застосування програми.

    курсовая работа [526,2 K], добавлен 31.01.2014

  • Написання програм для перейменування файлів та копіювання файлів і підкаталогів (аналоги REN, XCOPY). Вибір методу розв'язки задачі та його обґрунтування. Алгоритм та реалізація програми, її системні вимоги. Інструкція для користувача та лістинг.

    курсовая работа [14,7 K], добавлен 08.08.2009

  • Опис методів і алгоритмів вирішення задачі в середовищі розробки Myeclipse. Основні функції програмного продукту, його структура. Розробка алгоритму та програми, інструкція користувачу. Результати тестування, лістинг основних блоків. Вікно головного меню.

    курсовая работа [1,8 M], добавлен 24.02.2014

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

  • Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.

    курсовая работа [2,9 M], добавлен 05.12.2012

  • Дослідження етапів розробки програмної реалізації криптографічного алгоритму RC5. Опис об'єкту, що потребує захисту: операційне середовище, тип програмного забезпечення. Блок-схема алгоритму функціонування програми криптозахисту. Листінг тесту програми.

    курсовая работа [4,4 M], добавлен 28.10.2010

  • Розв’язання нелінійних алгебраїчних рівнянь методом дихотомії. Вирішення задачі знаходження коренів рівняння. Розробка алгоритму розв’язання задачі і тестового прикладу. Блок-схеми алгоритмів основних функцій. Інструкція користувача програмою мовою С++.

    курсовая работа [2,0 M], добавлен 24.09.2010

  • Проектування програми за допомогою мови асемблера, яка б дозволяла відобразити на екрані дерево каталогів на диску і перейти в потрібний користувачеві каталог. Вибір методу розв’язання задачі та обґрунтування доцільності. Проведення лістингу програми.

    курсовая работа [13,1 K], добавлен 08.08.2009

  • Постановка та описання алгоритму розв’язання задачі про оптимальне призначення, формулювання вимог. Обґрунтування вибору засобів програмування. Розробка структури програми та системи її візуалізації, тестування та верифікація, оцінка ефективності.

    курсовая работа [1,1 M], добавлен 12.05.2013

  • Розробка структурної схеми системи управління, головні вимоги до основних елементів. Обґрунтування та вибір елементної бази. Блок-схема алгоритму і програми реалізації закону управління (лістинг програми). Зміст програми керування мікроконтроллером.

    курсовая работа [170,7 K], добавлен 28.08.2012

  • Створення алгоритму програмної моделі розкладу в учбовому закладі для ефективного вирішення завдань автоматичного складання розкладу, шляхом підбору найбільш оптимальних варіантів. Шляхи реалізації розробленого алгоритму в середовищі Mathemetica 5.0.

    дипломная работа [5,0 M], добавлен 25.10.2012

  • Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.

    курсовая работа [460,9 K], добавлен 04.03.2014

  • Створення програми для проходження тестового контролю по інтегральному численню за допомогою мови програмування Visual Basic. Опис математичного методу вирішення задачі. Структура вихідних даних. Стандартні функції та процедури. Налагодження програми.

    курсовая работа [2,7 M], добавлен 23.12.2014

  • Можливості програмування за допомогою Delphi. Розробка програми "Кадровий облік", її функції. Алгоритм задачі: логіка програми, визначення структури даних та інтерфейсу. Аналіз програми та її тестування: переваги та недоліки у порівнянні з аналогами.

    курсовая работа [1,6 M], добавлен 07.05.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.