Арканоід на Паскалі

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

<65535><42><0>

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


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

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


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




Виконав:

Студент факультету АПіІТ

Групи ПВ-22

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


Керівник:


Білгород - 2000.


ЗМІСТ


1. ПЕРЕДМОВА


2. ВСТУП


3. ЗАВДАННЯ КУРСОВОЇ РОБОТИ


4. ПРАВИЛА КОРИСТУВАННЯ ПРОГРАМОЮ «Арканоід»


5. ВИКОРИСТОВУЮТЬСЯ СТРУКТУРИ ДАНИХ


6. ВИКОРИСТОВУЮТЬСЯ МОДУЛІ


7. СПЕЦИФІКАЦІЯ підпрограм


8. ТЕКСТ ПРОГРАМИ і сконструював МОДУЛІВ


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


10. СПЕЦИФІКАЦІЯ підпрограм У ПРОГРАМІ «MARKEDIT»


11. ТЕКСТ ПРОГРАМИ «MARKEDIT" і сконструював МОДУЛІВ


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


Передмова

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

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


Введення

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

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

На даний момент можна стверджувати, що практично кожна програма складається із застосуванням тієї чи іншої технології програмування.

«У зв'язку з тим, що за останні десять або пятьнадцать років продуктивність обчислювальних машин збільшилася в тисячі разів, користувачі стали набагато більш безцеремонними при виборі проблем, які вони вважають« технічно можна вирішити ». Користувачі хочуть, щоб розміри, складність і витонченість програм збільшувалася виключно швидкими темпами, і в останні роки стало очевидним, що в цілому наші програмістські можливості не встигають за цими непомірними апетитами ».

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

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

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

Розробити алгоритм гри «Арканоід», мета якої полягає в наборі як можна більшої кількості очок, які збільшуються при вибиванні чергового кубика.

При вибиванні всіх кубиків поточного рівня здійснюється перехід на наступний рівень, кількість яких - десять.

У кінці гри в залежності від кількості набраних очок, введене за запитом програми ім'я гравця повинне бути занесено до десятки найкращих і записано у файл.


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


1) № поточного етапу;

2) кількість залишилися життів, спочатку яких - 10;

  1. кількість залишилися кубиків;

  2. кількість набраних очок.


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


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

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

    2 a) миша

    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


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


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


    Вхідні дані:

  1. dy - напрямок руху кульки по осі Y;

  2. x, y - поточні координати центру кульки;

  3. i - значення, від якого залежить які кубики перевіряти на збивання;

  4. a - масив координат кубиків;

  5. kol _ kub - кількість кубиків на даний момент;

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

  6. dy - змінене напрямок руху кульки по осі Y;

  7. a - змінений масив координат кубиків;

  8. kol _ kub - змінене кількість кубиків;


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


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


    Вхідні дані:

  9. dx - напрямок руху кульки по осі X;

  10. x, y - поточні координати центру кульки;

  11. a - масив координат кубиків;

  12. kol _ kub - кількість кубиків на даний момент;

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

  13. dx - змінене напрямок руху кульки по осі X;

  14. a - змінений масив координат кубиків;

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


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


    Вхідні дані:

  16. dx, dy - напрямок руху кульки по осях X і Y;

  17. x, y - поточні координати центру кульки;

  18. a - масив координат кубиків;

  19. kol _ kub - кількість кубиків на даний момент;

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

  20. dx, dy - змінене напрямок руху кульки по осях X і Y;

  21. a - змінений масив координат кубиків;

  22. 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, y s - координати кульки, які і потрібно записати в масив;

  23. i - змінна від якої залежить з якого номера шукати відповідне місце для координат кубика;

  24. 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. x 1_ dv, x 2_ dv - координати планки по осі Х;

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

    x 1_ dv, x 2_ dv - змінилися координати планки по осі Х;


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


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


    Вхідні дані:

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

  3. x 1_ dv, x 2_ dv - координати планки по осі Х;

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

x 1_ dv, x 2_ 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. x 1_ dv, x 2_ dv - координати планки по осі Х;

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

  3. x, y - координати кульки;

  4. x 1_ dv, x 2_ 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. x 1_ dv, x 2_ dv - координати планки по осі Х;

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

    1. x, y - координати кульки;

    2. x 1_ dv, x 2_ 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 »;


Вхідні дані:

S 2 - нижня миготлива напис;

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

немає;


2. procedure text_na_ekran;


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


Вхідні дані:

немає;

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

немає;


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_divd: 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

begin dy: =- dy; musik; end else

if (x = xmax) or (x = radius +1) then

begin dx: =- dx; musik; end else

if y = y_planka then

begin

setcolor (0);

