Міністерство загальної та професійної освіти РФ p>
Білгородська Державна Технологічна Академія p>
Будівельних матеріалів. p>
Кафедра ПОВТіАС p>
p>
Виконав: p>
Студент факультету АПіІТ p>
Групи ПВ-22 p>
Маркелов Денис p>
Керівник: p>
Білгород - 2000. p>
ЗМІСТ p>
1. ПЕРЕДМОВА p>
2. ВСТУП p>
3. ЗАВДАННЯ КУРСОВОЇ РОБОТИ p>
4. ПРАВИЛА КОРИСТУВАННЯ ПРОГРАМОЮ «Арканоїд» p>
5. ВИКОРИСТОВУЮТЬСЯ СТРУКТУРИ ДАНИХ p>
6. ВИКОРИСТОВУЮТЬСЯ МОДУЛІ p>
7. СПЕЦИФІКАЦІЯ підпрограм p>
8. ТЕКСТ ПРОГРАМИ і сконструював МОДУЛІВ p>
9. правила користування додатковою програмою для побудови рівнів
«MARKEDIT» p>
10. СПЕЦИФІКАЦІЯ підпрограм У ПРОГРАМІ «MARKEDIT» p>
11. ТЕКСТ ПРОГРАМИ «MARKEDIT" і сконструював МОДУЛІВ p>
12. Список використаної літератури p>
Передмова p>
Мова Турбо Паскаль - це одна з найпоширеніших мовпрограмування мікрокомп'ютерів. Він розроблений фірмою «Борланд» якдіалект стандартної мови Паскаль, але завдяки своїй популярності самстав стандартом мови програмування 8 - і 16-розрядних мікрокомп'ютерів.
До найважливіших переваг мови Турбо Паскаль відносяться невеликий розміркомпілятора, високий ступінь відповідності стандартним Паскалю, дужешвидка компіляція програм, об'єднання компілятора з інтерактивнимекранним редактором, попередження про помилки на рівні початковоїпрограми, велика бібліотека підпрограм і корисні розширення,спрощують системне програмування. p>
Введення p>
Однією з основних проблем, з якою стикаються в процесіпрограмування, є написання програми, яка не містить помилок.
Помилку найбільш повно можна визначити як розбіжність поведінки програмиз очікуваннями користувача. Сюди входить як невідповідність результатіввихідними даними, так і інші, часом більш небезпечні ефекти: зациклення,аварійна зупинка програм тощо
Найбільш явно спостерігаються історичними тенденціями в програмуванніє безперервне зростання призначених для користувача вимог, лавиноподібнеускладнення функціональності програми і, як наслідок, - ускладнення їїразработкі.В зв'язку зі збільшенням трудомісткості програмних засобів виникланеобхідність вироблення інтелектуальних інструментів, що дозволяютьрозробникам справлятися із збільшеною складністю своєї праці.
На даний момент можна стверджувати, що практично кожна програмаскладається з застосуванням тієї або іншої технології програмування.
«У зв'язку з тим, що за останні десять або пятьнадцать роківпродуктивність обчислювальних машин збільшилася в тисячі разів,користувачі стали набагато більш безцеремонними при виборі проблем, яківони вважають «технічно можна вирішити». Користувачі хочуть, щоб розміри,складність і витонченість програм збільшувалася виключно швидкимитемпами, і в останні роки стало очевидним, що в цілому нашіпрограмістські можливості не встигають за цими непомірного апетиту ».
У міру того, як міць комп'ютерів росла, а область застосування всерозширювалася, зростали не тільки розміри, і складність програм, а йкількість помилок в них.
Головним завданням сучасного програміста при написанні програми єНЕ подвеганіе її нескінченним тестуванням, а ретельний, повний аналізвихідного тексту програми, а також налагодження програми за допомогоюдодаткових програмних засобів. p>
Завдання на проектування p>
Розробити алгоритм гри «Арканоїд», мета якої полягає в наборі якякомога більшої кількості очок, які збільшуються при вибиваннічергового кубика.
При вибиванні всіх кубиків поточного рівня здійснюється перехід нанаступний рівень, кількість яких - десять.
Наприкінці гри в залежності від кількості набраних очок, введене ззапитом програми ім'я гравця повинно бути занесено до десятки найкращих ізаписано у файл. p>
Над рамкою, протягом гри мають відображатися: p>
1) № поточного етапу;
2) кількість залишилися життів, спочатку яких - 10;
1) кількість залишилися кубиків;
2) кількість набраних очок. p>
Правила користування програмою: p>
1) запустити MARKBALL.EXE p>
2) вибрати ніж грати: p>
2a) миша p>
2б) клавіатура p>
3) вибрати швидкість кульки p>
4) вибрати розмір планки p>
Використовувані структури даних: p>
type t_kubik = 0 .. 640; t_dx_dy =- 1 .. 1; t_arr = array [1 .. 494] of t_kubik; kol_kubik = 0 .. 247; p>
t_kubik - значення всіх змінних, що використовуються в програмі, задані в цихмежах (і не більше); p>
t_dx_dy - значення, яке приймає коефіцієнт, від якого залежитьнапрямок руху по осі ОХ або ОУ; p>
t_arr - значення координат, які приймає кубик, відповідно досвоїм відображенням (зображенням) на екрані; p>
kol_kubik - максимальну кількість кубиків; p>
Використовувані модулі: p>
Стандартні: p>
1) CRT ; p>
2) GRAPH; p>
3) WINDOS - модуль потрібний сконструіруемим модулем MYMOUSE; p>
4) STRINGS - модуль потрібний сконструіруемим модулем MYMOUSE; p>
Сконструйовані: p>
1) MARKEL - основні ігрові підпрограми; p>
2) MARK_ZAS - містить інструментарій інтерфейсу (заставка, допомога, рахунок кращих гравців в кінці гри); p >
3) MYMOUSE - робота з мишею p>
Специфікація підпрограм: p>
Модуль MARKEL p>
a. procedure livs (var liv: byte); p>
Призначення: вважає, що залишилися життя, якщо число життів дорівнюватименулю, то виводить на екран миготливу напис: «YOU HAVE LOST»; p>
Вхідні дані: liv - число життів; p>
Вихідні дані: liv - залишилися кількість життів; p>
2. procedure perehod_level (const numbering: byte); p>
Призначення: виводить по середині екрана напис, що відповідає початкунового етапу; p>
Вхідні дані: numbering - номер нового етапу; p>
Вихідні дані: ні; p>
3. procedure planka_sharik (koeff: byte); p>
Призначення: малює планку, розміром, визначеним від значення koeff,посередині екрану і кулька над нею; p>
Вхідні дані: koeff - число визначає розмір планки; p>
Вихідні дані: ні; p>
4. procedure musik; p>
Призначення: видає звуковий сигнал, відповідний якому-небудьторкання кульки про що-небудь; p>
Вхідні дані: ні; p>
Вихідні дані: ні; p>
5.procedure izchez_vv_niz (var dy: t_dx_dy; x, y , i: t_kubik; vara: t_arr; var kol_kub: kol_kubik); p>
Призначення: визначає чи торкнулася кульку кубика про верхню або нижнюгрань; p>
Вхідні дані: p>
2) dy - напрямок руху кульки по осі Y; p>
3) x, y - поточні координати центру кульки; p>
4) i - значення, від якого залежить які кубики перевіряти на збивання; p>
5) a - масив координат кубиків; p>
6) kol_kub - кількість кубиків на даний момент; p>
Вихідні дані: p>
7) dy - змінене напрямок руху кульки по осі Y; p>
8) a - змінений масив координат кубиків; p >
9) kol_kub - змінене кількість кубиків; p>
6. procedure bok_bok (var dx: t_dx_dy; x, y: t_kubik; var a: t_arr; varkol_kub: kol_kubik); p>
Призначення: визначає чи торкнулася кульку кубика про ліву чи правугрань; p>
Вхідні дані:
10) dx - напрямок руху кульки по осі X;
11) x, y - поточні координати центру кульки;
12) a - масив координат кубиків ;
13) kol_kub - кількість кубиків на даний момент; p>
Вихідні дані:
14) dx - змінене напрямок руху кульки по осі X;
15) a - змінений масив координат кубиків ;
16) kol_kub - змінене кількість кубиків; p>
7. procedure death; p>
Призначення: видає звуковий сигнал, відповідний програшу однієїжиття; p>
Вхідні дані: ні; p>
Вихідні дані: ні; p>
8. procedure ugolki (var dx, dy: t_dx_dy; x, y: t_kubik; var a: t_arr; varkol_kub: kol_kubik); p>
Призначення: визначає чи торкнулася кульку кубика про кути; p>
Вхідні дані:
17) dx, dy - напрямок руху кульки по осях X і Y;
18) x, y - поточні координати центру кульки;
19) a - масив координат кубиків;
20) kol_kub - кількість кубиків на даний момент; p>
Вихідні дані:
21) dx, dy - змінене напрямок руху кульки по осях X і Y;
22) a - змінений масив координат кубиків;
23) kol_kub - змінене кількість кубиків; p>
9. procedure pausing (var pause: word); p>
Призначення: визначає швидкість руху кульки по вибору самимкористувачем, з наочним графічним інтерфейсом; p>
Вхідні дані: pause - передбачувана пауза; p>
Вихідні дані: pause - вже певна пауза; p>
10. procedure zapis (const xs, ys: t_kubik; i: t_kubik; var a: t_arr); p>
Призначення: визначає на які місця в масиві записувати координатикубика; p>
Вхідні дані: p>
1) xs, ys - координати кульки, які і потрібно записати в масив; p>
24) i - мінлива від якої залежить з якого номера шукати відповідне місце для координат кубика; p>
25) a - масив координат кубиків; p>
Вихідні дані: немає p>
11. procedure level (var a: t_arr; const numbering: byte; var kol_kub: kol_kubik); p>
Призначення: відкриває файл і зчитуючи з нього координати кубиків,малює їх; p>
Вхідні дані: p>
1) a - масив координат кубиків; p>
2) numbering - номер відкривається етапу; p>
3) kol_kub - кількість кубиків; p>
Вихідні дані: p>
1) a - масив координат кубиків; p>
2) kol_kub - кількість намальованих кубиків; p >
12. procedure left (const koeff: byte; var x1_dv, x2_dv: t_kubik); p>
Призначення: рух планки вліво; p>
Вхідні дані: p>
1) koeff -- коефіцієнт, від якого залежить розмір планки; p>
2) x1_dv, x2_dv - координати планки по осі Х; p>
Вихідні дані: x1_dv, x2_dv - змінилися координати планки по осі Х; p>
13. procedure right (const koeff: byte; var x1_dv, x2_dv: t_kubik); p>
Призначення: рух планки вправо; p>
Вхідні дані: p>
1) koeff -- коефіцієнт, від якого залежить розмір планки; p>
3) x1_dv, x2_dv - координати планки по осі Х; p>
Вихідні дані: x1_dv, x2_dv - змінилися координати планки по осі Х; p>
14. procedure dviguna_keyboard (const koeff: byte; varx, x1_dv, x2_dv: t_kubik; var y: t_kubik); p>
Призначення: очікування натискання клавіші для початку нового етапу, якщокористувач грає на клавіатурі; p>
Вхідні дані: p>
1) koeff - коефіцієнт, від якого залежить розмір планки; p>
1) x, y - координати кульки; p>
2) x1_dv, x2_dv - координати планки по осі Х; p>
Вихідні дані: p>
3) x, y - координати кульки; p> < p> 4) x1_dv, x2_dv - змінилися координати планки по осі Х; p>
15. procedure dviguna_mouse (const koeff: byte; varx, x1_dv, x2_dv: t_kubik; var y: t_kubik); p>
Призначення: очікування натискання кнопки миші для початку нового етапу, якщокористувач грає мишею; p>
Вхідні дані: p>
1) koeff - коефіцієнт, від якого залежить розмір планки; p>
2) x, y - координати кульки;
5) x1_dv, x2_dv - координати планки по осі Х; p>
Вихідні дані: f. x, y - координати кульки; g. x1_dv, x2_dv - змінилися координати планки по осі Х; p>
16. procedure zar_nar (var x, y: t_kubik; const dx, dy: t_dx_dy); p>
Призначення: зафарбування вже намальованого кульки і нарісованіе новогокульки із зміненими координатами; p>
Вхідні дані: p>
1) x, y - координати кульки; p>
2) dx, dy - від значення цих змінних залежить рух кульки в тучи іншу сторону, p>
Вихідні дані: x, y - координати кульки; p>
17. function chem_play: boolean; p>
Призначення: визначення користувачем ніж грати (клавіатурою абомишею), з наочним графічним інтерфейсом; p>
Вхідні дані: p>
Нет; p>
Вихідні дані: true - граймо мишею; false - граймо на клавіатурі; p>
18. procedure razmer_planki (var koeff: byte); p>
Призначення: визначення користувачем розміру планки; p>
Вхідні дані: p>
Koeff - коефіцієнт, що визначає розмір планки; p>
Вихідні дані: p>
Koeff - коефіцієнт, що визначає розмір планки; граєм мишею; p>
19. procedure naverhu_liv (liv: byte); p>
Призначення: відображення над рамкою протягом гри кількостізалишилися життів; p>
Вхідні дані: liv - число життів; p>
Вихідні дані: ні; p>
20.procedure naverhu_number (numbering: byte); p >
Призначення: відображення над рамкою протягом гри номера поточногорівня; p>
Вхідні дані: numbering - номер рівня; p>
Вихідні дані: ні; p>
21. procedure naverhu_kubiki (kol_kub: byte); p>
Призначення: відображення над рамкою протягом гри кількостізалишилися кубиків; p>
Вхідні дані: p>
Kol_kub - число, що залишилися кубиків; p>
Вихідні дані: ні; p>
Модуль MARK_ZAS p >
1. procedure zastavka (s2: string); p>
Призначення: на початку гри використовується як заставку з миготливоївеликим написом «MARKBALL» і нижче миготливої написом «Click to start»
, також використовується при втраті всіх життів, але при цьому нижня написбуде «You have lost», а при проходженні всіх етапів нижня напис буде
«The end of game»; p>
Вхідні дані: p>
S2 - нижня миготлива напис; p>
Вихідні дані: ні; p>
2 . procedure text_na_ekran; p>
Призначення: використовується як довідка поки гра ще не почалася принатисканні клавіші «F1»; p>
Вхідні дані: ні; p>
Вихідні дані: ні; p>
3. procedure ochki (score: word); p>
Призначення: в кінці гри вважає згідно з набраними очками:чи займе цей гравець, який ввів за запитом програми своє ім'я, яке -небудь місце серед представлених десяти місць; якщо кількість набранихокулярів дозволяє гравцеві зайняти деякий місце, то програма виводить наекран таблицю лідерів, що включає в себе ім'я даного гравця, у противномувипадку на екран все ж таки буде виведена таблиця лідерів, але імені даногогравця міститися там не буде; p>
Вхідні дані: p>
Score - кількість набраних протягом гри очок; p>
Вихідні дані: ні; p>
Основна програма p>
1. Procedure initgr; p>
Призначення: ініціалізує графіку в режимі vgahi; p>
Вхідні дані: ні; p>
Вихідні дані: ні; p>
2 . Procedure vostanovka_colors; p>
Призначення: відновлює кольору зі стандартними відтінками; p>
Вхідні дані: ні; p>
Вихідні дані: ні; p>
Текст програми: p>
program mark_ball;uses graph, crt, mymouse, markel, mark_zas;procedure initgr;var grdriver, grmode: integer;begin grdriver: = vga; grmode: = vgahi; initgraph (grdriver, grmode ,''); if GraphResult grOk then halt;end; p>
procedure vostanovka_colors;begin setrgbpalette (black, 0,0,0); setrgbpalette (blue, 0,0,40); setrgbpalette (green, 0,40,0); setrgbpalette (cyan, 0,40,40); setrgbpalette (red, 40 , 7,7); setrgbpalette (magenta, 40,0,40); setrgbpalette (brown, 40,30,0); setrgbpalette (lightgray, 49,49,49); setrgbpalette (darkgray, 26,26,26); setrgbpalette (lightblue, 0,0,63); setrgbpalette (lightgreen, 9,63,9); setrgbpalette (lightcyan, 0,63,63); setrgbpalette (lightred, 63,10,10); setrgbpalette (lightmagenta, 44, 0,63); setrgbpalette (yellow, 63,63,18); setrgbpalette (white, 63,63,63);end; p>
var y_planka, xmax, x1_dv, x2_dv, x, y, i: t_kubik; x_get, y_get, x_get_pred: word; dx, dy: t_dx_dy; a: t_arr; numbering, liv: byte; kol_kub: kol_kubik; lb, rb, tb, dviguna: boolean; buttoncount, errorcode, koeff: byte; pause: word; score: integer; s2: string;begin s2: = 'Click to start'; initgr; zastavka (s2); vostanovka_colors; setlinestyle (0,0,1); randomize; cleardevice; xmax: = getmaxx-radius-1; y: = getmaxy-shir-radius - 1; y_planka: = getmaxy-shir-radius-1; liv: = 10; score: =- 10; dviguna: = chem_play; pausing (pause); razmer_planki (koeff); for numbering: = 1 to 10 do begin perehod_level ( numbering); cleardevice; planka_sharik (koeff); p>
level (a, numbering, kol_kub); naverhu_number (numbering); naverhu_liv (liv); naverhu_kubiki (kol_kub, score); dx: =- 1; dy : =- 1; p>
(а ¬ Є) setcolor (random (14) +1); rectangle (0,21, getmaxx, getmaxy); p>
if dviguna then dviguna_mouse ( koeff, x, x1_dv, x2_dv, y) else dviguna_keyboard (koeff, x, x1_dv, x2_dv, y); while kol_kub> 0 do begin zar_nar (x, y, dx, dy); delay (pause); if (y = radius +1 +21) or p>
((x1_dv p>