15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
1

Пятнашки

03.09.2010, 20:21. Показов 7801. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Помогите решить следующую задачу:
Нужно написать программу наподобие игры пятнашки...
Суть проблемы в следующем: имеется несколько квадратных блоков, в которых записаны буквы... нужно чтобы при перетаскивании одного блока на соседний этот блок вставал на его место, а соседний на место перетаскиваемого (написать всё это нужно с помощью Drag&Drop или Drag&Dock (если это возможно))... Помогите пожалуйста, не знаю даже с чего начать и какие компоненты использовать для перетаскивания! Заранее благодарю! О_о
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2010, 20:21
Ответы с готовыми решениями:

Пятнашки
Вот у меня такой вопрос. На форме 15 кнопок, одну из них можно передвинуть. Как узнать что соседняя...

Пятнашки)))
подскажите пожалуйста как это делается)))

игра Пятнашки
Здравствуйте!Подскажите пожалуйста как сделать игру 'Пятнашки' с помощью stringgrid.Заранее спасибо)

Задание Пятнашки
Лабораторная работа по динамическим компонентам. "Пятнашки" ( без отчета) Я не знаю, что это и...

61
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 20:27 2
ну я бы использовал двумерный статический массив Timage и работал с драг н дроп, компонеты создавались бы программно - это всё по поводу того что надо, дальше можете уже конкретно спрашивать что из этого непонятно...
1
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 20:35  [ТС] 3
ничего не понял, но спасибо за ответ! не умею работать с драг-н-дроп и как создать массив TImaga тоже не представляю
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 20:40 4
Цитата Сообщение от AlexXXX12389 Посмотреть сообщение
не умею работать с драг-н-дроп
ну начинать надо не с этого...
Цитата Сообщение от AlexXXX12389 Посмотреть сообщение
как создать массив TImaga тоже не представляю
знаете как объявить массив в классе вообще?
0
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 20:44  [ТС] 5
как объявить приблизительно знаю
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 20:48 6
значит так, у вас есть форма, и соответсвенно класс соответсвующей данной форме (он наследуется от класса формы), там есть три раздела где можно объявить переменные (есстествено они имеют различный уровень доступа), для нашего случая больше всего подходит private-раздел. Там вы обявляете массив !двумерный! а в качестве типа указываем TImage (хотя в будущем мы возможно опишем класс на основе TImag'a)
Справились, показывайте и перейдем к след пункту (собственно создание этих Timage's)
1
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 20:54  [ТС] 7
Delphi
1
2
3
  private
    { Private declarations }
    var mas:array[1..10,1..10] of TImage;
правильно?
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 21:03 8
и вот еще что в uses формы надо добавить ExtCtrls

Добавлено через 35 секунд
правильно, только var тут не нужно

Добавлено через 7 минут
дальше, есть форма у неё есть событие OnCreate, вот мы залазим в его обработчик (Object inspecor - > events - > двойной клик на OnCreate). У нас появилась заготовка процедуры, поскольку у нас массив - объявляем 2 переменный (допустим i и j) типа байт (byte) больше на не нужно. В самой процедуре строим вложенные циклы (один для i другой для j), значения вставьте в соответствии с размерность массива. Теперь сама суть - внутри мы будем перебирать все элементы массива, создавать их и настраивать, выглядит это примерно так:
Delphi
1
2
3
4
5
mas[i,j]:=TImage.Create(self); // создали объект
mas[i,j].Parent:=self // сказали что отбражать его надо на форме
// точно также настраиваете другие параметры например:
mas[i,j].Width:=??;
mas[i,j].Left:=??*j;
вот теперь объекты созданы, проверим как у вас получится и пойдем дальше...
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2010, 21:23 9
Vas-e-na, Я насчет двухмерного не уверен, нигде не написано это. Может типа слово составлять?

Добавлено через 2 минуты
Да и Image можно любым компонентом с Caption или text заменить, а то еще буквы рисовать...
1
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 21:25  [ТС] 10
тупо на кнопках можно сделать???
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2010, 21:26 11
Да хоть Эдиты или панели, без разницы.
1
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 21:29  [ТС] 12
подскажите тогда как это сделать, плиз!
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 21:32 13
Цитата Сообщение от Puporev Посмотреть сообщение
Я насчет двухмерного не уверен, нигде не написано это. Может типа слово составлять?
http://ru.wikipedia.org/wiki/Пятнашки

Добавлено через 1 минуту
Цитата Сообщение от AlexXXX12389 Посмотреть сообщение
подскажите тогда как это сделать, плиз!
также, TImage меняете на TButton в том коде который писали и всё... (все что мы настраивали относится практически ко всем визуальным компонентам)

Добавлено через 58 секунд
Цитата Сообщение от Puporev Посмотреть сообщение
Да и Image можно любым компонентом с Caption или text заменить, а то еще буквы рисовать...
ну как бы не суть просто если это будет картинка больше свободы для дизайнерских возможностей...
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
03.09.2010, 21:33 14
Vas-e-na, Так не написано что пятнашки, а типа, да и не похоже, нет свободного поля. Нужно у автора уточнить условие, поля в линию или по сетке расположены.
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 21:35 15
Цитата Сообщение от Puporev Посмотреть сообщение
Так не написано что пятнашки, а типа, да и не похоже, нет свободного поля. Нужно у автора уточнить условие, поля в линию или по сетке расположены.
Puporev, ну ты юморист, название темы прочитаЙ!
0
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 21:39  [ТС] 16
Цитата Сообщение от Vas-e-na Посмотреть сообщение
Составлять надо слова, а не цифры.... В общем задание такое: имеется 30 клеток на поле, 4 из них пустые, в остальных записаны буквы фамилии, имени и отчества... требуется автоматически отсортировать клетки по алфавиту! Со второй частью думаю сам справлюсь (или помогут), а вот с перетаскиванием и заменой соседних клеток ступор... хотелось бы чтобы был красивый эффект, наподобие как при перетаскивании вкладок в браузере Opera

Добавлено через 1 минуту
поле 6x5, поэтому массив двумерный

Добавлено через 1 минуту
с названием темы тупанул, просто некогда было придумывать
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 21:43 17
AlexXXX12389, суть всё равно та же, и пока ты не проделаешь то что я тебе выше написал, перейти к пункту где будем реализовывать перетаскивание нельзя...
PS а красота как раз будет зависеть от того компонента котрый ты выберешь, я выбрал для тебя Timage в связи с тем что у него есть свойство прозрачности, за счет потоков и этого свойства можно сделать эффект как в опере...
0
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 21:51  [ТС] 18
Vas-e-na, спасибо за разъяснение, понятно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
var i,j:byte;
begin
for i := 1 to 6 do
  for j := 1 to 5 do
    begin
      mas[i,j]:=TImage.Create(self);
      mas[i,j].Parent:=self;
      mas[i,j].Width:=40;
      mas[i,j].Height:=40;
      mas[i,j].Left:=40*i;
      mas[i,j].Top:=40*j;
    end;
end;
end.
вот так вот у меня получилось
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
03.09.2010, 22:15 19
ну замечательно, если там понадобится еще что настроить всё это делается здесь (я бы как культырный программист предложил бы еще на событие форму Dectroy удалить все созданные нами компоненты, но в принципе это не нужно). Теперь нам нужно описать две процедуры, чтобы создать для них заготовки (и не морочится какие должны быть списки параметров), предлагаю !временно! на форму поместить компонент(такой же как в массиве), и в Object inspector в событиях создать заготовки для OnDragOver, OnDragDrop.

Добавлено через 3 минуты
процедура в OnDragOver будет отвечать за то чтобы компоненты могли обмениватся данными, код примерно такой должен быть:
Delphi
1
2
3
4
5
if Source is Timage then
  if Sender<>Source then
    Accept:=true
  else
    Accept:=false;
или что-то наподобие... (этот код даст нам достаточно возможности чтобы всё работало)

Добавлено через 7 минут
процедура OnDragDrop как раз и будет производить обмен данными, т.е.
Delphi
1
2
3
4
var i:TBitmap;
i:=(Source as Timage).Picture.Bitmap;
(Source as Timage).Picture.Bitmap:=(Sender as Timage).Bitmap;
(Sender as Timage).Bitmap:=i;
это позволит обменятся данными (объекты при этом останутся на месте), но можно и объекты поменять местами:
Delphi
1
2
3
4
5
6
7
var x,y:integer;
x:=(Source as Timage).left;
y:=(Source as Timage).top;
(Source as Timage).left:=(Sender as Timage).left;
(Source as Timage).top:=(Sender as Timage).top;
(Sender as Timage).left:=x;
(Sender as Timage).top:=y;
вот, а дальше можно заниматся визуальным оформлением

Добавлено через 5 минут
AlexXXX12389, с вашим заданием мы справились, с визуальной анимацией разбиратся будем?
1
15 / 0 / 0
Регистрация: 16.09.2009
Сообщений: 32
03.09.2010, 22:20  [ТС] 20
да, будем
0
03.09.2010, 22:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2010, 22:20
Помогаю со студенческими работами здесь

Пятнашки с подсказкой
Помогите, пожалуйста, справиться с задачей! Мне нужно создать пятнашки в Delphi, причём с...

Пятнашки из букв
Привет Интересует игра Пятнашки, но не из цифр, а из букв алфавита, т.е. разложение их - A, Б, В,...

Пятнашки в картинках
ЗДравствуйте, у меня есть игра пятнашки с кнопками, как переделать ее в игру с картинками?? То, что...

Пятнашки на делфи
Здравствуйте! У меня возникла небольшая проблема с написанием игры пятнашки на делфи. на форме у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru