{{notification.text}}

MirGames

qwer2090
22.03.09 08:44
0
Всем привет. Вопрос такой: "Как сделать так, чтобы при нажатии на ячейку, она передвигалась на пустое место, но при этом не сталкивалась с другими?". Спасибо. Извиняйте за ламерство, просто недавно начал изучать этот движок. :db:

http://forum.mirgames.ru/index.php?act=boardrules
Отредактировано: 23.03.09 06:08
#1
22.03.09 09:28
0
Проверить есть ли среди соседних ячеек пустые клетки, если есть то переместить, если нет то ничего не делать.
Отредактировано: 22.03.09 09:30
#2
qwer2090
22.03.09 17:52
0
А как это сделать? Мне просто не понятно как ячейку можно представить в виде объекта? :unsure:
#3
22.03.09 23:10
0
Очень просто. Создаешь двоичный массив клеток

Pole :Array[1..4,1..4] of integer;

Таким образом получаем поле из 4 клеток по горизонтали, и по вертикале.

Затем рисуем игровое поле квадратиками как ты сделал выше. При клике мышки по квадратику определяем по какому квадратику он (человек) кликнул (например квадрат с координатами 2 по X и 3 по Y).
Определяем проверяя в координату курсора в момент клика (пикель). То есть если квадратик 64 на 64 пикселя, то соответственно если игрок кликнул в координату от 0 до 64 по Х и Y мы узнаем что был клик по самому первому квадрату. Таким же макаром определяем и другие (координаты других сам посмотри как там у себя). То есть если поле представляет из себя сетку из клеток по 64 пикселя, то узнать по какой клетке кликнул герой моно так:

ColX:= trunc(MouseX/64);
ColY:= trunc(MouseY/64);

Где MouseX и Y - координаты мышки по Х и Y. Так мы узнаем в какую конкретно клетку кликнул игрок. Правда у тебя между квадратами какое то расстояние, и его тожно нужно учитывать.

Ну а после того как спалили по какому квадрату кликнул игрок, то проверяем массив. Например для твоего примера на 1 скрине это будет выглядить так:

if pole[сolX-1, colY] = 0 then

Так мы проверим соседнюю левую клетку. Если 0 - пустая, если 1 - занята. Ну и далее

if pole[сolX-1, colY] = 0 then
begin
//тут перемещаем квадрат не забыв при этом стереть его старое положение в 0 т.к. его там уже нет.
end;

Ну как-то так. Правда это проверка только на левую клетку. Нужно ещё сделать на право, верх, и низ. Ну и конечно при рисовании карты нужно записывать в массив 0 и 1 (там где пусто - 0, а где есть квадрат - 1).
Отредактировано: 22.03.09 23:19
#4
qwer2090
23.03.09 21:22
0
Огромное спасибо :)
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}