Почему не работает столкновение? - 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, которая перерисовывает все объекты на экране.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д