Скачать:
Титульный лист (специальный бланк);
Лист задания (специальный бланк)
Содержание;
Введение;
1Аналитическая часть
1.1.Описание и постановка задачи
1.2.Назначение и цель создания
1.3.Описание правил игры
1.4.Общая концепция разработки приложения
1.5.Разработка архитектуры приложения
1.6.Разработка схем алгоритмов приложения
1.7.Обоснование выбора инструментальных средств
2Технологическая часть
2.1.Описание системных требований
2.2.Описание пользовательского интерфейса
2.3.Реализация алгоритмов приложения
2.4.Руководство к использованию и эксплуатации
2.5.Результаты экспериментальной проверки
Заключение;
Список литературы;
Приложение А Схемы алгоритмов
Приложение Б Листинг программы
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.
Которая при наличии процедуры MouseDown может считывать был ли клик по объекту и при получении 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.
Q-увеличить скорость ботов, Тесея
W-уменьшить скорость ботов, Тесея
E-пауза
R-снять паузу
В игре управление происходит стрелочками. Стрелка на клавиатуре в вправо — движение Тесея в вправо, стрелка влево — движение Тесея в влево, и т.д. Выстреливает Тесей при нажатии пробела.
Враги могут ходить вправо, влево,вниз, Вниз враг направлен больше чем вправо ,влево например 1-вправо 3-вниз и.т.д.
При проигрыше или победе выводиться Окно ввода рекордов.
При нажатии на левой кнопкой мыши на символ записываетсяданных символ в ваш псевдоним.
Что бы стереть символы нужно нажать на картинку Delete или как она выглядит X(красный крестик).
После ввода вашего рекорда таблица рекордов автоматически обновиться.
2.6.Руководство к использованию и эксплуатации
После запуска программы.
Выберите пункт новая игра для начала новой игры.
После проверьте управление. И приготовитесь к игре, когда вы будите готовы начать игру нажмите вверх. После чего вам предстоит уничтожить враговкоторые стремительно идут на вас. Что уничтожить врагов вам нужно создать стрелы которые уничтожат ваших врагов. Стрела создается нажатием на клавиатуре клавиши пробел. В верхней части программы вы можете заметить такие объекты как Табло очков, табло уровня, табло жизней.
Табло очков из себя представляет объект который выводит ваши очки на экран. Табло уровня выводит на объект уровень на котором вы сейчас находитесь. Табло жизней выводит текущее кол-во жизней на экран. При переходе на следующий уровень у вас не будет времени приготовиться к атаке
При прохождению игры или проигрышу на экране всплывет таблица рекордов. Где вы должны набрать своё имя или псевдоним, при нажатии на символ данный символ записывается в строку, где вы можете добавить символы или наоборот удалить их при нажатии на 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 ifn2[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 beginsozdanie; viviodrecordov; end;
if adelete.ptinside(X,y)=true then begin delete(stroka,Length(stroka),length(stroka));end;
////////////////
/////////////////
ifastrelka.PTInside(x,y)=true thenbegin
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 thenbegin 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;
proceduremenu; forward;
proceduremenu; 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-го врага
|
‘
![]() |
|||
![]() |
Проверка ботов
![]() |
![]() |
|||
![]() |
K
![]() |
![]() |
|||
![]() |
Проверка до 5 раз
![]() |
![]() |
|||
![]() |
![]() |
Основной таймер будет расписан на несколько блок-схем
![]() |
![]() |
|||
![]() |
Проверка до 5 раз
![]() |
![]() |
л