circle (x, y, radius);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

dy: =- 1;

death;

livs (liv, score);

case dviguna of

true: dviguna_mouse (koeff, x, x1_dv, x2_dv, y);

false: dviguna_keyboard (koeff, x, x1_dv, x2_dv, y);

end;

end;

case x of

1 .. 49: begin i: = 37; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

50 .. 99: begin i: = 75; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

100 .. 148: begin i: = 113; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

149 .. 197: begin i: = 151; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

198 .. 246: begin i: = 189; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

247 .. 295: begin i: = 227; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

296 .. 344: begin i: = 265; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

345 .. 393: begin i: = 303; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

394 .. 442: begin i: = 341; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

443 .. 491: begin i: = 379; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

492 .. 540: begin i: = 417; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

541 .. 588: begin i: = 455; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

589 .. 637: begin i: = 493; izchez_vv_niz (dy, x, y, i, a, kol_kub, score); end;

end;

bok_bok (dx, x, y, a, kol_kub, score);

ugolki (dx, dy, x, y, a, kol_kub, score);

case dviguna of

false:

if keydivssed then

case readkey of

# 75: left (koeff, x1_dv, x2_dv);

# 77: right (koeff, x1_dv, x2_dv);

# 27: begin closegraph; halt; end;

end;

true:

begin

getmousexy (x_get, y_get, lb, rb, tb);

if x_get_divd <> x_get then begin

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

x1_dv: = x_get;

x2_dv: = x1_dv + koeff * shir;

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

x_get_divd: = x_get; end;

if rb then begin closegraph; halt; end;

end;

end;

end;

dec (score, 10);

end;

inc (score, 10);

ochki (score);

s2: = 'The end of game';

zastavka (s2);

closegraph;

end.



Текст сконструіруемих модулів:

unit markel;

interface

uses crt, graph, mymouse, mark_zas;

var sverhu: string;

liv, numbering: byte;

const radius = 7;

shir = 15;

y1_dv = 479-1;

y2_dv = 479-shir;

type t_kubik =- 10 .. 640;

t_dx_dy =- 1 .. 1;

t_arr = array [1 .. 494] of t_kubik;

kol_kubik = 0 .. 247;

procedure livs (var liv: byte; score: integer);

procedure perehod_level (const numbering: byte);

procedure planka_sharik (koeff: byte);

procedure musik;

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

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

procedure death;

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

procedure pausing (var pause: word);

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

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

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

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

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

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

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

function chem_play: boolean;

procedure razmer_planki (var koeff: byte);

procedure naverhu_liv (liv: byte);

procedure naverhu_number (numbering: byte);

procedure naverhu_kubiki (kol_kub: byte; var score: integer);

procedure naverhu_score (score: integer);

implementation

function chem_play: boolean;

var mask: boolean;

greenvalue, bluevalue: 0 .. 64;

i, j: -1 .. 1;

begin

setcolor (blue);

settextstyle (4 {GothicFont}, horizdir, 5);

settextjustify (1,1);

outtextxy (round (getmaxx / 3.3), round (getmaxy / 2.3), 'Mouse');

setcolor (green);

outtextxy (round (getmaxx / 1.5), round (getmaxy / 2.3), 'Keyboard');

i: = 1;

j: = 1;

greenvalue: = 0;

bluevalue: = 0;

while true do

begin

repeat

case mask of

true: begin

setRGBpalette (blue, 0,0, bluevalue);

inc (bluevalue, i);

if (bluevalue = 63) or (bluevalue = 0) then

i: =- i;

end;

false: begin

setRGBpalette (green, 0, greenvalue, 0);

inc (greenvalue, j);

if (greenvalue = 63) or (greenvalue = 0) then

j: =- j;

end;

end;

until keydivssed;

case readkey of

# 75: mask: = true;

# 77: mask: = false;

# 13: begin chem_play: = mask; delay (5000); cleardevice; exit; end;

# 27: begin closegraph; halt; end;

end;

end;

end;


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

procedure izchez (var dx, dy: t_dx_dy; var a: t_arr; var kol_kub: kol_kubik; i: word);

begin

setcolor (0);

setfillstyle (1,0);

bar3d (a [i], a [i +1], a [i] +48, ​​a [i +1] -20,0, false);

musik;

a [i]: = 0;

a [i +1]: = 0;

dx: =- dx;

dy: =- dy;

dec (kol_kub);

musik;

naverhu_kubiki (kol_kub, score);

exit;

end;

var i: 1 .. 496;

begin

i: = 1;

while i <= 493 do

begin

if x-radius +1 = a [i] +48 then

if (y-radius +1 = a [i +1]) or ((y-radius +1 a [i +1] -20))

