Графика: Как сделать так, чтобы персонаж не мог проходить, пересекать стены? - Pascal ABC

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

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

Приветствую. Нарисовал лабиринт и персонажа (красный круг), который должен дойти до выхода от старта. Так вот, персонаж может проходить через стены лабиринта. Как сделать так, чтобы персонаж не мог проходить, пересекать стены?

Пожалуйста, помогите с примером хотя бы для 1 стены, дальше я сам по аналогии сделаю.

Код:

Код весь, просто некоторые буквы сначала прозрачные. Не знаю почему так. Выделите код и убедитесь, что он нормальный и полный.

Решение задачи: «Графика: Как сделать так, чтобы персонаж не мог проходить, пересекать стены?»

textual
Листинг программы
program Labirint;
uses GraphABC, Crt;
 
Procedure Pers(x,y,r:integer);
Begin
SetPenColor(clRed);
SetBrushColor(clRed);
Circle(x,y,r);
End;
 
procedure Lab;
begin
SetPenColor(clBlack);
SetBrushColor(clBlack);
Rectangle(50,0,100,150);
Rectangle(0,200,100,250);
Rectangle(0,300,50,450);
Rectangle(50,400,100,450);
Rectangle(50,500,100,700);
Rectangle(100,550,200,600);
Rectangle(150,0,350,50);
Rectangle(250,50,300,100);
Rectangle(150,100,200,350);
Rectangle(200,150,400,200);
Rectangle(350,100,400,300);
Rectangle(400,0,450,150);
Rectangle(250,250,300,450);
Rectangle(150,400,300,450);
Rectangle(150,400,200,500);
Rectangle(250,500,350,550);
Rectangle(150,650,300,700);
Rectangle(250,600,450,650);
Rectangle(350,350,450,400);
Rectangle(400,350,450,550);
Rectangle(450,450,600,500);
Rectangle(500,0,650,50);
Rectangle(500,100,550,250);
Rectangle(450,200,500,300);
Rectangle(550,200,600,400);
Rectangle(500,350,600,400);
Rectangle(500,550,550,700);
Rectangle(550,600,600,650);
Rectangle(600,100,750,150);
Rectangle(650,100,700,250);
Rectangle(700,50,850,100);
Rectangle(700,200,750,400);
Rectangle(650,350,700,500);
Rectangle(700,450,750,700);
Rectangle(650,550,700,600);
Rectangle(650,650,700,700);
Rectangle(950,0,1000,50);
Rectangle(900,50,1000,100);
Rectangle(900,50,950,200);
Rectangle(800,150,950,200);
Rectangle(900,250,950,400);
Rectangle(800,350,1000,400);
Rectangle(800,350,850,450);
Rectangle(750,500,950,550);
Rectangle(900,450,950,550);
Rectangle(800,600,1000,650);
Rectangle(750,250,850,300);
Rectangle(100,300,150,350);
SetPenColor(clGreen);
SetbrushColor(clGreen);
Rectangle(0,0,50,50);
Rectangle(950,650,1000,700);
end;
 
Var x,y,r,d:integer;
    k:char;
Begin
SetWindowSize(1000,700);
CenterWindow;
Hidecursor;
x:=25;
y:=25;
r:=25;
d:=5;
Lab;
Pers(x,y,r);
Lockdrawing;
repeat
k:=readkey;
if k=#0 then k:=readkey; //если первый код символа=0, то определяем второй
                         //коды стрелок 075,077,072,080, 72,75,77.80 это  H,K,M,P
case k of
#80:begin
    Clearwindow;
    if (y=Windowheight-r)or (GetPixel(x,y+2*r)=clBlack) then d:=0//если край или впереди черный цвет
    else d:=50;
    y:=y+d;
    Lab;
    Pers(x,y,r);
    Delay(1);
    Redraw;
    end;
#72:begin
    Clearwindow;
    If (y=r) or (Getpixel(x,y-2*r)=clBlack)  then d:=0
    else d:=50;
    y:=y-d;
    Lab;
    Pers(x,y,r);
    Delay(1);
    Redraw;
    end;
#75:begin
    Clearwindow;
    if (x=windowwidth-r)or (GetPixel(x+2*r,y)=clBlack)then d:=0
    else d:=50;
    x:=x+d;
    Lab;
    Pers(x,y,r);
    Delay(1);
    Redraw;
    end;
#77:begin
    Clearwindow;
    if (x=r)or (GetPixel(x-2*r,y)=clBlack)then d:=0
    else d:=50;
    x:=x-d;
    Lab;
    Pers(x,y,r);
    Delay(1);
    Redraw;
    end;
#27:exit;
end;
until k=#27;
End.

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

В представленном коде используется графический интерфейс GraphABC для создания окна и рисования фигур. Процесс начинается с объявления переменных x, y и r, которые представляют координаты и радиус круга, который будет нарисован. Переменная d используется для определения направления движения персонажа. Затем следует процедура Lab, которая создает прямоугольники на экране с помощью функций SetPenColor и SetBrushColor из библиотеки GraphABC. Эти прямоугольники образуют границы лабиринта, в котором будет перемещаться персонаж. Далее идет процедура Pers, которая рисует круг с заданными координатами и радиусом. Если персонаж пытается пересечь стену (то есть если его текущие координаты равны координатам границы лабиринта или если на границе есть черный цвет), то переменная d устанавливается в 0, что означает, что персонаж не может двигаться в этом направлении. В основной части программы происходит цикл, в котором считывается символ с клавиатуры. В зависимости от этого символа выполняются различные действия: перемещение влево, вправо, вверх или вниз. Если считанный символ - это символ выхода (#27), то программа завершается. Таким образом, данный код реализует игру, в которой персонаж перемещается по лабиринту, избегая пересечения стен.

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


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

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

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