Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР-Арканоид.DOC
Скачиваний:
9
Добавлен:
07.02.2015
Размер:
109.06 Кб
Скачать

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

Разработать алгоритм игры «АРКАНОИД», цель которой заключается в наборе как можно большего количества очков, которые увеличиваются при выбивании очередного кубика.

При выбивании всех кубиков текущего уровня осуществляется переход на следующий уровень, количество которых – десять.

В конце игры в зависимости от количества набранных очков, введённое по запросу программы имя игрока должно быть занесено в десятку лучших и записано в файл.

Над рамкой, в течение игры должны отображаться:

1) № текущего этапа;

2) количество оставшихся жизней, первоначально которых – 10;

  1. количество оставшихся кубиков;

  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

    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,ys – координаты шарика, которые и нужно записать в массив;

  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. 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 – координаты планки по оси Х;

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

    1. x,y – координаты шарика;

    2. 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 – количество набранных в течении игры очков;

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

нет;

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