Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Титульный лист (специальный бланк);
Лист задания (специальный бланк)
Содержание;
Введение;
Заключение;
Список литературы;
Приложение А Схемы алгоритмов
Приложение Б Листинг программы
1 Заголовок
1.1 «Эпирский лучник»
В рамках курсового проектирования мне было предложено разработать приложение, реализующее игру. В игре должны присутствовать элементы объектно-ориентированного проектирования, то есть должны быть применены объекты.
Приложение должно реализовывать компьютерную игру в виде аркады, в которой игроку надо будет управлять лучником.
Мне очень фильм «Война богов». Она про времена до нашей эры мировой войны, про лук который освободил титанов (сломав им клетку) и началась война богов против титанов.
По мифам древних греков Эпирский лук был оружием богов, его выковал Арес (бог войны).
Этот лук не нуждался в стрелах, этот лук стрелял лучами света, скоростью полета которых можно было управлять.
Поскольку фильм мне понравился, то я решил на его основе разработать сценарий игры и реализовать ее в рамках курсового проектирования.
По мотивам сюжета фильма «Война богов» мной был написан сценарий игры «Эпирский лучник».
Юноша Тесей простой крестьянин, живёт с матерью в деревушке на берегу моря. Он храбр и мужественен; его наставник, местный старик, обучил Тесея владению мечом и копьём. Мать Тесея посещает местный храм, однако Тесей не очень верит в богов. Тем временем деспотичный и властный царь Гиперион объявляет богам войну за то, что они позволили умереть его семье: он хочет отыскать Эпирский Лук, сделанный руками бога войны Ареса, и освободить титанов от тысячелетнего заточения в горах Тартара. Войско Гипериона постепенно завоёвывает Элладу, в одном из храмов которой должен храниться лук.
По моему сценарию после освобождения титанов Тесей нашел этот лук, и он увидел разъяренные толпы титанов, больше ничего не кроме защитить свой город.
Город Тесею пришлось защищаться от Титанов , их было больше и больше и они были сильнее и сильней.10 волн ужасных титанов нужно будет одолеть Тесею ради спасения своего народа.
1.2 Игра про Тесея или же Эпирского лучника. Выполнена в двух жанрах можно классифицировать как аркада или Survival. В данном случае игра более подходит под жанр Survival.
Аркада (англ. arcade) распространённый в постсоветской индустрии компьютерных игр термин, обозначающий компьютерные игры с нарочно примитивным игровым процессом. Некоторые журналы о компьютерных играх выделяют их как отдельный жанр и причисляют к ним платформеры
В мировой практике, а также в российской прессе, аркадами называются игры для aркaдных игровых автоматов. Это не отдельный жанр игр, а скорее игровое направление. Компьютерная игра называется «аркадной» в том случае, если она напрямую портирована с автомата или же схожа по концепции с играми для автоматов. Например, к аркадным играм относятся все проекты жанров «файтинг» (fighting), часть игр жанра «гонки» (racing), часть игр жанра «шутер» (shooter). К ним никогда не относятся ролевые игры, симуляторы (кроме т. н. «танцевальных симуляторов»), стратегии.
Survival ( примерно рус. выживание жанр компьютерных игр, появившийся в начале и сформировавшийся к концу 1990-х годов. Игры этого жанра содержат в себе различные специфические составляющие, главной целью которых является нагнетание, подобно литературе ужасов и фильмам ужасов, атмосферы страха и тревоги. Хотя, подобно играм жанров action, action-adventure и 3D-шутера, survival часто включает в себя бои и уничтожение противников, эта часть игрового процесса сильно затруднена из-за нехватки боеприпасов, низкого здоровья, скорости игрового персонажа или других ограничений. Как правило, survival предлагает игроку пробираться через пугающие лабиринтообразные виртуальные миры, разыскивая способы продвинуться дальше и подвергаясь неожиданным нападениям врагов или просто выжить.
Целью создания этой игры является научиться на практике применять навыки алгоритмизации при создании игры. Игра сделана для отдыха. Она развивает внимательность, реакцию, моторику пальцев, позволяет скрасить досуг и отвлечься от повседневной рутины.
Главной задачей игры является защитить свой город от Титанов.
Тесей со спутниками следуют за Гиперионом, однако солдаты царя разоружают их и отнимают Эпирский Лук, который передают Гипериону. Гиперион предлагает Тесею перейти на его сторону, но тот отказывается и поднимает эллинов на бой с огромным войском Гипериона. Во время боя Гиперион при помощи лука освобождает титанов, которые вступают в
схватку с богами. Тесей же борется с волнами титанов который оказались незамечены и пробираются в город , в конце концов убивает их, хотя и сам погибает от ран. Как герой, спасший свою страну, он возносится на Олимп.
1.3 Тесей может ходить в 2 стороны право и влево, управление стрелочками, при нажатии на пробел, он выпускает стрелу.
Стрела летит вверх, поражая врагов.
Враги в отличии от Тесея могут двигаться в разные стороны как им захочется тем самым сбивая игрока с толку.
Кроме того в функциональность игры должно быть заложено увеличение и уменьшение скоростей ботов и главного персонажа.
Так как ход игры не приостанавливается в течении уровня или при его смене, то необходимо реализовать возможность включения паузы в процессе игры.
1.4 Концепция игры «Эпирский лучник»
Игра объектно-ориентированная. В данной игре используется ABCObjects, модуль ABCPascal. В игре отображаемое на экране является объектами, которые различным способом взаимодействуют между собой.
Например:
Тесей (как объект Pictureabc) перемещается по нажатию на стрелочек. При нажатии на пробел будут появляться стрелы (объект Pictureabc). Если стрела пересечется с врагом, то последний будет уничтожен.
Очки, жизни, рекорды, их ввод и каждый символ при вводе являются объектами.
Обязательно необходимо отображать счетчик жизней и счетчик очков. Это необходимо, так как исчерпание жизней ведет к проигрышу, а на основе набранных в ходе игры очков ведется таблица рекордов.
Таблица рекордов:
Буквы PictureABC, которая как объект может применять свойство PTinside.
Которая при наличии процедуры Mouse Down может считывать был ли клик по объекту и при получении TRUE или False можно выполнять различные действия.
Сама таблица создана из выше упомянутых rectangle(так называемых прямоугольников).
Боты: Все 10 видов . Это тоже объекты. Они двигаются благодаря таймерам, в зависимости от показаний таймера происходит движение, также в нем проверяется уничтожение скрытие и прочие события которые могут произойти программе .
1.5 Модуль Timers используется для движения ботов. Также Timers используется для некоторых проверок определённых условий таких как проверка кол-ва жизней , подсчет очков . А также через Timers работает для проверки создания и уничтожения ботов .
Модуль Events используется для движения главного персонажа. Благодаря модулю Events работает движение по нажатию на определённые клавиши и вызов нужных процедур по нажатию на кнопки пунктов в меню, настройках и т.д.
Модуль ABCObjects самый основой модуль в игре, благодаря ему в игре создаются все объекты, персонажи карты предметы и т.д. Благодаря тому что объекты модуля ABCObjects обладают свойством Visible, Destroy создаются, удаляются, скрываются боты. При нажатии паузы объекты используемые в игре как боты, фон, герой, и.т.д исчезать с экрана . Очки жизни , меню, таблица рекордов, создаётся благодаря модулю ABCObjects
GraphABC этот модуль необходим для того чтобы окно было растянуто на нужное расширение (1024,768), и по умолчанию располагалось на экране в нужном место.
1.6 Описание алгоритмов блок схем
1.7
Мной была выбрана среда Pascal ABC, так как она предоставляет весь необходимый инструментарий для реализации функций приложения, разрабатываемого в рамках курсового проектирования. Язык Pascal понятен и очень удобен, данную среду часто используют для обучения. В среде Pascal можно создавать различные объекты.
Pascal ABC современная программа для программирования сочетающая в себе всю прелесть и простоту языка паскаля и безграничные возможности платформы .NET.
Программирование является одной из самых востребованных сфер деятельности, хороший программист является очень востребованным на рынке труда, причём программирование эта сфера, где профессиональный рост практически не ограничен и можно становится всё лучшим специалистом в течение всей своей жизни наращивая «пузо» авторитета для имени. Программирование это довольна новая сфера деятельности человека, особое развитие она получила во второй половине двадцатого века, с развитием компьютерной техники в этот период началось и глобальное развитие программирования, которое начало применяться в всё больших сферах, программирование с успехом начали использовать на производстве, магазинах и даже при работе автобусных станций и многих других местах.
Со временем программирование завоевало себе огромную сферу влияние, многие коммуникационные системы во многих государствах работают на основе программы, которая задаёт всё основные параметры, которая выполняет система, производство, интернет сервисы, компьютерные игры, мерцающая реклама во всём этом программирование играет огромную роль.
2 Технологическая часть
2.1 Системные требования
Обязательные:
Наличие среды PascalABC.
Windows 95/98/ME/2000/XP/2003/Vista/2008/7/2008 R2.
Клавиатура, мышь, монитор.
Рекомендуемые:
Наличие среды PascalABC.
Windows XP/Vista/2008/7/2008 R2.
Клавиатура, мышь, монитор
4 Гб ОЗУ
процессор Dual Core
2.2 Пользовательский интерфейс.
Меню визуально понятно, выбор пункта меню происходит нажатием левой кнопки мыши на соответствующую картинку в меню. В изменения в настройках происходит нажатием Клавиш q,w,e,r.
В игре управление происходит стрелочками. Стрелка на клавиатуре в вправо движение Тесея в вправо, стрелка влево движение Тесея в влево. Выстреливает Тесей при нажатии пробела.
Враги могут ходить вправо, влево и вниз. Враги двигаются сверху вниз. Однако некоторые враги также могут совершать движения в стороны (вправо и влево).
При проигрыше или победе выводиться Окно ввода рекордов.
Поскольку в модуле ABCObjects среды PascalABC нет возможности вводить информацию, мной была разработана экранная клавиатура для ввода имени при вводе рекордов.
После ввода вашего рекорда таблица рекордов автоматически обновиться.
2.3 Реализация алгоритмов приложения
Изначально вызывается конструктор для фоновой картинки. Далее создаются прямоугольники (rectangleabc). По нажатию на эти прямоугольники происходит вызов процедур, которые обеспечивают начало игры и выход. Вызов этих процедур реализован посредством модуля Events, создан обработчик события мыши. Для вызова процедурыобработчика нажатия кнопки мыши используется процедура PTinside которая проверяет, попадает ли точка с координатами x, y в границы заданного объекта.
Далее создаться фон (PictureAbc). Лучник тоже является объектом (PictureAbc), для которой реализована процедура движения по средствам модуля Events, с помощью функции KeyDown которая проверяет нажатую клавишу на клавиатуре и считывает ее. Приложение (Приложение 1.6,Рис 3)
Также создается область для отображения текущего уровня, текущего кол-ва жизней и набранных очков. Данные объекты это прямоугольники (rectangleabc), которые содержат текст. Так же создаются боты как объект-картинка. Каждый бот имеет уникальную скорость и тип движения: вниз, вправо-влево.
Движение ботов реализовано с использованием механизма таймера. В таймере выполняется алгоритм движения ботов (Приложение 1.6 рисунок 3),
Стрела создается при нажатии на пробела, более подробно (Приложение 1,6 рис.6).После уничтожения всех ботов на уровне, увеличивается значение уровня и вызывается следующая волна ботов. Если вы пропустите более 3 х врагов вы проиграете, уничтожаться враги, стрелы, и лучник с помощью процедуры Destroy. Смотрите (Приложение 1,6 Рис.2).
После прохождения игры или проигрыша далее.
На экран выведется таблица рекордов представляющая собой Фоновою картинку на которую создаться символы (Pictureabc) который использую процедуру Ptinside, которая проверяет, попадает ли точка с координатами x, y в границы заданного объекта .После нажатии клавиши ввода данные записываються в файл и выводяться в прямоугольниках таблицы.
2.4 Руководство к использованию и эксплуатации
После запуска игры на экране появляется рабочее окно. В этом рабочем окне отображается меню (см. рис. 2.1)
Выберите пункт новая игра для начала новой игры.
В игре управление происходит стрелочками. Стрелка на клавиатуре в вправо движение Тесея в вправо, стрелка влево движение Тесея в влево.
Выстреливает Тесей при нажатии пробела.
И приготовитесь к игре, когда вы будите готовы начать игру нажмите вверх.
После чего вам предстоит уничтожить врагов которые стремительно идут на вас.
Что уничтожить врагов вам нужно создать стрелы которые уничтожат ваших врагов.
Стрела создается нажатием на клавиатуре клавиши пробел. В верхней части программы вы можете заметить такие объекты как Табло очков, табло уровня, табло жизней.
Табло очков из себя представляет объект который выводит ваши очки на экран. Табло уровня выводит на объект уровень на котором вы сейчас находитесь. Табло жизней выводит текущее кол-во жизней на экран. При переходе на следующий уровень у вас не будет времени приготовиться к атаке.
При прохождению игры или проигрышу на экране всплывет таблица рекордов.
Где вы должны набрать своё имя или псевдоним, при нажатии на символ данный символ записывается в строку, где вы можете добавить символы или наоборот удалить их при нажатии на delete (или красный крестик).
Команды в игре.
Q-увеличить скорость ботов, Тесея(данная команда сработает только на следующеем уровне).
W-уменьшить скорость ботов, Тесея(данная команда сработает только на следующеем уровне).
E-пауза
R-снять паузу
Приложение Б Листинг программы
uses ABCObjects, Events, Timers,graphabc;
type af1 = record
name:string;
schet12:integer;
end;
var archer,fon,b1,nachalo,n15:PictureABC;
n1,n2,n,nkam,n3,n5:array [1..100] of pictureabc ;
n1_t,n2_t,n_f,n_t,n3_t,n5_t:array [1..100] of byte ;
menu1,z,gmpicture,nboss,g1,g2,g3,g4,g5,g6,g7,g8:pictureabc;
t,i,ch,ch1,ff, j,j1,bred,a1,kor,kam,t1,k,gm,lvl,schet,lives,c1,speed: integer;
l1:MULTIpictureABC;
f:file of af1;
stroka:string; f1:text;
b:array[1..101] of af1; do 11
a:af1;
ng,ob,ob1,ob2,gameover,p555,p,p1,p2,b11,b22,recordi1,recordi2,recordi3,recordi4,recordi5,recordi6,recordi7,recordi8,recordi9,recordi10:rectangleabc;
recordochki1,recordochki2,recordochki3,recordochki4,recordochki5,recordochki6,recordochki7,recordochki8,recordochki9,recordochki10:rectangleabc;
aa,ab,ac,ad,ae,af,ag,aj1,ah,ai,a2,ak,al,am,an,ao,ap,aq,ar,as1,at,au,av,aw,ax,ay,az,pauza,astrelka,avivod,fon2,pictureochki,aproblem,adelete,apredstavtes,picturename:pictureabc;
procedure menu; forward;
procedure level1;
procedure strela; forward;
procedure vragi1; forward;
procedure vragi2; forward;
procedure vragi4; forward;
procedure vragi1lvl2; forward;
procedure vragi1lvl3; forward;
procedure vragi1lvl4; forward;
procedure vragi1lvl5; forward;
procedure vragi1lvl6; forward;
procedure vragi1lvl7; forward;
procedure vragi1lvl8; forward;
procedure vragi1lvl9; forward;
procedure vragi1lvl10; forward;
procedure recordi; forward;
{ s vragi 6 ewe}
procedure keydown(key:integer); {polet streli}
begin
case key of
VK_LEFT: archer.moveto(archer.left-5,archer.top);
VK_RIGHT: archer.moveto(archer.left+5,archer.top);
81: begin speed:=speed+1;writeln(speed);end; {q}
87: begin speed:=speed-1;writeln(speed);end; {//w}
69: begin stoptimer(t); stoptimer(t1); pauza.visible:=true; p.visible:=false; p1.visible:=false;p2.visible:=false;
for i:= 1 to 5 do begin
if n_t[i]<>0 then n[i].visible:=false;
if n1_t[i]<>0 then n1[i].visible:=false;
if n2_t[i]<>0 then n2[i].visible:=false;
end; end;
82: begin pauza.visible:=false; starttimer(t); starttimer(t1); p.visible:=true; p1.visible:=true;p2.visible:=true; {r}
for i:= 1 to 5 do begin
if n_t[i]<>0 then n[i].visible:=true;
if n1_t[i]<>0 then n1[i].visible:=true;
if n2_t[i]<>0 then n2[i].visible:=true;
end; end;
end;
if key = VK_SPACE then strela;
if key = VK_UP then StartTimer(t);
if key = VK_UP then StartTimer(t1);
if key = vk_up then nachalo.visible:=false;
////////////////////////////////
end;
///////////////////////////////
procedure vragi1;
begin
for i:=1 to 5 do begin
ch:=ch+10;
n1[i]:=pictureabc.Create(ch,ch,'objects/vrag3.1.gif');
n1_t[i]:= random(speed)+1; end;
end;
procedure vragi1lvl2;
begin
for i:=1 to 5 do begin
ch:=ch+10;
n1[i]:=pictureabc.Create(ch,ch,'objects/Stalfos1.gif');
n1_t[i]:= random(speed)+1; end;
end;
procedure vragi1lvl3;
begin
for i:=1 to 5 do begin
ch:=ch+10;
n1[i]:=pictureabc.Create(ch,ch,'objects/DarknutMC1.gif');
n1_t[i]:= random(speed+4)+1; end;
end;
procedure vragi1lvl4;
begin
for i:=1 to 5 do begin
ch:=ch+10;
n1[i]:=pictureabc.Create(ch,ch,'objects/qop1.1.bmp');
n1_t[i]:= random(speed+4)+1; end;
end;
procedure vragi1lvl5;
begin
for i:=1 to 5 do begin
ch:=ch+10;
n2[i]:=pictureabc.Create(ch,ch,'objects/ZeldaGuard2.1.gif');
n2_t[i]:= random(speed+4)+1; end;
end;
procedure vragi1lvl6;
begin
ch:=200;
for i:=1 to 5 do begin
ch:=ch+10;
n2[i]:=pictureabc.Create(ch,50,'objects/Monster_claus1.gif');
n2_t[i]:= random(speed+2)+1; end;
end;
procedure vragi1lvl7;
begin
ch:=220;
for i:=1 to 5 do begin
ch:=ch+20;
n2[i]:=pictureabc.Create(ch,50,'objects/ZeldaGuard3.1.gif');
n2_t[i]:= random(speed+2)+1; end;
end;
procedure vragi1lvl8;
begin
ch:=120;
for i:=1 to 5 do begin
ch:=ch+20;
n2[i]:=pictureabc.Create(ch,50,'objects/vrag8.gif');
n2_t[i]:= random(7)+1; end;
end;
procedure vragi1lvl9;
begin
ch:=220;
for i:=1 to 5 do begin
ch:=ch+20;
n2[i]:=pictureabc.Create(ch,50,'objects/vrag9.gif');
n2_t[i]:= random(speed+2)+1; end;
end;
procedure vragi1lvl10;
begin
ch:=200;
for i:=1 to 5 do begin
ch:=ch+20;
n2[i]:=pictureabc.Create(ch,50,'objects/vrag10.gif');
n2_t[i]:= random(speed+2)+1; end;
end;
procedure vragi4;
begin
Stoptimer(t);stoptimer(t1);
ch:=100;
for i:=1 to 5 do begin
ch:=ch+10;
n1[i]:=pictureabc.Create(ch,25,'objects/vrag3.1.gif');
n1_t[i]:= random(speed+2)+1;
end;
for i:=1 to 5 do begin
ch:=ch+10;
n2[i]:=pictureabc.Create(ch+10,50,'objects/Stalfos1.gif');
n2_t[i]:= random(speed+1)+1;
end;
end;
PRocedure gameover1;
var ii:byte;
begin
for ii:=1 to 5 do begin
if n1_t[ii]<>0 then if n1[ii].top>=windowheight then begin lives:=lives-1; n1[ii].destroy; n1_t[ii]:=0;end;
if n2_t[ii]<>0 then if n2[ii].top>=windowheight then begin lives:=lives-1; n2[ii].destroy; n2_t[ii]:=0;end;
end;
if lives=0 then begin fon.visible:=false;p1.visible:=false;
p1 .visible:=false;
p.visible:=false;
fon.visible:=false;
p2.visible:=false;
recordi;
if lives=0 then begin
for I:=1 to 5 do begin
n1[i].moveon(500,500);
n2[i].moveon(500,500);
end;end;
stoptimer(t); stoptimer(t1);
end;end;
procedure recordi;
begin
onkeydown:=nil;
stoptimer(t);stoptimer(t1);
archer.destroy;
fon2.visible:=true; g1.visible:=false;
for i:=1 to 5 do begin
if n_t[i]<>0 then n[i].visible:=false;
n1[i].visible:=false;
n2[i].visible:=false;
end;
apredstavtes:=PictureABC.Create(0,0,'objects\predtavtes.gif');
aA:=PictureABC.Create(10,80,'Alfavit\a.gif');
aB:=PictureABC.Create(50,80,'Alfavit\b.gif');
ac:=PictureABC.Create(90,80,'Alfavit\c.gif');
ad:=PictureABC.Create(130,80,'Alfavit\d.gif');
ae:=PictureABC.Create(170,80,'Alfavit\e.gif');
af:=PictureABC.Create(210,80,'Alfavit\f.gif');
ag:=PictureABC.Create(250,80,'Alfavit\g.gif');
ah:=PictureABC.Create(290,80,'Alfavit\h.gif');
ai:=PictureABC.Create(320,80,'Alfavit\i.gif');
aj1:=PictureABC.Create(360,80,'Alfavit\j.gif');
ak:=PictureABC.Create(400,80,'Alfavit\k.gif');
al:=PictureABC.Create(440,80,'Alfavit\l.gif');
am:=PictureABC.Create(480,80,'Alfavit\m.gif');
an:=PictureABC.Create(520,80,'Alfavit\n.gif');
adelete:=PictureABC.Create(560,80,'Alfavit\delete.gif');
ao:=PictureABC.Create(10,150,'Alfavit\o.gif');
ap:=PictureABC.Create(50,150,'Alfavit\p.gif');
aq:=PictureABC.Create(90,150,'Alfavit\q.gif');
ar:=PictureABC.Create(120,150,'Alfavit\r.gif');
as1:=PictureABC.Create(160,150,'Alfavit\s.gif');
at:=PictureABC.Create(200,150,'Alfavit\t.gif');
au :=PictureABC.Create(240,150,'Alfavit\u.gif');
av :=PictureABC.Create(280,150,'Alfavit\v.gif');
aw :=PictureABC.Create(320,150,'Alfavit\w.gif');
ax :=PictureABC.Create(360,150,'Alfavit\x.gif');
ay :=PictureABC.Create(400,150,'Alfavit\y.gif');
p555.visible:=true;
////////////////////////////////////////////////////
Pic
turename:=PictureABC.Create(600,150,'alfavit/imya.gif');
recordi1:=rectangleabc.Create(600,200,100,30);
recordi2:=rectangleabc.Create(600,230,100,30);
recordi3:=rectangleabc.Create(600,260,100,30);
recordi4:=rectangleabc.Create(600,290,100,30);
recordi5:=rectangleabc.Create(600,320,100,30);
recordi6:=rectangleabc.Create(600,350,100,30);
recordi7:=rectangleabc.Create(600,380,100,30);
recordi8:=rectangleabc.Create(600,410,100,30);
recordi9:=rectangleabc.Create(600,440,100,30);
recordi10:=rectangleabc.Create(600,470,100,30);
//////////////////////////////////////////////////
pictureochki:=PictureABC.Create(700,150,'alfavit/oschki.gif');
recordochki1:=rectangleabc.create(700,200,100,30);
recordochki2:=rectangleabc.create(700,230,100,30);
recordochki3:=rectangleabc.create(700,260,100,30);
recordochki4:=rectangleabc.create(700,290,100,30);
recordochki5:=rectangleabc.create(700,320,100,30);
recordochki6:=rectangleabc.create(700,350,100,30);
recordochki7:=rectangleabc.create(700,380,100,30);
recordochki8:=rectangleabc.create(700,410,100,30);
recordochki9:=rectangleabc.create(700,440,100,30);
recordochki10:=rectangleabc.create(700,470,100,30);
///////////////////////////////////////////////
az:=PictureABC.Create(440,150,'Alfavit\z.gif');
astrelka :=PictureABC.Create(480,150,'Objects\strelka.gif');
avivod:=PictureABC.Create(520,150,'alfavit\vvod.gif');
aproblem:=PictureABC.Create(560,150,'alfavit\probel.gif');
end;//end;
procedure vragi2;
begin
ch:=50;
for i:=1 to 5 do begin
ch:=ch+30;
n2[i]:=pictureabc.Create(ch,50,'objects/Vfartip1.gif');
n2_t[i]:= random(2)+1; end; end;
procedure TimerP;
begin
for i:=1 to 5 do begin
a1:=random(4)+1;
if a1=1 then n2[i].moveon(1,1);
if a1=2 then n2[i].moveon(1,0) else
n2[i].moveon(0,1);
end; end;
procedure perexod;
begin
k:=0;
for i:=1 to 5 do begin
if n1_t[i]<>0 then k:=1;
if n2_T[i]<>0 then k:=1;
end;
if k=0 then begin lvl:=lvl+1;
if lvl=2 then begin vragi1lvl2;exit; end;
if lvl=3 then begin vragi1lvl3;exit; end;
if lvl=4 then begin vragi1lvl4;exit; end;
if lvl=5 then begin vragi1lvl5;exit; end;
if lvl=6 then begin vragi1lvl6;exit; end;
if lvl=7 then begin vragi1lvl7;exit; end;
if lvl=8 then begin vragi1lvl8;exit; end;
if lvl=9 then begin vragi1lvl9;exit; end;
if lvl=10 then begin vragi1lvl10;exit; end;
if lvl=11 then begin stoptimer(t);stoptimer(t1); g1.visible:=false;
p1 .visible:=false;
p.visible:=false;
fon.visible:=false;
p2.visible:=false;
recordi;
end; end;
end;
procedure viviodrecordov;
begin
reset(f);
writeln ('ник очки');
while not EOF(f) do begin
read(f,a);
/////////////////////////////////
recordi1.text:=b[1].name;
recordi2.text:=b[2].name;
recordi3.text:=b[3].name;
recordi4.text:=b[4].name;
recordi5.text:=b[5].name;
recordi6.text:=b[6].name;
recordi7.text:=b[7].name;
recordi8.text:=b[8].name;
recordi9.text:=b[9].name;
recordi10.text:=b[10].name;
////////////////////////////////////////
//////////////////////////////////////
//////////////////////////////////////
///////////////////////////////////////
recordochki1.text:=inttostr(b[1].schet12);
recordochki2.text:=inttostr(b[2].schet12);
recordochki3.text:=inttostr(b[3].schet12);
recordochki4.text:=inttostr(b[4].schet12);
recordochki5.text:=inttostr(b[5].schet12);
recordochki6.text:=inttostr(b[6].schet12);
recordochki7.text:=inttostr(b[7].schet12);
recordochki8.text:=inttostr(b[8].schet12);
recordochki9.text:=inttostr(b[9].schet12);
recordochki10.text:=inttostr(b[10].schet12);
///////////////////////////////////////////////////
//////////////////////////////////////////////////
/////////////////////////////////////////////////
//////////////////////////////////////////////////
end;
close(f);
end;
procedure sozdanie;
begin
reset(f); i:=1;
while not Eof(f) do begin
read(f,b[i]);
i:=i+1;
end;
b[11].name:=stroka;
b[11].schet12:=schet;
for i:=1 to 11 do
for j:=1 to 10 do
if b[j+1].schet12>b[j].schet12 then begin a:=b[j+1]; b[j+1]:=b[j]; b[j]:=a; end;
close(f);
rewrite(f);
for i:=1 to 10 do
write(f,b[i]);
p555.text:=b[i].name;
close(f);
end;
procedure MdM1(x,y,mb:integer);
begin
If aa.PtInside(x,y)=true then begin stroka:=stroka+'a'; {writeln(stroka);} end;
If ab.PtInside(x,y)=true then begin stroka:=stroka+'b'; end;
If ac.PtInside(x,y)=true then begin stroka:=stroka+'c'; end;
If ad.PtInside(x,y)=true then begin stroka:=stroka+'d'; end;
If ae.PtInside(x,y)=true then begin stroka:=stroka+'e'; end;
If af.PtInside(x,y)=true then begin stroka:=stroka+'f'; end;
If ag.PtInside(x,y)=true then begin stroka:=stroka+'g'; end;
If ah.PtInside(x,y)=true then begin stroka:=stroka+'h'; end;
If ai.PtInside(x,y)=true then begin stroka:=stroka+'i'; end;
If aj1.PtInside(x,y)=true then begin stroka:=stroka+'j'; end;
If ak.PtInside(x,y)=true then begin stroka:=stroka+'k'; end;
If al.PtInside(x,y)=true then begin stroka:=stroka+'l'; end;
If am.PtInside(x,y)=true then begin stroka:=stroka+'m'; end;
If an.PtInside(x,y)=true then begin stroka:=stroka+'n'; end;
If ao.PtInside(x,y)=true then begin stroka:=stroka+'o'; end;
If ap.PtInside(x,y)=true then begin stroka:=stroka+'p'; end;
If aq.PtInside(x,y)=true then begin stroka:=stroka+'q'; end;
If ar.PtInside(x,y)=true then begin stroka:=stroka+'r'; end;
If as1.PtInside(x,y)=true then begin stroka:=stroka+'s'; end;
If at.PtInside(x,y)=true then begin stroka:=stroka+'t'; end;
If au.PtInside(x,y)=true then begin stroka:=stroka+'u'; end;
If av.PtInside(x,y)=true then begin stroka:=stroka+'v'; end;
If aw.PtInside(x,y)=true then begin stroka:=stroka+'w'; end;
If ax.PtInside(x,y)=true then begin stroka:=stroka+'x'; end;
If ay.PtInside(x,y)=true then begin stroka:=stroka+'y'; end;
if aproblem.ptinside(x,y)=true then begin stroka:=stroka+'_'; end;
If az.PtInside(x,y)=true then begin stroka:=stroka+'z'; end; p555.text:=stroka;
if avivod.PtInside(X,y)=true then begin sozdanie; viviodrecordov; end;
if adelete.ptinside(X,y)=true then begin delete(stroka,Length(stroka),length(stroka)); end;
////////////////
/////////////////
if astrelka.PTInside(x,y)=true then begin
reset(f);
I:=1;
while not eof(f) do begin
read(f,b[i]);
end;
write(f,b[i]);
close(f);
end;
end;
procedure strela;
begin
i:=0; ff:=0;
while ff = 0 do begin
i:=i+1;
if n_f[i] = 0 then begin n[i]:= PictureABC.Create(archer.left,archer.top,'objects/strela.Bmp'); n_f[i]:=1; ff:=1; {writeln(1); }end;
end;
end;
procedure TimerProc;
begin
for i:=1 to 10 do
if n1_t[i]<>0 then n1[i].moveon(0,n1_t[i]);
///////////////////////////////////////////////////
for i:=1 to 10 do
if n2_t[i]<>0 then n2[i].moveon(0,n2_t[i]);
{////////////////////////////////////////////////////}
for i:=1 to 10 do begin
for j:=1 to 30 do begin
if (n1_t[i]<>0)and(n_f[j]<>0) then if n[j].intersect(n1[i]) then begin n1[i].destroy; schet:=schet+1;n1_t[i]:=0; end;
end;
end;
for i:=1 to 5 do begin
for j:=1 to 30 do begin
if (n2_t[i]<>0)and(n_f[j]<>0) then if n[j].intersect(n2[i]) then begin n2[i].destroy; schet:=schet+1;n2_t[i]:=0; end;
p.text:='Очки: '+inttostr(schet);
if lives<0 then p1.text:='Вы проиграли ' else p1.text:='Жизни: '+inttostr(lives);
p2.text:='Уровень'+inttostr(lvl);
gameover1;
end;
end;
for i:= 1 to 30 do
if n_f[i] <> 0 then begin
n[i].moveon(0,-13);
if n[i].top< 10 then begin n[i].destroy; n_f[i]:=0; end;
end;
perexod;
end;
begin
SetWindowSize(1024,768);
SetWindowTop(5);
SetWindowleft(2);
t:=CreateTimer(20,TimerProc); StopTimer(t);
t1:=CreateTimer(20,TimerP); StopTimer(t1);
fon:=pictureabc.create(0,0,'objects/fon2.jpg');
fon2:=pictureabc.create(0,0,'objects/fon2.jpg');
fon2.visible:=false;
nachalo:=pictureabc.create(500,200,'objects/nachalo.png');
archer:= PictureABC.Create(560,650,'objects/1.Bmp');
g1:=PictureABC.Create(820,0,'objects/1lives.png');
pauza:=PictureABC.Create(0,0,'objects/pauza1.bmp');
pauza.visible:=false;
p1:=rectangleabc.Create(740,0,70,50,clgreen);
p:=rectangleabc.Create(950,0,70,50);
p555:=rectangleabc.Create(200,200,70,50);
p555.text:=stroka;
p555.visible:=false;
lives:=3;
p2:=rectangleabc.Create(640,0,70,50,clgreen);
vragi1;
vragi2;
OnMouseDown:=MdM1;
onKeyDown:= keydown;
end;
procedure menu; forward;
procedure menu; forward;
procedure MdM(x,y,mb:integer);
begin
If Ng.PtInside(x,y)=true then level1;
Menu1.visible:=false;
Ng.destroy;
end;
procedure menu;
begin Ng:=rectangleabc.Create(230,230,250,50);
Menu1:=PictureABC.Create(0,0,'objects/Menu.bmp');{swap И видно прямоугольник}
OnMouseDown:=MdM;
end;
begin
//assign(F,'type53.txt');
assign(F,'recordi.txt');
menu;
end
1.6 Приложение А Схемы алгоритмов
Создание i-го врага
Рис 1.
Рис 2.
Рис 3.
I:=1..5
Рис 4.
Проверка до 5 раз
Рис 5.
Рис 6.