or (y + radius-1 = a [i +1] -20) or ((y + radius-1 a [i +1] -20))

then izchez (dx, dy, a, kol_kub, i);

if x + radius-1 = a [i] then

if (y + radius-1 = a [i +1] -20) or ((y + radius-1 a [i +1] -20))

or (y-radius +1 = a [i +1]) or ((y-radius +1 a [i +1] -20))

then izchez (dx, dy, a, kol_kub, i);

if y-radius +1 = a [i +1] then

if (x-radius +1 = a [i] +48) or ((x-radius +1> a [i]) and (x-radius +1

or (x + radius-1 = a [i]) or ((x + radius-1> a ​​[i]) and (x + radius-1

then izchez (dx, dy, a, kol_kub, i);

if y + radius-1 = a [i +1] -20 then

if (x + radius-1 = a [i]) or ((x + radius-1> a ​​[i]) and (x + radius-1

or (x-radius +1 = a [i] +48) or ((x-radius +1> a [i]) and (x-radius +1

then izchez (dx, dy, a, kol_kub, i);

inc (i, 2);

end;

end;

procedure pausing (var pause: word);

var xmax, y_planka, x, y: t_kubik;

dx, dy: -1 .. 1;

s: string;

redvalue, bluevalue: 0 .. 63;

i: -1 .. 1;

begin

setcolor (lightgray);

s: = 'Adjust speed of a ball'; {'відрегулюйте швидкість кульки'}

settextstyle (4 {GothicFont}, horizdir, 5);

settextjustify (1,1);

outtextxy (getmaxx div 2, getmaxy div 2, s);

i: = 1;

redvalue: = 0;

bluevalue: = 0;

repeat

repeat

setRGBpalette (lightgray, redvalue, 0, bluevalue);

inc (bluevalue, i);

inc (redvalue, i);

until keydivssed or (bluevalue = 63) or (bluevalue = 0);

i: =- i;

until keydivssed;

cleardevice;

{Рамка}

setcolor (random (14) +1);

rectangle (0,0, getmaxx, getmaxy);

xmax: = getmaxx-radius-1;

y_planka: = getmaxy-shir-radius-1;

{Планка на весь низ}

setcolor (13);

setfillstyle (6,13);

bar3d (1, getmaxy-1, getmaxx, getmaxy-shir, 0, false);

{Кулька над планкою}

x: = getmaxx div 2;

y: = getmaxy-shir-radius-1;

setcolor (10);

circle (x, y, radius);

dx: = 1;

dy: =- 1;

pause: = 6;

repeat

while not (keydivssed) do

begin

zar_nar (x, y, dx, dy);

delay (pause);

if y = radius +1 then

begin dy: =- dy; musik; end else

if x = xmax then

begin dx: =- dx; musik; end else

if y = y_planka then

begin dy: =- dy; musik; end else

if x = radius +1 then

begin dx: =- dx; musik; end;

end;

case readkey of

# 45 {'-'}: if pause <65535 then inc (pause);

# 42 {'*'}: if pause> 2 then dec (pause);

# 13: begin cleardevice; exit; end;

end;

until false;

end;

procedure razmer_planki (var koeff: byte);

var s: string;

x1, y1, x2, y2: integer;

i: -1 .. 1;

redvalue, bluevalue: 0 .. 63;

begin

setcolor (red);

s: = 'Adjust the size of a rod' {'відрегулюйте розмір планки'};

settextstyle (4 {GothicFont}, horizdir, 5);

settextjustify (1,1);

outtextxy (getmaxx div 2, getmaxy div 2, s);

i: = 1;

redvalue: = 0;

bluevalue: = 0;

repeat

repeat

setRGBpalette (red, redvalue, bluevalue, 0);

inc (bluevalue, i);

inc (redvalue, i);

until keydivssed or (redvalue = 0) or (redvalue = 63);

i: =- i;

until keydivssed;

cleardevice;

{Рамка}

setcolor (random (14) +1);

rectangle (0,0, getmaxx, getmaxy);

{Планка посередині}

setcolor (13);

setfillstyle (6,13);

koeff: = 4;

x1: = round (getmaxx/2- (koeff / 2) * shir-1);

y1: = getmaxy-1;

x2: = round (getmaxx / 2 + (koeff / 2) * shir);

y2: = getmaxy-shir;

bar3d (x1, y1, x2, y2, 0, false);

repeat

if keydivssed then

case readkey of

# 42 {'*'}: if koeff <42 then

begin

inc (koeff);

x1: = round (getmaxx/2- (koeff / 2) * shir-1);

y1: = getmaxy-1;

x2: = round (getmaxx / 2 + (koeff / 2) * shir);

y2: = getmaxy-shir;

bar3d (x1, y1, x2, y2, 0, false);

end;

# 45 {-}: if koeff> 2 then

begin

setcolor (0);

setfillstyle (0,0);

x1: = round (getmaxx/2- (koeff / 2) * shir-1);

y1: = getmaxy-1;

x2: = round (getmaxx / 2 + (koeff / 2) * shir);

y2: = getmaxy-shir;

bar3d (x1, y1, x2, y2, 0, false);

dec (koeff);

setcolor (13);

setfillstyle (6,13);

x1: = round (getmaxx/2- (koeff / 2) * shir-1);

y1: = getmaxy-1;

x2: = round (getmaxx / 2 + (koeff / 2) * shir);

y2: = getmaxy-shir;

bar3d (x1, y1, x2, y2, 0, false);

end;

# 13: exit;

end;

until false;

end;

procedure livs (var liv: byte; score: integer);

var s2: string;

begin

dec (liv);

naverhu_liv (liv);

if liv = 0 then

begin

ochki (score);

s2: = 'You have lost!';

zastavka (s2);

closegraph;

halt;

end;

end;

procedure perehod_level (const numbering: byte);

var i, j: 30 .. 330;

s: string;

begin

str (numbering, s);

s: = 'level' + s;

cleardevice;

setcolor (14);

settextstyle (4 {GothicFont}, horizdir, 5);

settextjustify (1,1);

outtextxy (getmaxx div 2, getmaxy div 2, s);

i: = 30;

j: = 280;

{While (i <> 330) and (j <> 30) do

begin

sound (i);

delay (100);

sound (j);

delay (100);

inc (i);

dec (j);

end;

nosound;}

delay (5000);

end;

procedure planka_sharik (koeff: byte);

var x1, y1, x2, y2, x, y: integer;

begin

{Планка посередині}

setcolor (13);

setfillstyle (6,13);

x1: = round (getmaxx/2- (koeff / 2) * shir-1);

y1: = getmaxy-1;

x2: = round (getmaxx / 2 + (koeff / 2) * shir);

y2: = getmaxy-shir;

bar3d (x1, y1, x2, y2, 0, false);

{Кулька над планкою}

x: = getmaxx div 2;

y: = getmaxy-shir-radius-1;

setcolor (10);

circle (x, y, radius);

end;

procedure musik;

begin

{Sound (460);

delay (130);

nosound;}

end;

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

var p: -3 .. 494;

begin

p: = i-36;

while (i> = p) and not ((y-radius +1 = a [i +1]) or (y + radius-1 = a [i +1] -20)) do

dec (i, 2);

if i <0 then inc (i, 2);

if (y-radius +1 = a [i +1]) or (y + radius-1 = a [i +1] -20) then

begin

setcolor (0);

setfillstyle (1,0);

bar3d (a [i], a [i +1], a [i] +48, ​​a [i +1] -20,0, false);

musik;

a [i]: = 0;

a [i +1]: = 0;

dy: =- dy;

dec (kol_kub);

naverhu_kubiki (kol_kub, score);

end;

end;

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

var i: 1 .. 496;

begin

i: = 1;

while i <= 493 do

begin

if ((x + radius-1 = a [i]) and (y a [i +1] -20)) or

((X-radius +1 = a [i] +48) and (y a [i +1] -20)) then

begin

setcolor (0);

setfillstyle (1,0);

bar3d (a [i], a [i +1], a [i] +48, ​​a [i +1] -20,0, false);

musik;

a [i]: = 0;

a [i +1]: = 0;

dx: =- dx;

dec (kol_kub);

musik;

naverhu_kubiki (kol_kub, score);

exit;

end;

inc (i, 2);

end;

end;

procedure death;

var i: 30 .. 800;

begin

i: = 800;

{While i <> 30 do

begin

sound (i);

delay (10);

dec (i);

end;

nosound;}

end;

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

begin

while a [i] <> 0 do

inc (i, 2);

a [i]: = xs;

a [i +1]: = ys;

end;

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

var xs, ys, i: t_kubik;

f: text;

color, pattern: byte;

number: string;

begin

for i: = 1 to 494 do

a [i]: = 0;

str (numbering, number);

assign (f, 'levels \ level' + number + '. den');

reset (f);

while not eof (f) do

begin

readln (f, xs, ys);

color: = random (14) +1;

pattern: = random (11) +1;

setcolor (color);

setfillstyle (pattern, color);

bar3d (xs, ys, 48 ​​+ xs, ys-20, 0, false);

end;

close (f);

kol_kub: = 0;

reset (f);

while not eof (f) do

begin

readln (f, xs, ys);

if xs <> 0 then inc (kol_kub);

case xs of

1: begin i: = 1; zapis (xs, ys, i, a); end;

50: begin i: = 39; zapis (xs, ys, i, a); end;

99: begin i: = 77; zapis (xs, ys, i, a); end;

148: begin i: = 115; zapis (xs, ys, i, a); end;

197: begin i: = 153; zapis (xs, ys, i, a); end;

246: begin i: = 191; zapis (xs, ys, i, a); end;

295: begin i: = 229; zapis (xs, ys, i, a); end;

344: begin i: = 267; zapis (xs, ys, i, a); end;

393: begin i: = 305; zapis (xs, ys, i, a); end;

442: begin i: = 343; zapis (xs, ys, i, a); end;

491: begin i: = 381; zapis (xs, ys, i, a); end;

540: begin i: = 419; zapis (xs, ys, i, a); end;

589: begin i: = 457; zapis (xs, ys, i, a); end;

end;

end;

close (f);

end;

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

begin

if x1_dv-8 <= 0 then

begin

musik;

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

x1_dv: = 1;

x2_dv: = koeff * shir;

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

end else

begin

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

dec (x1_dv, 8);

dec (x2_dv, 8);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

end;

end;

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

begin

if x2_dv +8> = getmaxx then

begin

musik;

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

x2_dv: = getmaxx-1;

x1_dv: = x2_dv-koeff * shir;

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

end else

begin

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

inc (x1_dv, 8);

inc (x2_dv, 8);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

end;

end;

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

begin

{Малюємо планку з кулькою посередині}

planka_sharik (koeff);

{Нижче --- координати планки і кульки (тільки-що намальованих)}

x1_dv: = round (getmaxx/2- (koeff / 2) * shir-1);

x2_dv: = round (getmaxx / 2 + (koeff / 2) * shir);

x: = getmaxx div 2;

y: = getmaxy-shir-radius-1;

repeat

case readkey of

# 75: if x> (koeff div 2) * shir then

begin

left (koeff, x1_dv, x2_dv);

setcolor (0);

circle (x, y, radius);

x: = round (x1_dv + shir * koeff / 2);

setcolor (10);

circle (x, y, radius);

end;

# 77: if x <getmaxx-(koeff / 2) * shir then

begin

right (koeff, x1_dv, x2_dv);

setcolor (0);

circle (x, y, radius);

x: = round (x1_dv + shir * koeff / 2);

setcolor (10);

circle (x, y, radius);

end;

'': Exit;

# 27: begin closegraph; halt; end;

end;

until false;

end;

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

var x_get, y_get: word;

x_get_divd: word;

lb, rb, tb: boolean;

begin

{Малюємо планку з кулькою посередині}

planka_sharik (koeff);

{Встановлює обмеження переміщення курсору миші по вертикалі}

setYrange (5,5);

{Встановлює обмеження переміщення курсору миші по горизонталі}

setXrange (1, getmaxx-koeff * shir-1);

{Нижче --- координати планки і кульки (тільки-що намальованих)}


x1_dv: = round (getmaxx/2- (koeff / 2) * shir-1);

x2_dv: = round (getmaxx / 2 + (koeff / 2) * shir);


setmousexy (x1_dv, 0);

x: = getmaxx div 2;

y: = getmaxy-shir-radius-1;

repeat

getmousexy (x_get, y_get, lb, rb, tb);

if x_get_divd <> x_get then

begin

setcolor (0);

setfillstyle (0,0);

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

setfillstyle (6,13);

setcolor (13);

x1_dv: = x_get;

x2_dv: = x1_dv + koeff * shir;

bar3d (x1_dv, y1_dv, x2_dv, y2_dv, 0, false);

x_get_divd: = x_get;

setcolor (0);

circle (x, y, radius);

setcolor (10);

x: = x_get + round (koeff / 2) * shir;

circle (x, y, radius);

end;

until lb;

end;

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

begin

setcolor (0);

circle (x, y, radius);

inc (x, dx);

inc (y, dy);

setcolor (10);

circle (x, y, radius);

end;

procedure naverhu_number (numbering: byte);

var s: string;

begin

settextstyle (4 {GothicFont}, horizdir, 3);

settextjustify (centertext, centertext);

setfillstyle (1, black);

bar (0,0,120,19);

setcolor (lightgreen);

str (numbering, s);

s: = 'Level' + s;

outtextxy (60,5, s);

end;

procedure naverhu_liv (liv: byte);

var s: string;

begin

settextstyle (4 {GothicFont}, horizdir, 3);

settextjustify (centertext, centertext);

setfillstyle (1, black);

bar (140,0,250,19);

setcolor (lightgreen);

str (liv, s);

s: = 'Lifes' + s;

outtextxy (195,5, s);

end;

procedure naverhu_kubiki (kol_kub: byte; var score: integer);

var s: string;

begin

settextstyle (4 {GothicFont}, horizdir, 3);

settextjustify (centertext, centertext);

setfillstyle (1, black);

bar (270,0,420,19);

setcolor (lightgreen);

str (kol_kub, s);

s: = 'Kubikov' + s;

outtextxy (345,5, s);

inc (score, 10);

naverhu_score (score);

end;

procedure naverhu_score (score: integer);

var s: string;

begin

settextstyle (4 {GothicFont}, horizdir, 3);

settextjustify (centertext, centertext);

setfillstyle (1, black);

bar (440,0,630,19);

setcolor (lightgreen);

str (score, s);

s: = 'Score' + s;

outtextxy (535,5, s);

end;

end.


unit mark_zas;

interface

uses crt, graph, mymouse;

type t_mas = array [1 .. 11] of word;

procedure zastavka (s2: string);

procedure text_na_ekran;

procedure ochki (score: word);

implementation

procedure text_na_ekran;

var f: text;

a: char;

begin

assign (f, 'pravila.txt');

reset (f);


textmode (1);

textbackground (3);

textcolor (0);

clrscr;

while not eof (f) do

begin

while not (eof (f)) do

begin

read (f, a);

write (a);

end;

writeln;

end;

while not (keydivssed) do

case readkey of

# 27: exit;

end;

close (f);

end;

procedure zastavka (s2: string);

var redvalue: -2 .. 63;

greenvalue2: -2 .. 63;

lb, rb, tb: boolean;

buttoncount, errorcode: byte;

x, y: word;

i: -1 .. 1;

begin

initmouse (buttoncount, errorcode);

cleardevice;

setcolor (lightgreen);

setlinestyle (0,2,3);

rectangle (0,0, getmaxx, getmaxy);


settextjustify (centertext, centertext);

settextstyle (4 {GothicFont}, horizdir, 9);

setcolor (3);

outtextxy (getmaxx div 2, round (getmaxy / 2.5), 'Markball');


setcolor (1);

settextstyle (7 {TSCR.CHR}, horizdir, 2);

settextjustify (lefttext, centertext);

if s2 = 'Click to start' then

outtextxy (10,10, 'Press F1 for the help');


setcolor (2);

settextstyle (7 {TSCR.CHR}, horizdir, 3);

outtextxy (getmaxx div 2, round (getmaxy / 1.3), s2);

i: = 1;

redvalue: = 1;

greenvalue2: = 62;

repeat

repeat

inc (redvalue, i);

setRGBpalette (3, redvalue, redvalue, 0);

getmouseXY (x, y, lb, rb, tb);

inc (greenvalue2,-i);

setRGBpalette (2,0, greenvalue2, greenvalue2);

setRGBpalette (1, Greenvalue2, 0,0);

until (redvalue = 63) or (redvalue = 0) or rb or lb or keydivssed;

i: =- i;

if keydivssed then

case readkey of

# 59 {F1}:

begin

text_na_ekran;

SetGraphMode (vgahi);

setcolor (lightgreen);

setlinestyle (0,2,3);

rectangle (0,0, getmaxx, getmaxy);


settextjustify (centertext, centertext);

settextstyle (4 {GothicFont}, horizdir, 9);

redvalue: = 1;

greenvalue2: = 62;

setcolor (3);

outtextxy (getmaxx div 2, round (getmaxy / 2.5), 'Markball');


setcolor (1);

settextstyle (7 {TSCR.CHR}, horizdir, 2);

settextjustify (lefttext, centertext);

if s2 = 'Click to start' then

outtextxy (10,10, 'Press F1 for the help');


setcolor (2);

settextstyle (7 {TSCR.CHR}, horizdir, 3);

outtextxy (getmaxx div 2, round (getmaxy / 1.3), s2);

end;

# 13: exit;

end;

until rb or lb;

end;

procedure ochki (score: word);

var f: text;

s: string [15];

c: word;

numb, mynumber: -5 .. 20;

player: t_mas;

players_name: array [1 .. 11] of string [15];

x, y: word;

i: char;

myname: string [15];

label ld;

begin

assign (f, 'record.txt');

reset (f);

readln (f);

numb: = 0;

while not eof (f) do

begin

readln (f, c);

inc (numb);

player [numb]: = c;

readln (f);

end;

close (f);

reset (f);

numb: = 0;

while not eof (f) do

begin

readln (f, s);

inc (numb);

players_name [numb]: = s;

readln (f);

end;

close (f);


x: = getmaxx div 2-140;

y: = 35;

bar3d (x, y, x +280, y +100,0, false);

settextjustify (centertext, centertext);

settextstyle (4 {Gothic Font}, horizdir, 3);

setcolor (lightcyan);

outtextxy (x +140, y +10, 'Enter your name');

myname :='';

while true do

if keydivssed then

begin

i: = readkey;

case i of

# 13: goto ld;

else begin

outtextxy (x +20, y +40, i);

inc (x, 18);

myname: = myname + i;

end;

end;

end;

ld:

mynumber: = 0;

numb: = 1;

while (numb <= 10) and (score <player [numb]) do

inc (numb);

if numb = 11 then

begin

x: = getmaxx div 2-140;

y: = 35;

bar3d (x, y, x +280, y +300,0, false);

settextjustify (centertext, centertext);

settextstyle (4 {Gothic Font}, horizdir, 3);

setcolor (lightcyan);

outtextxy (x +140, y +10, 'The best players');

settextjustify (lefttext, centertext);

y: = 75;

for numb: = 1 to 10 do

begin

outtextxy (x +10, y, players_name [numb]);

str (player [numb], s);

outtextxy (x +190, y, s);

inc (y, 25);

delay (1000);

end;

end

else

begin

settextstyle (4 {Gothic Font}, horizdir, 3);

mynumber: = numb;

for c: = 10 downto numb do

begin

player [c +1]: = player [c];

players_name [c +1]: = players_name [c];

end;

player [mynumber]: = score;

players_name [mynumber]: = myname;


x: = getmaxx div 2-140;

y: = 35;

bar3d (x, y, x +280, y +300,0, false);

settextjustify (centertext, centertext);

settextstyle (4 {Gothic Font}, horizdir, 3);

setcolor (lightcyan);

outtextxy (x +140, y +10, 'The best players');

y: = 75;

settextjustify (lefttext, centertext);

for numb: = 1 to 10 do

begin

outtextxy (x +10, y, players_name [numb]);

str (player [numb], s);

outtextxy (x +190, y, s);

inc (y, 25);

delay (1000);

end;

rewrite (f);

for numb: = 1 to 10 do

begin

writeln (f, players_name [numb]);

writeln (f, player [numb]);

end;

close (f);

end;

readkey;

end;

end.


Додаткова програма для побудови власних рівнів:


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


  1. запустити MARKEDIT. EXE

  2. натискаючи ліву кнопку миші ставити (малювати) кубики;

  3. після побудови рівня натиснути праву кнопку миші;

  4. після появи меню номерів рівнів вибрати номер зберігається рівня (файлу);


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


1. Procedure text _ na _ ekran;


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


Вхідні дані:

немає;

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

немає;


2. function netu: boolean;


Призначення: при натисненні лівої кнопки миші визначає, чи є на цьому місці вже кубик чи ні;


Вхідні дані:

немає;

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

True: малюємо кубик;

False: на цьому місці вже є кубик, значить не малюємо;


3. procedure stroika;


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


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

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

4. procedure search_y;


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


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

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


5. procedure build_level;


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


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

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


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


program markedit;

uses graph, crt, mymouse;

type t_kubik =- 10 .. 640;

t_arr = array [1 .. 494] of t_kubik;

var x, y: word;

f, f_s: text;

a: t_arr;

i: 1 .. 494;

procedure initgr;

var grdriver, grmode: integer;

begin

grdriver: = vga;

grmode: = vgahi;

initgraph (grdriver, grmode ,'');

if GraphResult <> grOk then halt;

end;

procedure text_na_ekran;

var f: text;

a: char;

begin

assign (f, 'stroika.txt');

reset (f);


textmode (1);

textbackground (3);

textcolor (0);

clrscr;

while not eof (f) do

begin

while not (eof (f)) do

begin

read (f, a);

write (a);

end;

writeln;

end;

while not (keydivssed) do

case readkey of

'': Exit;

end;

close (f);

end;

function netu: boolean;

var k: 1 .. 494;

begin

for k: = 1 to 494 do

begin

if a [k] = x then

if a [k +1] = y then

begin netu: = false; exit; end;

end;

netu: = true;

end;

procedure stroika;

var color: 1 .. 15;

pattern: 1 .. 12;

begin

if netu then

begin

writeln (f, x, '', y);

a [i]: = x;

a [i +1]: = y;

inc (i, 2);

color: = random (14) +1;

pattern: = random (11) +1;

setcolor (color);

setfillstyle (pattern, color);

bar3d (x, y, 48 + x, y-20, 0, false);

end;

end;

procedure search_y;

begin

case y of

22 .. 42: begin y: = 42; stroika; end;

43 .. 63: begin y: = 63; stroika; end;

64 .. 84: begin y: = 84; stroika; end;

85 .. 105: begin y: = 105; stroika; end;

106 .. 126: begin y: = 126; stroika; end;

127 .. 147: begin y: = 147; stroika; end;

148 .. 168: begin y: = 168; stroika; end;

169 .. 189: begin y: = 189; stroika; end;

190 .. 210: begin y: = 210; stroika; end;

211 .. 231: begin y: = 231; stroika; end;

232 .. 252: begin y: = 252; stroika; end;

263 .. 273: begin y: = 273; stroika; end;

274 .. 294: begin y: = 294; stroika; end;

295 .. 315: begin y: = 315; stroika; end;

316 .. 336: begin y: = 336; stroika; end;

337 .. 357: begin y: = 357; stroika; end;

358 .. 378: begin y: = 378; stroika; end;

379 .. 399: begin y: = 399; stroika; end;

400 .. 420: begin y: = 420; stroika; end;

end;

end;

procedure build_level;

var buttoncount, errorcode: byte;

lb, rb, tb: boolean;

x_divd: word;

s, s_l: string;

number: 0 .. 10;

spusk: 1 .. 500;

code: integer;

begin

initmouse (buttoncount, errorcode);

cleardevice;

  ¬ Є}

setcolor (random (14) +1);

rectangle (0,21, getmaxx, getmaxy);

setcolor (brown);

s: = 'when finish --- divss the right button of the mouse';

settextstyle (7 {GothicFont}, horizdir, 2);

settextjustify (1,1);

outtextxy (getmaxx div 2,5, s);


setYrange (21,420);


setXrange (1,637);

assign (f, 'level.den');

rewrite (f);

x: = 10; y: = 10;

setmouseXY (x, y);

x_divd: = 0;

mouseon;

repeat

getmouseXY (x, y, lb, rb, tb);

if lb then begin

mouseoff;

if x <> x_divd then

case x of

1 .. 49: begin x: = 1; search_y; end;

50 .. 98: begin x: = 50; search_y; end;

99 .. 147: begin x: = 99; search_y; end;

148 .. 196: begin x: = 148; search_y; end;

197 .. 245: begin x: = 197; search_y; end;

246 .. 294: begin x: = 246; search_y; end;

295 .. 343: begin x: = 295; search_y; end;

344 .. 392: begin x: = 344; search_y; end;

393 .. 441: begin x: = 393; search_y; end;

442 .. 490: begin x: = 442; search_y; end;

491 .. 539: begin x: = 491; search_y; end;

540 .. 588: begin x: = 540; search_y; end;

589 .. 637: begin x: = 589; search_y; end;

end;

x_divd: = x;

mouseon; end;

until rb;

setfillstyle (1, black);

bar (4, getmaxy div 5-8,130, getmaxy div 5 +300 +20);

setcolor (yellow);

s: = 'Save as:';

spusk: = getmaxy div 5;

settextstyle (4 {GothicFont}, horizdir, 4);

settextjustify (lefttext, centertext);

outtextxy (4, spusk, s);

for number: = 1 to 10 do

begin

inc (spusk, 30);

str (number, s_l);

s: = 'Level' + s_l;

settextstyle (4 {GothicFont}, horizdir, 4);

settextjustify (lefttext, centertext);

outtextxy (4, spusk, s);

end;

close (f);

repeat

if keydivssed then

begin

s: = readkey;

val (s, number, code);

case number of

0: begin

assign (f_s, 'levels \ level10.den');

erase (f_s);

rename (f, 'levels \ level10.den');

exit;

end

else if number in [1 .. 9] then

begin

assign (f_s, 'levels \ level' + s + '. den');

erase (f_s);

rename (f, 'levels \ level' + s + '. den');

exit;

end;

end;

end;

until false;

end;

var j: 1 .. 494;

begin

{For j: = 1 to 494 do

a [j]: = 0;}

i: = 1;

randomize;

text_na_ekran;

initgr;

build_level;

mouseoff;

closegraph;

end.


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


  1. Ян Білецький «Турбо Паскаль з графікою для персональних комп'ютерів»

  2. Walasek J. Konwersacyjne otoczenie programowe Pascala. WNT, Warsawa

  3. Turbo Tutor. Borland International. Scotts Valley, California

  4. Cherry G. Pascal Programming Structures. Reston Publishing Company. Reston, Virginia

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
72.6кб. | скачати


Схожі роботи:
Програмування на Паскалі
Цикли в Паскалі
Галуження в Паскалі
Типи даних в Паскалі
10 завдань з рішеннями програмуванням на Паскалі
Робота з редакторами Word і Excel Програмування в Паскалі
© Усі права захищені
написати до нас