Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Овцы и Волк   Найти похожие ветки 

 
NZed ©   (2004-01-21 07:26) [0]

Народ ! Помогите разобраться... Пишу я "Овец и Волка", т.к.
исходников не нашел :] пишу сам... Вот одна из моих проблем :
  Дано шахматное поле 8х8, каждая клетка -
отдельный TImage, есть фигура, тоже Image, фигура может
передвигаться только влево, вправо,вверх, вниз - на 1 клетку...
В начале фигура возникает на доске в произвольном месте, далее
фигура должна возникать на той клетке, на которой юзер
кликнул, так вот, как зделать так, что бы не писать
обработчик для каждой из 64 Image"ов, с проверками может
ли быть "сюда" поставлена фигура или юзер переборщил - выбрал
не ближайшую из клеток, а далёёёёёкую и не достижимую...
  Если кто тут чего не разобрал - не ругаццца! :] У меня
уже мозги отключаються, заранее всем спасибо!


 
pavel_k   (2004-01-21 08:07) [1]

Создавать новый image для каждой фигуры - это глупость. Зайди на DelphiGFX, там есть примеры по выводу в image (в 1) всего, что надо. А так image"и клепать смысла нет.


 
NZed ©   (2004-01-21 08:58) [2]

Да нет, я ен саздаю новый Image, он 1 и тот же, только
меняются координаты, и фигруа всего 1 - типа Волк, проблема
в другом, в передвиженнии Волка в погоне за Овцами...


 
Oyster ©   (2004-01-21 10:46) [3]

По-моему, можно для каждого поля задать Tag от 0 до 63, написать обработчик для одного Image, а потом всем остальным поставить обработчиком эту процедуру, а в ней по (Sender as TImage).tag узнавать, чтог это за поле.


 
Zorge   (2004-01-21 10:53) [4]

2 NZed

> Да нет, я ен саздаю новый Image, он 1 и тот же
То ли я чего то не понял, то что, но ты до этого писал
> каждая клетка - отдельный TImage

pavel_k прав - использовать отдельный TImage для каждой клетки - это не правильно - лучше использовать только один TImage для всего поля. Если же использовать один TImage, то перерасчет графичеcких координат в логические (клетку) можно IHMO сделать как то так (клетка (0,0) находится в левом верхнем углу)


const
 WidthCell=20;  // Ширина клетки
 HeightCell=20; // Высота клетки

var
 CurX,CurY:Integer;
 CellX,CellY:Word;

procedure TForm1.Image1Click(Sender: TObject);
begin
 // Получаем логические координаты (отсчет с 0!!!)
 CellX:=Trunc(CurX/Width);
 CellY:=Trunc(CurY/Height);
 // Здесь можно анализировать лог. координаты на корректность
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 // Созраняем графические координаты
 CurX:=X;
 CurY:=Y;
end;


Но если все же будешь использовать много TImage (что с точки зрения размера программы в пямяти не есть хорошо), то можно поиграть со свойством Tag. Т.е. назначаешь разные Tag для разных TImage, обработчик ставишь один, а в нем уже и анализируешь Tag как то так

 ...
 CellX:=(Sender as TImage).Tag mod 8;
 CellY:=(Sender as TImage).Tag div 8;
 ...

P.S. Я так подозреваю, что ты используешь так много TImage для того, что бы отображать фигурку в клетке через Picture.LoadFromFile(). Я прав?


 
NZed ©   (2004-01-21 12:13) [5]

2 Zorge >>> Начальная задумка в использовании такого множества
           TImage была как фон, для визуального отоборажения что              
           это поле 8х8, т.е. каждая Image - просто частичка
           фона и  являеться статичной, а изображение "волка"
           просто меняет свои координаты, ну а потом мне стукнуло
           [будь проклят тот день...:]]повесить на них обработчик
           клика мыши [сначала планировалось 4 кнопки - менять  
           координаты изображения - волка - вверх, вниз, и т.д.]  
           Ну а как ещё здесь поступить можно было? - Рисовать
           одну боооольшую картинку с разлиновкой? это было
           приемлимо с кнопками...


 
Zorge   (2004-01-21 14:03) [6]

2 NZed

> Начальная задумка в использовании такого множества
> TImage была как фон, для визуального отоборажения
> что это поле 8х8


Это все хорошо, но что мешает использовать в качестве фона одну большую картинку с нарисованными на ней клетками и отслеживать onClick только на этой картинке? Кроме того, если изображение фона элементарно (т.е. квадратики определенного цвета), то можно данный фон и в цикле неплохо нарисовать.


 
NZed ©   (2004-01-21 18:24) [7]

Хорошо, возьмём пример, с 1 картинкой в качестве фона :
"Волк" находиться в центре поля, пользователь хочет его
переместить и кликает в нижний левый угол, здесь в принципе
можно вычислять координаты мыши и работать с ними, но,
согласитесь, достаточно неудобно, а на счёт квадратиков -
все они в совокупности представляют единую 3"х мерную картинку...
так что с циклом, ИМХО, здесь не стоит...


 
Всеволод Соловьёв ©   (2004-01-21 19:25) [8]

есть одна очень прикольная идея
у нас есть один имадж фоновый, с нарисованными кнопочками
у нас есть имадж с волком
если у нас размеры одной кнопочки 20*20, тогда имадж должен быть размером 60*60
а потом отслеживаем клик по координатам картинки с волком
т.е. если координаты высоты от 0 до 20 и ширины от 20 до 40, тогда перемещаем вверх

ну как, мысль ясна?


 
Всеволод Соловьёв ©   (2004-01-21 19:27) [9]


> если у нас размеры одной кнопочки 20*20, тогда имадж должен
> быть размером 60*60

в смысле имадж с волком должен быть 60*60, а волк в центре этого имаджа


 
nexxiss ©   (2004-01-21 19:44) [10]

Послушай Oystera, дело говорит.


 
Всеволод Соловьёв ©   (2004-01-21 22:22) [11]

[10] nexxiss ©   (21.01.04 19:44)
Дело-то дело он говорит, и по правилам надо бы так и делать, но мой способ вапсче оригинальный ;)


 
NZed ©   (2004-01-22 10:44) [12]

2 Всеволод Солловьёв >>>
 ^_^ Это всё я уже проходил, у меня были одни и те же
 кнопки для овец и волка, а по клику по тому же овце
 или волку, присваивалась переменная, и у же при нажатии кнопки,
 (они появлялись вокруг фигуры) определялось чего куда двигать...
  Но всё равно спасиба !



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.268 c
14-1084425781
Мазут Береговой
2004-05-13 09:23
2004.05.30
Ужасные новости для тех, кто собирается долго жить!


7-1082626574
Alex_s
2004-04-22 13:36
2004.05.30
Работа с контроллером


6-1082019158
Ozone
2004-04-15 12:52
2004.05.30
TIdTCPServer


1-1084558378
Bulanov
2004-05-14 22:12
2004.05.30
Развернуть приложение


3-1084179302
Бульбаш
2004-05-10 12:55
2004.05.30
Перекрестный отчет