Создать в графическом режиме Pascal игру Сокровища - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Случайным образом разбросать сокровища (например,окружность) на экране.Реализовать движение паучка (любой граф объект) на экране.При попадании паучка на сокровище,сокровище исчезает (паучок его забрал).При этом увеличиваются очки игрока. Управление паучком с клавиатуры.Количество очков записывать в файл.Меню для игры выводить из текстового файла.

Решение задачи: «Создать в графическом режиме Pascal игру Сокровища»

textual
Листинг программы
uses Crt, Graph;
type p=record
      x,y:integer;
     end;
var
  dx,dy,px,py,n:integer;
  a:array[1..36] of p;
  gd,gm,width,height:integer;
  key, Interval:integer;
 
procedure NewFruit;
var
  b:boolean;
  i:integer;
begin
  repeat
    b:=true;
    px:=random(width);  while px mod 10>0 do px:=px+1;
    py:=random(height); while py mod 10>0 do py:=py+1;
    if (px>width-20) or (py>Height-20) or (px<10) or (py<10) then b:=false else
      for i:=1 to high(a) do if (a[i].x=px) and (a[i].y=py) then b:=false;
  until b;
  SetColor(Red);
  SetFillStyle(SolidFill,Red);
  FillEllipse(px,py,10,10);
end;
 
 
procedure ErTail;
begin
  SetFillStyle(SolidFill,Green);
  Bar(a[n].x,a[n].y,a[n].x+10,a[n].y+10);
end;
 
procedure NewStep;
var
  i:integer;
  c:word;
begin
  ErTail;
  for i:=n downto 2 do a[i]:=a[i-1];
  c:=getpixel(a[1].x+dx div 2,a[1].y+dy div 2);
  a[1].x:=a[1].x+dx;
  a[1].y:=a[1].y+dy;
  SetFillStyle(SolidFill,Yellow);
  Bar(a[1].x,a[1].y,a[1].x+10,a[1].y+10);
    if (c=Red) or (
      (a[1].x>=px-10) and (a[1].x<=px+10) and
      (a[1].y>=py-10) and (a[1].y<=py+10))
      then begin
      SetColor(Green);
      SetFillStyle(SolidFill,Green);
      FillEllipse(px,py,11,11);
    SetFillStyle(SolidFill,Yellow);
    Bar(a[1].x,a[1].y,a[1].x+10,a[1].y+10);
      if n<high(a) then n:=n+1 else begin
         ErTail;
         SetColor(Brown);
         SetFillStyle(SolidFill,Brown);
         FillEllipse(px,py,4,4);
      end;
      a[n]:=a[n-1];
      NewFruit;
      if n>18 then begin
        if Interval>50 then Interval:=Interval-5 else
          Interval:=50;
      end;
    end else if (c<>Green) and (c<>yellow) then begin
      closegraph;
      writeln('Приплыли');
      Halt;
    end;
end;
 
procedure mHod(x,y:integer);
begin
  if (dx=0) and (x<>0) then begin dx:=x;dy:=0;NewStep;end;
  if (dy=0) and (y<>0) then begin dy:=y;dx:=0;NewStep;end;
end;
 
 
begin
  Randomize;
  interval:=150;
  gd:=Detect;
  InitGraph(gd,gm,'');
  width:=getmaxx-10;
  height:=getmaxy;
  n:=1;
  a[1].x:=Width div 2;
  a[1].y:=Height div 2;
  dx:=10;
  dy:=0;
  SetFillStyle(SolidFill,Magenta);
  Bar(0,0,Width,Height);
  SetFillStyle(SolidFill,Green);
  Bar(10,10,Width-10,Height-10);
  NewFruit;
  repeat
    while not keypressed do begin delay(Interval);NewStep;end;
    if ReadKey=#0 then
      case ord(ReadKey) of
        75:mHod(-10,0);
        72:mHod(0,-10);
        77:mHod(10,0);
        80:mHod(0,10);
      end;
  until false;
end.

Объяснение кода листинга программы

  1. В процедуре NewFruit создается новый фрукт в случайном месте на экране. Функция random используется для генерации случайного числа в заданном диапазоне. Переменные x и y используются для определения координат фрукта. Если координаты находятся вне допустимого диапазона, то создается новый фрукт.
  2. В процедуре ErTail удаляется хвост (если он есть) и рисуется бар в текущем положении курсора.
  3. В процедуре NewStep происходит следующее:
    • Если предыдущий шаг был сделан, то копируются все ячейки после него.
    • Рисуется бар в текущем положении курсора.
    • Устанавливается цвет фона в желтый.
    • Заполняется эллипс вокруг текущего положения курсора.
    • Сбрасывается счетчик шагов.
  4. В процедуре mHod происходит следующее:
    • Если текущая ось (x или y) равна нулю, то устанавливается новый шаг.
    • Рисуется бар в текущем положении курсора.
  5. В начале программы выполняется инициализация графического режима, определение максимальных координат и создание массива для хранения информации о фруктах.
  6. В функции ReadKey считывается нажатая клавиша. Если нажата клавиша с кодом 0, то выходят из программы.
  7. В конце программы закрывается графический режим и выводится сообщение Приплыли, если было нажато слишком много клавиш без перемещения курсора.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы