Как правильно реализовать непроходимость и генерацию стен в игре - PascalABC.NET

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

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

Я тут накодил вывод массива, рандомную генерацию стен и управление игроком(@) для игрушки.
Но во-первых, я не знаю как реализовать непроходимость стен, завести для них отдельные классы или как-то иначе. Во-вторых, при такой генерации могут появляться непроходимые подземелья.

Решение задачи: «Как правильно реализовать непроходимость и генерацию стен в игре»

textual
Листинг программы
uses crt;
 
const
  Rows = 24;
  Cols = 48;
 
var mas : array [1..Rows, 1..Cols] of Byte;
 
type
  tHero = class
    X, Y : Integer;
    
    constructor;
    begin
      (X, Y) := (1, 1);
    end;
 
    procedure Show;
    begin
      GoToXY(X+1, Y+1);
      TextColor(12);
      Write('@');
    end;
    
    procedure left; begin if (X > 1) and (mas[Y, X-1] = 0) then X -= 1; end;
    procedure right; begin if (X < Cols) and (mas[Y, X+1] = 0) then X += 1; end;
    procedure up; begin if (Y > 1) and (mas[Y-1, X] = 0) then Y -= 1; end;
    procedure down; begin if (Y < Rows) and (mas[Y+1, X] = 0) then Y += 1; end;
  end;
 
var hero : tHero;
 
procedure Init;
begin
  System.Console.WindowHeight := 27;
  Randomize;
  for var Row := 1 to Rows do
    for var Col := 1 to Cols do
      mas[Row, Col] := Random(2);
  mas[1, 1] := 0;
  hero := New tHero;
  hidecursor;
end;
 
procedure Show;
begin
  TextColor(7);
  GoToXY(1, 1);
  WriteLn('Ш'*(Cols+2));
  for var Row := 1 to Rows do
    begin
      Write('Ш');
      for var Col := 1 to Cols do
        case mas[Row, Col] of
          0 : Write(' ');
          1 : Write('#');
        end;
      WriteLn('Ш');
    end;
  WriteLn('Ш'*(Cols+2));
  hero.Show;
end;
 
begin
  Init;
  repeat
    Show;
    case ReadKey of
      #37 : hero.left;
      #38 : hero.up;
      #39 : hero.right;
      #40 : hero.down;
    end;
  until False;
end.

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

  1. Объявлены переменные и константы, необходимые для работы игры.
  2. Создается класс tHero, который представляет героя игры и содержит его координаты.
  3. В классе tHero определены методы для перемещения героя по игровому полю.
  4. Задана процедура Init, которая инициализирует игровое поле случайными значениями и создает объект класса tHero.
  5. Определена процедура Show, которая отображает игровое поле и текущее положение героя.
  6. Задана процедура main, которая является точкой входа в программу и содержит основной игровой цикл.
  7. В процедуре main используется цикл repeat, который продолжается до тех пор, пока игрок не введет команду для выхода из игры.
  8. Внутри цикла repeat вызывается процедура Show, чтобы отобразить текущее состояние игрового поля.
  9. После отображения поля, программа ожидает ввода игрока с помощью функции ReadKey.
  10. В зависимости от введенной команды, вызывается соответствующий метод класса tHero для перемещения героя.
  11. Процедура main завершается, когда игрок вводит команду для выхода из игры.

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


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

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

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