Почему не работает столкновение? - PascalABC.NET
Формулировка задачи:
Почему не работает столкновение?
Решение задачи: «Почему не работает столкновение?»
textual
Листинг программы
uses ABCObjects, GraphABC; var ground, player: PictureABC; //Здесь будут храниться все елки, что есть на поле firtree: array [0..100] of PictureABC; i, j, h, w, x, y: integer; last: point; procedure KeyDown(Key: integer); begin //Запоминаем последнюю позицию игрока last := player.Position; case Key of VK_Left: player.MoveOn(-5, 0); VK_Right: player.MoveOn(5, 0); VK_Up: player.MoveOn(0, -5); VK_Down: player.MoveOn(0, 5); end; //Проверяем, не столкнулся ли он с какой-нибудь елкой for var i := 0 to 100 do //Если столкнулся, то возвращаем его на шаг назад if firtree[i].Intersect(player) Then begin player.Position := last; player.MoveTo(player.Position.X, player.Position.Y); end; //Перерисовываем область вокруг игрока var rct := new RectangleABC(player.Left - 5, player.Top - 5, player.Width + 10, player.Height + 5); rct.Bordered := False; rct.Color := clTransparent; rct.RedrawNow; rct.Destroy; rct := nil; end; begin Randomize; w := 100; h := 100; TextOut(WindowCenter.X - 35, WindowCenter.Y - 15, 'Loading...'); LockDrawingObjects; for i := 0 to w do for j := 0 to h do ground := new PictureABC(i * 30, j * 30, 'ground.png'); player := new PictureABC(0, 0, 'player.png'); for i := 0 to 100 do begin x := Random((w * ground.Width) div 105) * 105; y := Random((h * ground.Height) div 145) * 150; firtree[i] := new PictureABC(x, y, 'firtree.png'); end; RedrawObjects; OnKeyDown := KeyDown; end.
Объяснение кода листинга программы
- В коде используется язык программирования PascalABC.Net.
- Переменные ground и player объявлены как PictureABC, что предполагает, что они представляют собой объекты PictureABC.
- Объявлен массив firtree типа PictureABC размером 100, который, как предполагается, будет содержать все деревья на поле.
- Объявлены переменные i, j, h, w, x, y типа integer, которые используются для управления положением и размером объектов на экране.
- Объявлена переменная last типа point, которая используется для хранения последней позиции игрока.
- Определена процедура KeyDown, которая вызывается при нажатии клавиши. Она проверяет, была ли нажата клавиша со стрелкой, и если да, то перемещает игрока в соответствующем направлении. Затем проверяется, столкнулся ли игрок с каким-либо деревом, и если да, то его позиция откатывается назад.
- Для проверки столкновения используется метод Intersect класса PictureABC.
- После проверки столкновения перерисовывается область вокруг игрока с помощью объекта RectangleABC.
- В основной части кода создаются объекты ground и player, а затем создаются 100 объектов firtree, представляющих деревья, с случайными координатами на экране.
- Задается функция OnKeyDown, которая будет вызываться при нажатии клавиши.
- Код завершается вызовом функции RedrawObjects, которая перерисовывает все объекты на экране.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д