Графика: Как сделать так, чтобы персонаж не мог проходить, пересекать стены? - Pascal ABC
Формулировка задачи:
Пожалуйста, помогите с примером хотя бы для 1 стены, дальше я сам по аналогии сделаю.
Код:
Код весь, просто некоторые буквы сначала прозрачные. Не знаю почему так. Выделите код и убедитесь, что он нормальный и полный.
Решение задачи: «Графика: Как сделать так, чтобы персонаж не мог проходить, пересекать стены?»
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), то программа завершается. Таким образом, данный код реализует игру, в которой персонаж перемещается по лабиринту, избегая пересечения стен.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д