Реферат: Программ-игра «Морской бой», с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры

Домашняя работа

по программированию

за второй семестр

Игра «Морской Бой»

                       Выполнил: Макаров В. А.

                                      группа: С-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">

еще рефераты
Еще работы по программному обеспечению