Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
9-1075222195
Black Fury
2004-01-27 19:49
2004.05.30
Как интегрить файл справки DelphiX в Дельфи7?


7-1081744606
random
2004-04-12 08:36
2004.05.30
Как сохранить изменения


1-1084527897
Korefey
2004-05-14 13:44
2004.05.30
SQL объединение столбцов.


1-1084857230
SiJack
2004-05-18 09:13
2004.05.30
Как определить что MessageBox уже показано и не показывать


3-1084134130
Piter
2004-05-10 00:22
2004.05.30
DISTINCT?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский