Арканоид на Паскале

Тип работы:
Реферат
Предмет:
Информатика, программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Міністерство загального характеру і професійної освіти РФ

Білгородська Державна Технологічна Академия

Будівельних Материалов.

Кафедра ПОВТиАС

[pic]

Выполнил:

Студент факультету АПиИТ

Групи ПВ-22

Маркелов Денис

Руководитель:

Бєлгород — 2000.

1. ПРЕДИСЛОВИЕ

2. ВВЕДЕНИЕ

3. ЗАВДАННЯ КУРСОВОЙ РАБОТЫ

4. ПРАВИЛА КОРИСТУВАННЯ ПРОГРАМОЮ «АРКАНОИД»

5. ВИКОРИСТОВУВАНІ СТРУКТУРЫ ДАННЫХ

6. ВИКОРИСТОВУВАНІ МОДУЛИ

7. СПЕЦИФІКАЦІЯ ПОДПРОГРАММ

8. ТЕКСТ ПРОГРАМИ І СКОНСТРУЙОВАНИХ МОДУЛЕЙ

9. правила користування додаткової програмою для побудови рівнів «MARKEDIT»

10. СПЕЦИФІКАЦІЯ ПІДПРОГРАМ У ПРОГРАМІ «MARKEDIT»

11. ТЕКСТ ПРОГРАМИ «MARKEDIT» І СКОНСТРУЙОВАНИХ МОДУЛЕЙ

12. СПИСОК ВИКОРИСТОВУВАНОЇ ЛИТЕРАТУРЫ

Предисловие

Мова Турбо Паскаль — це з самих поширених мов програмування мікрокомп'ютерів. Він розроблений фірмою «Борланд» як діалект стандартного мови Паскаль, але завдяки їхній популярності сам став стандартом мови програмування 8- і 16-разрядных мікрокомп'ютерів. До найважливішим гідностям мови Турбо Паскаль ставляться невеличкий розмір компілятора, високий рівень відповідності стандартному Паскалю, дуже швидка компіляція програм, об'єднання компілятора з інтерактивним екранним редактором, попередження помилки лише на рівні вихідної програми, велика бібліотека підпрограм й придатні розширення, спрощують системне программирование.

Однією з основних проблем, із якою зіткнулися у процесі програмування, є написання програми, не що містить помилок. Помилку найповніше можна з’ясувати, як розбіжність поведінки програми з очікуваннями користувача. Сюди входять як невідповідність результатів вихідним даним, і інші, часом небезпечніші ефекти: зациклення, аварійна зупинка програм тощо. Найбільш явно наблюдаемыми історичними тенденціями в програмуванні є безперервне зростання користувальних вимог, лавиноподібне ускладнення функціональності програми розвитку й, як наслідок, — ускладнення її разработки. В зв’язку зі збільшенням трудоёмкости програмных коштів виникла необхідність вироблення інтелектуальних інструментів, дозволяють розробникам справлятися з зрослої складністю своєї праці. Нині можна стверджувати, що її практично кожна програма складається із застосуванням тій чи іншій технології програмування. «У зв’язку з тем, что протягом десяти чи пятьнадцать років продуктивність обчислювальних машин збільшилася тисячі разів, користувачі почали набагато більш безцеремонними під час виборів проблем, які вважають „технічно розв’язуються“. Користувачі хочуть, щоб розміри, складність і изощрённость програм збільшувалася винятково швидкими темпами, і останні роки стала очевидною, у цілому наші програмістські можливості не встигають за цими непомірними апетитами». Принаймні того, як міць комп’ютерів росла, а сферу застосування все розширювалася, збільшувалися як розміри, і складність програм, а й кількість помилок у яких. Головне завдання сучасного програміста під час написання програми є не подвегание її нескінченним тестуванням, а ретельний, повний аналіз вихідного тексту програми, і навіть налагодження програми з допомогою додаткових програмных средств.

Завдання проектирование

Разработать алгоритм гри «АРКАНОИД», мета полягає у традиційному наборі як можна великої кількості очок, які збільшуються при вибиванні чергового кубики. При вибиванні всіх кубиків за поточний рівень здійснюється перехід на такий рівень, кількість яких — десять. Наприкінці гри залежно кількості набраних очок, введённое по запиту програми ім'я гравця має бути занесено в останню десятку найкращих робітників та записано в файл.

Над рамкою, протягом гри мають отображаться:

1) № поточного етапу; 2) залишилося 15 життів, спочатку яких — 10; 1) залишилося 15 кубиків; 2) кількість набраних очков.

Правила користування программой:

1) запустити MARKBALL. EXE

2) вибрати ніж играть:

2a) мышь

2б) клавиатура

3) вибрати швидкість шарика

4) вибрати розмір планки

Використовувані структури данных:

type t_kubik=0. 640; t_dx_dy=-1. 1; t_arr=array[1. 494] of t_kubik; kol_kubik=0. 247;

t_kubik — значення всіх змінних, які у програмі, задано у тих межах (і более);

t_dx_dy — значення, а й приймати коефіцієнт, від якого собі напрямок руху по осі ОХ чи ОУ;

t_arr — значення координат, які вже вживає кубик, відповідно до своїм відображенням (зображенням) на экране;

kol_kubik — якомога більше кубиков;

Використовувані модули:

Стандартные:

1) CRT;

2) GRAPH;

3) WINDOS — модуль необхідний сконструируемым модулем MYMOUSE;

4) STRINGS — модуль необхідний сконструируемым модулем MYMOUSE;

Сконструированные:

1) MARKEL — основні ігрові подпрограммы;

2) MARK_ZAS — містить інструментарій інтерфейсу (заставка, допомогу, рахунок кращих гравців наприкінці игры);

3) MYMOUSE — роботу з мышью

Специфікація подпрограмм:

Модуль MARKEL

a. procedure livs (var liv: byte);

Призначення: вважає решта життя, якщо число життів дорівнюватиме нулю, то виводить на екран миготливу напис: «YOU HAVE LOST»;

Вхідні дані: liv — число жизней;

Вихідних даних: liv — решта кількість жизней;

2. procedure perehod_level (const numbering: byte);

Призначення: виводить посередині екрана напис, відповідну початку нового этапа;

Вхідні дані: numbering — номер нового этапа;

Вихідних даних: нет;

3. procedure planka_sharik (koeff: byte);

Призначення: малює планку, розміром, певним від значення koeff, посередині екрану і кулька над ней;

Вхідні дані: koeff — число що б розмір планки;

Вихідних даних: нет;

4. procedure musik;

Призначення: видає звуковий сигнал, відповідний якомусь торканню кульки про що нибудь;

Вхідні дані: нет;

Вихідних даних: нет;

5. procedure izchez_vv_niz (var dy: t_dx_dy;x, y, i:t_kubik;var a: t_arr;var kol_kub: kol_kubik);

Призначення: визначає торкнувся чи кулька кубики про верхню чи нижню грань;

Вхідні данные:

2) dy — собі напрямок руху кульки по осі Y;

3) x, y — поточні координати центру шарика;

4) і - значення, від якого які кубики перевіряти на сбивание;

5) a — масив координат кубиков;

6) kol_kub — кількість кубиків даний момент;

Вихідні данные:

7) dy — изменённое собі напрямок руху кульки по осі Y;

8) a — змінений масив координат кубиков;

9) kol_kub — изменённое кількість кубиков;

6. procedure bok_bok (var dx: t_dx_dy;x, y: t_kubik;var a: t_arr;var kol_kub: kol_kubik);

Призначення: визначає торкнувся чи кулька кубики про ліву чи праву грань;

Вхідні дані: 10) dx — собі напрямок руху кульки по осі X; 11) x, y — поточні координати центру кульки; 12) a — масив координат кубиків; 13) kol_kub — кількість кубиків даний момент;

Вихідних даних: 14) dx — изменённое собі напрямок руху кульки по осі X; 15) a — змінений масив координат кубиків; 16) kol_kub — изменённое кількість кубиков;

7. procedure death;

Призначення: видає звуковий сигнал, відповідний програшу однієї жизни;

Вхідні дані: нет;

Вихідних даних: нет;

8. procedure ugolki (var dx, dy: t_dx_dy;x, y: t_kubik;var a: t_arr;var kol_kub: kol_kubik);

Призначення: визначає торкнувся чи кулька кубики про углы;

Вхідні дані: 17) dx, dy — собі напрямок руху кульки по осях X і Y; 18) x, y — поточні координати центру кульки; 19) a — масив координат кубиків; 20) kol_kub — кількість кубиків даний момент;

Вихідних даних: 21) dx, dy — изменённое собі напрямок руху кульки по осях X і Y; 22) a — змінений масив координат кубиків; 23) kol_kub — изменённое кількість кубиков;

9. procedure pausing (var pause: word);

Призначення: визначає швидкість руху кульки за вибором самим користувачем, з наочним графічним интерфейсом;

Вхідні дані: pause — гадана пауза;

Вихідних даних: pause — вже певна пауза;

10. procedure zapis (const xs, ys: t_kubik; i: t_kubik;var a: t_arr);

Призначення: визначає яким місця у масиві записувати координати кубика;

Вхідні данные:

1) xs, ys — координати кульки, що й потрібно записати в массив;

24) і - змінна від якої залежить від якого номери шукати підходяще місце для координат кубика;

25) a — масив координат кубиков;

Вихідних даних: нет

11. procedure level (var a: t_arr;const numbering: byte;var kol_kub: kol_kubik);

Призначення: відкриває файл і зчитуючи від нього координати кубиків, малює их;

Вхідні данные:

1) a — масив координат кубиков;

2) numbering — номер открываемого этапа;

3) kol_kub — кількість кубиков;

Вихідні данные:

1) a — масив координат кубиков;

2) kol_kub — кількість намальованих кубиков;

12. procedure left (const koeff: byte;var x1_dv, x2_dv: t_kubik);

Призначення: рух планки влево;

Вхідні данные:

1) koeff — коефіцієнт, від якого розмір планки;

2) x1_dv, x2_dv — координати планки по осі Х;

Вихідних даних: x1_dv, x2_dv — змінилися координати планки по осі Х;

13. procedure right (const koeff: byte;var x1_dv, x2_dv: t_kubik);

Призначення: рух планки вправо;

Вхідні данные:

1) koeff — коефіцієнт, від якого розмір планки;

3) x1_dv, x2_dv — координати планки по осі Х;

Вихідних даних: x1_dv, x2_dv — змінилися координати планки по осі Х;

14. procedure dviguna_keyboard (const koeff: byte;var x, x1_dv, x2_dv: t_kubik;var y: t_kubik);

Призначення: очікування натискання клавіші спершу нового етапу, якщо користувач грає на клавиатуре;

Вхідні данные:

1) koeff — коефіцієнт, від якого розмір планки;

1) x, y — координати шарика;

2) x1_dv, x2_dv — координати планки по осі Х;

Вихідні данные:

3) x, y — координати шарика;

4) x1_dv, x2_dv — змінилися координати планки по осі Х;

15. procedure dviguna_mouse (const koeff: byte;var x, x1_dv, x2_dv: t_kubik;var y: t_kubik);

Призначення: очікування натискання кнопки миші спершу нового етапу, якщо користувач грає мышью;

Вхідні данные:

1) koeff — коефіцієнт, від якого розмір планки;

2) x, y — координати шарика;

5) x1_dv, x2_dv — координати планки по осі Х;

Вихідних даних: f. x, y — координати кульки; g. x1_dv, x2_dv — змінилися координати планки по осі Х;

16. procedure zar_nar (var x, y: t_kubik;const dx, dy: t_dx_dy);

Призначення: зафарбування вже намальованого кульки і нарисование нового кульки з изменёнными координатами;

Вхідні данные:

1) x, y — координати шарика;

2) dx, dy — від значення цих змінних залежить рух кульки у той або ту сторону;

Вихідних даних: x, y — координати шарика;

17. function chem_play: boolean;

Призначення: визначення користувачем ніж грати (клавіатурою чи мишею), з наочним графічним интерфейсом;

Вхідні данные:

Нет;

Вихідних даних: true — граємо мишею; false — граємо на клавиатуре;

18. procedure razmer_planki (var koeff: byte);

Призначення: визначення користувачем розміру планки;

Вхідні данные:

Koeff — коефіцієнт, визначальний розмір планки;

Вихідні данные:

Koeff — коефіцієнт, визначальний розмір планки; граєм мышью;

19. procedure naverhu_liv (liv: byte);

Призначення: відображення над рамкою протягом гри кількості решти жизней;

Вхідні дані: liv — число жизней;

Вихідних даних: нет;

20. procedure naverhu_number (numbering: byte);

Призначення: відображення над рамкою протягом гри номери поточного уровня;

Вхідні дані: numbering — номер уровня;

Вихідних даних: нет;

21. procedure naverhu_kubiki (kol_kub: byte);

Призначення: відображення над рамкою протягом гри кількості решти кубиков;

Вхідні данные:

Kol_kub — число решти кубиков;

Вихідних даних: нет;

Модуль MARK_ZAS

1. procedure zastavka (s2: string);

Призначення: на початку гри використовують у ролі заставки з миготливої великий написом «MARKBALL» і від миготливої написом «Click to start», також використовується у разі втрати всіх життів, та заодно нижня напис буде «You have lost», а під час проходження всіх етапів нижня напис буде «The end of game»;

Вхідні данные:

S2 — нижня миготлива надпись;

Вихідних даних: нет;

2. procedure text_na_ekran;

Призначення: використовують як довідка поки гра не почалася при натисканні клавіші «F1»;

Вхідні дані: нет;

Вихідних даних: нет;

3. procedure ochki (score: word);

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

Вхідні данные:

Score — кількість набраних протягом гри очков;

Вихідних даних: нет;

Основная программа

1. Procedure initgr;

Призначення: инициализирует графіку як vgahi;

Вхідні дані: нет;

Вихідних даних: нет;

2. Procedure vostanovka_colors;

Призначення: відновлює кольору зі стандартними оттенками;

Вхідні дані: нет;

Вихідних даних: нет;

Текст программы:

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;

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;

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

level (a, numbering, kol_kub); naverhu_number (numbering); naverhu_liv (liv); naverhu_kubiki (kol_kub, score); dx: =-1; dy: =-1;

{а Є } setcolor (random (14)+1); rectangle (0,21,getmaxx, getmaxy);

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

((x1_dv

ПоказатьСвернуть
Заполнить форму текущей работой