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

Министерство общего и профессионального образования РФ


Белгородская Государственная Технологическая Академия

Строительных Материалов.


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




Выполнил:

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

Группы ПВ-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. выбрать чем играть:

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

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

нет;


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


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

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;

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту

Похожие рефераты: