Реферат: Программ-игра «Морской бой», с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры
Домашняя работа
по программированию
за второй семестр
Игра «Морской Бой»
Выполнил: Макаров В. А.
группа: С-26
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Игра«Морской Бой»
<span Arial",«sans-serif»">Требуется:
<span Arial",«sans-serif»">Разработатьпрограмму-игру «Морской бой», с использованием анимированных графическихобъектов и возможностью управлять их движением с помощью клавиатуры.
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Эскиз:
<img src="/cache/referats/15408/image001.gif" v:shapes="_x0000_s1049"><span Arial",«sans-serif»"> SHAPE * MERGEFORMAT
<span Arial",«sans-serif»"><img src="/cache/referats/15408/image002.gif" v:shapes="_x0000_s1027 _x0000_s1026 _x0000_s1040 _x0000_s1030 _x0000_s1031 _x0000_s1034 _x0000_s1035 _x0000_s1038 _x0000_s1039 _x0000_s1041 _x0000_s1042 _x0000_s1043 _x0000_s1044 _x0000_s1045 _x0000_s1046"><span Arial",«sans-serif»"><span Arial",«sans-serif»"><img src="/cache/referats/15408/image003.gif" v:shapes="_x0000_s1037"> <img src="/cache/referats/15408/image004.gif" v:shapes="_x0000_s1032"> <span Arial",«sans-serif»">
<span Arial",«sans-serif»">Аномалии:
<span Arial",«sans-serif»">Аномалия
<span Arial",«sans-serif»">Действие программы
<span Arial",«sans-serif»">1) Произошла ошибка инициализации графики
<span Arial",«sans-serif»">Вывод сообщения:
<span Arial",«sans-serif»">«
<span Arial",«sans-serif»;mso-ansi-language: EN-US">InitGraph ERROR!<span Arial",«sans-serif»">»<span Arial",«sans-serif»">2) При игре было допущено более пяти промахов. Проигрыш.
<span Arial",«sans-serif»">Вывод сообщения
<span Arial",«sans-serif»">«
<span Arial",«sans-serif»;mso-ansi-language:EN-US">GAME OVER<span Arial",«sans-serif»">»<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Внешняя спецификация:
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Вход:
<span Arial",«sans-serif»;mso-ansi-language: EN-US"><span Arial",«sans-serif»;mso-ansi-language:EN-US">Vipolnil: Makarov Vladimir
<span Arial",«sans-serif»;mso-ansi-language:EN-US"> Group: C-26
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">Press to start play game!
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»">Выход при проигрыше:
<span Arial",«sans-serif»">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">GAME OVER
<span Arial",«sans-serif»">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»;mso-ansi-language:EN-US">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Метод:
<span Arial",«sans-serif»">Описание:
<span Arial",«sans-serif»">Вовремя игры на экране изображена водная поверхность и две скалы по бокам. Времяот времени из-за скал выплывают различные корабли, которые движутся вдольгоризонта к противоположенной скале. Существует три типа кораблей: маленький,средний и большой. Тип корабля всегда выбирается случайным образом. Скоростькаждого корабля зависит от размера самого корабля: маленький самый быстрый,остальные соответственно обладают более низкой скоростью. Цель игрока состоит втом, чтобы с помощью пушки и прицела подбить как можно большое количествокораблей и не промахиваться. Количество подбитых кораблей (
<span Arial",«sans-serif»;mso-ansi-language:EN-US">scope<span Arial",«sans-serif»">) показывается в нижнем левом углуэкрана. Игрок должен нацеливать пушку влево или вправо и стрелять повозможности на опережение, так как снаряд вылетающий из пушки обладаетотносительно малой скоростью. В случае промаха игрока, корабль разворачиваетсяи уплывает в обратную сторону. Если игрок совершил более пяти промахов, то онпроигрывает и выходит из игры.<span Arial",«sans-serif»">Прицеливаниеосуществляется с помощью стрелок (вправо и влево) на клавиатуре, пробел –стрельба и
<span Arial",«sans-serif»; mso-ansi-language:EN-US">escape<span Arial",«sans-serif»"><span Arial",«sans-serif»">– выход.<span Arial",«sans-serif»">Основной метод:
<span Arial",«sans-serif»">Воснове работы программы лежит главный зацикленный цикл, выход из которогоосуществляется только при выходе или при проигрыше. В цикле выполняются действия,зависящие от состояния флагов, так как каждому событию в программесоответствует свой флаг. Так же в этом цикле отслеживаются нажатия определённыхклавиш. Цикл прокручивается с, заранее определённой и постоянной, временнойзадержкой.
<span Arial",«sans-serif»">Когдакакой-нибудь флаг принимает истинное значение, в цикле проделываетсясоответствующее ему действие, после чего флаг сразу сбрасывается в положениеложь.
<span Arial",«sans-serif»">Рисованиевсех двигающихся объектов производится для удобства в отдельных процедурах. Вкачестве параметров туда передаётся координата по оси или
<span Arial",«sans-serif»;mso-ansi-language:EN-US">x<span Arial",«sans-serif»"> <span Arial",«sans-serif»">или <span Arial",«sans-serif»;mso-ansi-language:EN-US">y<span Arial",«sans-serif»">, так же туда передаётся флаг,указывающий на то – рисовать объект или стирать. Под стиранием объектапонимается его рисование цветом фона.<span Arial",«sans-serif»">Движениевсех графических объектов в программе осуществляется стандартным методом:сначала рисуется объект, а после временной задержки он рисуется на том же местецветом фона (стирается) и рисуется в новом месте.
<span Arial",«sans-serif»;mso-ansi-language:EN-US"><span Arial",«sans-serif»">Скорости всех двигающихся в программеобъектов различны:
<span Arial",«sans-serif»;mso-ansi-language:EN-US">V
<span Arial",«sans-serif»">снаряда<span Arial",«sans-serif»"> ><span Arial",«sans-serif»;mso-ansi-language:EN-US">V<span Arial",«sans-serif»">корабля№1<span Arial",«sans-serif»">> <span Arial",«sans-serif»;mso-ansi-language:EN-US">V<span Arial",«sans-serif»">корабля№2 <span Arial",«sans-serif»">> <span Arial",«sans-serif»;mso-ansi-language:EN-US">V<span Arial",«sans-serif»">корабля№3<span Arial",«sans-serif»">Временнаязадержка во всей программе постоянная и используется один раз за цикл. Еслиодин проход цикла назвать тактом, то разность скоростей объектов реализована засчёт того, что каждый объект перемещается на единицу расстояния не за каждыйтакт, а за каждый
<span Arial",«sans-serif»;mso-ansi-language:EN-US">n<span Arial",«sans-serif»">-ный такт, а <span Arial",«sans-serif»; mso-ansi-language:EN-US">n<span Arial",«sans-serif»"><span Arial",«sans-serif»">определено для каждогообъекта по-разному. Чем меньше <span Arial",«sans-serif»;mso-ansi-language:EN-US">n<span Arial",«sans-serif»">, тем быстрее скорость. В данной программе все скорости постоянны.<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Алгоритм:
<span Arial",«sans-serif»;mso-ansi-language:EN-US">Procedure target (ix: integer; bb:boolean)
<span Courier New"">Входные данные:
<span Courier New";mso-ansi-language:EN-US">ix<span Courier New"">: цел <span Courier New";mso-ansi-language: EN-US">bb<span Courier New"">: лог<span Courier New"">Внутренние постоянные переменные:
<span Courier New"; mso-ansi-language:EN-US">iy<span Courier New"">=200<span Courier New"">
начало
еслиbbто {Отображение}
Установить цвет(green)
Установить тип заливки(SolidFill,green)
Нарисовать закрашенный эллипс(ix,430,26,100)
Выбратьцвет(lightgreen)
Нарисовать линию(ix-10,iy,ix+10,iy)
Нарисовать линию(ix,iy-10,ix,iy+10)
иначе {Стирание}
Установитьтипзаливки(SolidFill,blue)
Установить цвет(blue)
Нарисовать закрашенный эллипс( (ix,430,26,100)
Установить цвет(blue)
Нарисовать линию(ix-10,iy,ix+10,iy)
Нарисовать линию(ix,iy-10,ix,iy+10)
всё
конец
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»">Часть 2:
<span Arial",«sans-serif»"> Поиск в тексте единиц и вставка послених нулей<span Arial",«sans-serif»">Входные данные:
<span Arial",«sans-serif»; mso-ansi-language:EN-US">var<span Arial",«sans-serif»"> <span Arial",«sans-serif»;mso-ansi-language: EN-US">st<span Arial",«sans-serif»">: мас: стр <span Arial",«sans-serif»;mso-ansi-language:EN-US">r<span Arial",«sans-serif»">: цел <span Arial",«sans-serif»;mso-ansi-language:EN-US">var<span Arial",«sans-serif»"> <span Arial",«sans-serif»;mso-ansi-language:EN-US">one<span Arial",«sans-serif»">: лог<span Arial",«sans-serif»">Выходные данные:
<span Arial",«sans-serif»; mso-ansi-language:EN-US">rez<span Arial",«sans-serif»">: масс: стр <span Arial",«sans-serif»;mso-ansi-language:EN-US">iz<span Arial",«sans-serif»">: цел<span Arial",«sans-serif»">Внутренние переменные:
<span Arial",«sans-serif»; mso-ansi-language:EN-US">k<span Arial",«sans-serif»">,<span Arial",«sans-serif»;mso-ansi-language:EN-US">l<span Arial",«sans-serif»">: цел<span Arial",«sans-serif»">
<span Arial",«sans-serif»">начало
<span Arial",«sans-serif»;mso-ansi-language: EN-US">one:=
<span Arial",«sans-serif»">ложь<span Arial",«sans-serif»">цикл
<span Arial",«sans-serif»"> для <span Arial",«sans-serif»; mso-ansi-language:EN-US">k<span Arial",«sans-serif»">:=1 до <span Arial",«sans-serif»;mso-ansi-language:EN-US">r<span Arial",«sans-serif»"> <span Arial",«sans-serif»">делать<span Arial",«sans-serif»"><span Arial",«sans-serif»;mso-ansi-language: EN-US">l
<span Arial",«sans-serif»">:=1<span Arial",«sans-serif»">цикл
<span Arial",«sans-serif»"> пока <span Arial",«sans-serif»; mso-ansi-language:EN-US">l<span Arial",«sans-serif»"><=длина(<span Arial",«sans-serif»;mso-ansi-language:EN-US">st<span Arial",«sans-serif»">[<span Arial",«sans-serif»; mso-ansi-language:EN-US">k<span Arial",«sans-serif»">]) делать<span Arial",«sans-serif»">если
<span Arial",«sans-serif»"> <span Arial",«sans-serif»; mso-ansi-language:EN-US">st<span Arial",«sans-serif»">[<span Arial",«sans-serif»;mso-ansi-language:EN-US">k<span Arial",«sans-serif»">][<span Arial",«sans-serif»; mso-ansi-language:EN-US">l<span Arial",«sans-serif»">]='1' то<span Arial",«sans-serif»;mso-ansi-language: EN-US">insert
<span Arial",«sans-serif»">('0',<span Arial",«sans-serif»; mso-ansi-language:EN-US">st<span Arial",«sans-serif»">[<span Arial",«sans-serif»;mso-ansi-language:EN-US">k<span Arial",«sans-serif»">],<span Arial",«sans-serif»; mso-ansi-language:EN-US">l<span Arial",«sans-serif»">+1) {Вставить после нуля единицу}<span Arial",«sans-serif»">one:=истина {Значит, в тексте есть единицы}
<span Arial",«sans-serif»">всё
<span Arial",«sans-serif»;mso-ansi-language: EN-US">inc(l)
<span Arial",«sans-serif»"> <span Arial",«sans-serif»; mso-ansi-language:EN-US">{l:=l+1}<span Arial",«sans-serif»;mso-ansi-language: EN-US"><span Arial",«sans-serif»">кцикл
<span Arial",«sans-serif»">кцикл
<span Arial",«sans-serif»">всё
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»">Вспомогательная функция:
<span Arial",«sans-serif»"> Определяет, является ли символ цифрой<span Arial",«sans-serif»">Входные данные: с: сим
<span Arial",«sans-serif»">Выходные данные: лог
<span Arial",«sans-serif»">Внутренние переменные:
<span Arial",«sans-serif»; mso-ansi-language:EN-US">e<span Arial",«sans-serif»">: цел <span Arial",«sans-serif»;mso-ansi-language:EN-US">fl<span Arial",«sans-serif»">: лог<span Arial",«sans-serif»;mso-ansi-language:EN-US"><span Arial",«sans-serif»">
<span Arial",«sans-serif»">начало
<span Arial",«sans-serif»;mso-ansi-language: EN-US">fl
<span Arial",«sans-serif»">:=ложь<span Arial",«sans-serif»;mso-ansi-language: EN-US">d
<span Arial",«sans-serif»">:='0123456789' {все цифровые символы}<span Arial",«sans-serif»">цикл
<span Arial",«sans-serif»"> для e:=1 до 10 делать {перебор всех символов цифр}<span Arial",«sans-serif»">если
<span Arial",«sans-serif»"> <span Arial",«sans-serif»; mso-ansi-language:EN-US">c<span Arial",«sans-serif»">=<span Arial",«sans-serif»;mso-ansi-language:EN-US">d<span Arial",«sans-serif»">[<span Arial",«sans-serif»; mso-ansi-language:EN-US">e<span Arial",«sans-serif»">] то <span Arial",«sans-serif»;mso-ansi-language:EN-US">fl<span Arial",«sans-serif»">:=истина<span Arial",«sans-serif»">кцикл
<span Arial",«sans-serif»">{Ели символ является цифрой, то функция возвратит истину,
<span Arial",«sans-serif»">иначе возвратит ложь}
<span Arial",«sans-serif»">digs:=fl {функция возвращает значение}
<span Arial",«sans-serif»">всё
<span Arial",«sans-serif»">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»">Исходныйкод
<span Arial",«sans-serif»;mso-ansi-language:EN-US"> <span Arial",«sans-serif»">всей программы:<span Arial",«sans-serif»">
{Домашнее задание на тему «графика»}
{Выполнил студент: Макаров Владимир, группа С-26}
{Игра"МорскойБой"}
program SeaWar;
uses Graph,crt;
var
GraphDriver:integer;
GraphMode:integer;
ErrorCode:integer; {Переменные для инициализации графики}
s_score:string;
{Все переменные, используемые в программе}
x :integer;
y :integer; {Переменные для хранения координат}
xx :integer; {и переменные цикла}
typ :integer; {Тип текущего корабля}
xxx :integer; {Координаты}
tarx :integer; {Координаты прицела и пушки}
fx :integer; {Координаты}
fy :integer;
score :integer; {Кол-во очков}
old_score :integer; {Прошлое значение кол-ва очков}
mimo :integer; {Кол-во промахов}
oldx :integer; {Координаты}
oldy :integer;
crx :integer;
cr_type :integer; {Тип корабля}
flang :integer; {С какой стороны плывёт корабль}
croldx :integer;
cr_ind2 :integer;
cr_ind:longint; {Рабочая переменная}
c:char; {Хранение нажатых клавиш}
{Флаги}
b :boolean; {Флаг нажатия клавиш «стрелок»}
fire :boolean; {Стрельба}
swim :boolean; {Перемещение}
promah :boolean; {Промах}
vzriv :boolean; {Взрыв}
const
{Два константных массива точек для хранения координат скал}
trin1:array[1..4] of PointType=
((x:-70;y:380),(x:60;y:20),(x:150;y:350),(x:-70;y:380));
trin2:array[1..4] of PointType=
((x:670;y:380),(x:560;y:5),(x:500;y:350),(x:670;y:400));
{Процедура вывода прицела и пушки на экран}
procedure target(ix:integer;bb:boolean);
const iy=200;
begin
if bb then begin {Отображение}
SetColor(green);
SetFillStyle(SolidFill,green);
FillEllipse(ix,430,26,100);
SetColor(lightgreen);
Line(ix-10,iy,ix+10,iy);
Line(ix,iy-10,ix,iy+10);
end else begin {Стирание}
SetFillStyle(SolidFill,blue);
SetColor(blue);
FillEllipse(ix,430,26,100);
SetColor(blue);
Line(ix-10,iy,ix+10,iy);
Line(ix,iy-10,ix,iy+10);
end;
end;
{Процедура вывода на экран различных кораблей}
procedure sheep(ix:integer;tip:integer;bb:boolean);
const
iy=200;
var
col,col2:integer;
sp1,sp2,sp3:array[1..5] of PointType;
begin
col:=brown;
col2:=yellow;
if not bb then begin {Еслиbb=true, тоотображениекорабля}
col:=blue; {Иначестираниекорабля}
col2:=blue;
end;
{Координаты кораблей, относительно центральной точки ix}
sp1[1].x:=ix-40;
sp1[1].y:=190;
sp1[2].x:=ix+40;
sp1[2].y:=190;
sp1[3].x:=ix+20;
sp1[3].y:=215;
sp1[4].x:=ix-20;
sp1[4].y:=215;
sp1[5].x:=sp1[1].x;
sp1[5].y:=sp1[1].y;
sp2[1].x:=ix-30;
sp2[1].y:=190;
sp2[2].x:=ix+30;
sp2[2].y:=190;
sp2[3].x:=ix+15;
sp2[3].y:=210;
sp2[4].x:=ix-15;
sp2[4].y:=210;
sp2[5].x:=sp2[1].x;
sp2[5].y:=sp2[1].y;
sp3[1].x:=ix-20;
sp3[1].y:=195;
sp3[2].x:=ix+20;
sp3[2].y:=195;
sp3[3].x:=ix+10;
sp3[3].y:=205;
sp3[4].x:=ix-10;
sp3[4].y:=205;
sp3[5].x:=sp3[1].x;
sp3[5].y:=sp3[1].y;
{Отображение одного из трёх типов кораблей}
case tip of
3: begin
SetColor(col);
SetFillStyle(SolidFill,col);
FillPoly(5,sp1);
Rectangle(ix-18,iy-30,ix+18,iy-2);
SetColor(col2);
SetFillStyle(SolidFill,col2);
Rectangle(ix-10,iy-25,ix+10,iy-15);
FillEllipse(ix-18,iy,5,5);
FillEllipse(ix+18,iy,5,5);
FillEllipse(ix,iy,5,5);
end;
2: begin
SetColor(col);
SetFillStyle(SolidFill,col);
FillPoly(5,sp2);
line(ix,200,ix,170);
line(ix-5,175,ix+5,175);
line(ix-10,180,ix+10,180);
end;
1: begin
SetColor(col);
SetFillStyle(SolidFill,col);
FillPoly(5,sp3);
line(ix,200,ix,185);
line(ix-5,185,ix+5,185);
line(ix-10,190,ix+10,190);
end;
end;
end;
{Начало главной процедуры программы}
begin
x:=100;
xx:=0;
xxx:=0;
oldx:=0;
b:=false;
tarx:=320;
fire:=false; {инициализация переменных}
crx:=0;
croldx:=800;
score:=0;
old_score:=0;
mimo:=0;
promah:=false;
vzriv:=false;
{Переключение в графический режим}
GraphDriver:=Detect;
InitGraph(GraphDriver,GraphMode,'');
if ErrorCode=grok then begin
SetColor(green);
SetBKColor(black);
end else begin
Writeln('ERROR!');
exit;
end;
SetColor(white);
OutText('Vipolnil: Makarov Vladimir');
OutTextXY(0,10,'Group: C-26');
SetTextJustify(CenterText,CenterText);
OutTextXY(640 div 2,480 div 2,'Press to start play game!');
c:=ReadKey;
{Подготовка экрана к игре}
ClearDevice;
SetBkColor(blue);
SetColor(lightgray);
SetFillStyle(SolidFill,lightgray);
FillPoly(4,trin1);
FillPoly(4,trin2);
SetColor(black);
Target(320,true);
{Главный цикл обработки различных сообщений и событий}
repeat
repeat
{Обработка сообщения «Взрыв корабля»}
if vzriv then begin
if xx=0 then begin
typ:=cr_type;
xxx:=crx;
end;
if xx<150 then begin
{Рисованиевзрыва}
Sound(Random(100));
swim:=false;
SetColor(red);
SetColor(red);
SetFillStyle(SolidFill,red);
FillEllipse(xxx,200,21*typ,17*typ);
inc(xx);
end else begin
NoSound;
swim:=false;
SetColor(blue);
SetFillStyle(SolidFill,blue);
FillEllipse(xxx,200,21*typ,17*typ);
xx:=0;
vzriv:=false;
end;
end;
{Обработка сообщения «Перемещение»}
if swim then begin
if cr_ind<400 then begin
Sheep(crx,cr_type,false);
if promah then promah:=false;
end else begin
if cr_ind mod cr_type*5=0 then begin
if promah then begin
if flang=0 then flang:=1
else flang:=0;
promah:=false;
end;
if flang=0 then begin
if crx=485 then begin
inc(cr_ind2);
if cr_ind2<3 then Sheep(crx,cr_type,true)
else begin
Sheep(crx,cr_type,false);
swim:=false;
end;
end else begin
crx:=crx+1;
Sheep(croldx,cr_type,false);
Sheep(crx,cr_type,true);
croldx:=crx;
end;
end else begin
if crx=150 then begin
inc(cr_ind2);
if cr_ind2<3 then Sheep(crx,cr_type,true)
else begin
Sheep(crx,cr_type,false);
swim:=false;
end;
end else begin
crx:=crx-1;
Sheep(croldx,cr_type,false);
Sheep(crx,cr_type,true);
croldx:=crx;
end;
end;
end;
end;
inc(cr_ind);
end else begin
{Если корабля нет на экране, то случайным методом
выбирается новый корабль}
Randomize;
croldx:=800;
cr_ind2:=0;
if random(2)=0 then begin
crx:=150;
flang:=0;
end else begin
crx:=485;
flang:=1;
end;
swim:=true;
cr_ind:=0;
Randomize;
cr_type:=random(3)+1;
end;
{Обработка сообщения «Выстрел»}
{и рисование полёта снаряда}
if fire then begin
x:=x-10;
Sound(x);
SetColor(blue);
line(fx+1,fy-2,fx+1,fy+2);
line(fx-1,fy-2,fx-1,fy+2);
line(fx,fy-2,fx,fy+2);
fy:=fy-2;
SetColor(lightred);
line(fx+1,fy-2,fx+1,fy+2);
line(fx-1,fy-2,fx-1,fy+2);
line(fx,fy-2,fx,fy+2);
if fy<200 then begin
if (getpixel(fx-1,fy-3)=brown)or(getpixel(fx+1,fy-3)=brown) then begin
old_score:=score;
inc(score);
vzriv:=true;
end else begin
{Обработкасообщения"Промах"}
promah:=true;
inc(mimo);
if mimo>5 then begin
{Выход из игры в случае проигрыша}
ClearDevice;
SetColor(white);
SetBkColor(black);
SetTextJustify(CenterText,CenterText);
OutTextXY(640 div 2,480 div 2,'GAME OVER!');
Sound(200);
Delay(10000);
NoSound;
c:=ReadKey;
exit;
end;
end;
fire:=false;
NoSound;
SetColor(blue);
line(fx+1,fy-2,fx+1,fy+2);
line(fx-1,fy-2,fx-1,fy+2);
line(fx,fy-2,fx,fy+2);
end;
end;
if b then begin
{Перерисовка прицела и пушки в случае нажатия клавиш «стрелок»}
target(oldx,false);
target(tarx,true);
b:=false;
end else target(tarx,true);
{В случае попадания, производится начисление очков и вывод их на экран}
if old_score<>score then begin
SetColor(blue);
SetTextJustify(LeftText,BottomText);
Str(old_score,s_score);
OutTextXY(70,460,s_score);
old_score:=score;
end;
SetColor(white);
SetTextJustify(LeftText,BottomText);
OutTextXY(20,460,'Score');
Str(score,s_score);
OutTextXY(70,460,s_score);
delay(150); {Временная задержка главного цикла}
until keypressed;
{Обработка нажатия клавиш}
c:=readkey;
case c of
#75: begin {влево}
if tarx>220 then begin
oldx:=tarx;
tarx:=tarx-5;
b:=true;
end;
end;
#77: begin {вправо}
if tarx<420 then begin
oldx:=tarx;
tarx:=tarx+5;
b:=true;
end;
end;
#32: begin {пробел"Выстрел"}
if not fire then begin
x:=800;
fire:=true;
fx:=tarx;
fy:=380;
end;
end;
#27: begin {esc "Выход"}
NoSound;
exit;
end;
end;
until false; {Зацикливаниеглавногоциклаобработкисообщений}
end.
<span Arial",«sans-serif»">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">
<span Arial",«sans-serif»">
<span Arial",«sans-serif»; mso-ansi-language:EN-US">