IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Описание входных и выходных данных
muscul
сообщение 6.6.2010, 14:24
Сообщение #1


Пользователь


Группа: Пользователи
Сообщений: 1
Регистрация: 6.6.2010
Пользователь №: 23 053



Всем привет!
Где в данной программе находятся входные и выходные данные?
Заранее спасибо!

Код

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:Ivanov Ivan');
OutTextXY(0,10,'Group:  1');
SetTextJustify(CenterText,CenterText);
OutTextXY(640 div 2,480 div 2,'Najmi <Enter> i nachni igrat!');
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.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 6.2.2012, 9:32