Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание изображений 
:(
    Опции темы
zozo1987
Дата 27.4.2007, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Пишу игру в уголки. Эта игра основана на перемещениях шашек со своими правилами Это шахматная доска:

Цитата

for(int j=0;j<8;j++)
    for( int i=0;i<8;i++)
        Form1->ImageList1->Draw(Form1->Image1->Canvas,i*34,j*34,(j+i)%2,true);


Это на ней выставляются шашки:
Цитата

for(int j=0;j<3;j++)
    for( int i=0;i<3;i++)
        Form1->ImageList1->Draw(Form1->Canvas,i*50+100,j*50+80,(j+i)%2+2, true);
for(int j=4;j<7;j++)
    for( int i=4;i<7;i++)
        Form1->ImageList1->Draw(Form1->Canvas,i*50+100,j*50+80,(j+i)%2+4, true);

Теперь хочу сделатьтак, чтобы мышкой перетаскивать шашку с одной клетки на другую:
Думал с помощью OnDragDrop. Прочитал, что надо  установить значения свойств DragMod равные dmAutomatic. не могу понять как это сделать, подскажите, пожалуйста, ламеру . Или может подскажете, как еще можно сделать ето перетаскивание. Буду очень благодарен. smile 

PM MAIL   Вверх
SenkraD
Дата 27.4.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Можно через события миши.
А вообще вот по культину пятнашки писал мож поможет


Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  Fifth.rar 4,28 Kb


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
fish9370
Дата 27.4.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



рад, что тебе помог мой код smile

переходим ко вротой фазе создания игры - перетаскивание шашек.. думаю, на этом этапе для тебя это слишком сложно и придется упростить ситуацию, либо, если тебя это устроит, перетаскивать будем не шашку, а ее контур..

упростить ситуацию можно следующим образом: указывать шашку, которая должна сделать ход, и указать место, куда она должна переместиться.. здесь придется обрабатывать событие OnClick, расчитывать координаты, определять допустимость хода..

второй вариант, основывается на обработке трех событий: OnMouseDown, OnMouseMove и OnMouseUp.. сначала при щелчке мы (OnMouseDown) определяем начальное положение объекта (x0,y0) и объявляем, что происходит перемещение.. дальше автоматически срабатывает событие OnMouseMove, расчитвыаем положение объекта относительно (x0,y0).. в конце, при отпускании кнопки срабатывает событие OnMouseUp, где мы перерисовываем объект на новом месте и указываем, что перемещение должно быть завершено..
реализация должна выглядить примерно так:

Код

TRect r;
int x0, y0;
bool move=false;

void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(Button!=mbLeft) return;
    x0=X;
    y0=Y;
    r=((TControl*)Sender)->BoundsRect;
    move=true;
}

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if(!move) return;
    Canvas->DrawFocusRect(r);
    r.Left+=X-x0;
    r.Right+=X-x0;
    r.Top+=Y-y0;
    r.Bottom+=Y-y0;
    x0=X;
    y0=Y;
    Canvas->DrawFocusRect(r);
}
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    Canvas->DrawFocusRect(r);
    ((TControl*)Sender)->SetBounds(r.Left+X-x0,r.Top+Y-y0,((TControl*)Sender)->Width,((TControl*)Sender)->Height);
    ((TControl*)Sender)->BringToFront();
    move=false;
}


примечание к коду: это не готовое решение!! конструкции типа: "r=((TControl*)Sender)->BoundsRect;" необходимо заменить на соответсвующие задаче действия.. но идея, надеюсь понятна.. удачи!!

Это сообщение отредактировал(а) fish9370 - 27.4.2007, 21:37


--------------------
undefined
PM MAIL WWW ICQ   Вверх
zozo1987
Дата 8.5.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.4.2007

Репутация: нет
Всего: нет



Огромное спасибо fish9370 и всем, кто помагал советами и кодом smile. Вы мне очень помогли в освоении программирования и написании игры. smile)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1097 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.