Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 22:04   #1
MixNez
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию Массивы, Drag&Drop.

Всех приветствую.
Сейчас пишем с товарищем проект, начали разрабатывать инвентарь и появились загвоздки. Нашел множество статей, но всё не то..
Идея такова - допустим, взять инвентарь из игры Atom Fishing(а на него мы и ровняемся). Он представляет из себя поле, разделенное на "ячейки", в котором мы можем перемещать картинки по этим ячейкам в том случае, если они свободны.
Решили мы сделать разделение на ячейки с помощью массива(x,y, свободна ячейка или нет) с координатами и всё вроде бы нормально получилось, но дальше начались проблемы с тем, как это всё "автоматизировать" чтоли, т.е. чтобы при создании картинок они искали свободные ячейки и занимали их(и само собой, чтобы в массиве занятые ячейки отмечались).
Помогите, пожалуйста, если кто знает как решить эту проблему.
MixNez вне форума Ответить с цитированием
Старый 10.02.2011, 22:25   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

код увидеть можно?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 10.02.2011, 22:39   #3
MixNez
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

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

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm2 = class(TForm)
Shape1: TShape;
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const invent:array[1..20,1..10,1..2] of integer=
(((0,0),(1,2),(1,2),(1,2),(1,2),(2, 1),(2,1),(0,0),(0,0),(0,0)),
((0,0),(1,2),(1,2),(1,2),(1,2),(2,1 ),(2,1),(0,0),(0,0),(0,0)),
((0,0),(1,2),(1,2),(1,2),(1,2),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(1,2),(1,2),(1,2),(1,2),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(1,2),(1,2),(1,2),(1,2),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(1,2),(1,2),(1,2),(1,1),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0)),
((0,0),(0,0),(0,0),(0,0),(0,0),(0,0 ),(0,0),(0,0),(0,0),(0,0))) ;
var
Form2: TForm2;
//invent:array[1..20,1..10,1..2] of integer;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var xi,yi:integer;
ydx,ydy:integer;
begin
for xi:=1 to 6 do
for yi:=1 to 14 do begin
if invent[yi,xi,1]=1 then
if invent[yi,xi+1,1]=1 then
if invent[yi,xi+2,1]=1 then
if invent[yi,xi+3,1]=1 then
if invent[yi+1,xi,1]=1 then
if invent[yi+1,xi+1,1]=1 then
if invent[yi+1,xi+2,1]=1 then
if invent[yi+1,xi+3,1]=1 then
if invent[yi+2,xi,1]=1 then
if invent[yi+2,xi+1,1]=1 then
if invent[yi+2,xi+2,1]=1 then
if invent[yi+2,xi+3,1]=1 then
if invent[yi+3,xi,1]=1 then
if invent[yi+3,xi+1,1]=1 then
if invent[yi+3,xi+2,1]=1 then
if invent[yi+3,xi+3,1]=1 then
if invent[yi+4,xi,1]=1 then
if invent[yi+4,xi+1,1]=1 then
if invent[yi+4,xi+2,1]=1 then
if invent[yi+4,xi+3,1]=1 then
if invent[yi+5,xi,1]=1 then
if invent[yi+5,xi+1,1]=1 then
if invent[yi+5,xi+2,1]=1 then
if invent[yi+5,xi+3,1]=1 then
begin
// for ydx:=xi to xi+3 do
// for ydy:=yi to yi+5 do
ydy:=yi;ydx:=xi;

if (invent[ydy,ydx,2]=invent[ydy,ydx+1,2]) and
(invent[ydy,ydx+1,2]=invent[ydy,ydx+2,2]) and
(invent[ydy,ydx+2,2]=invent[ydy,ydx+3,2]) and
(invent[ydy+1,ydx,2]=invent[ydy+1,ydx+1,2]) and
(invent[ydy+1,ydx+1,2]=invent[ydy+1,ydx+2,2]) and
(invent[ydy+1,ydx+2,2]=invent[ydy+1,ydx+3,2]) and
(invent[ydy+2,ydx,2]=invent[ydy+2,ydx+1,2]) and
(invent[ydy+2,ydx+1,2]=invent[ydy+2,ydx+2,2]) and
(invent[ydy+2,ydx+2,2]=invent[ydy+2,ydx+3,2]) and
(invent[ydy+3,ydx,2]=invent[ydy+3,ydx+1,2]) and
(invent[ydy+3,ydx+1,2]=invent[ydy+3,ydx+2,2]) and
(invent[ydy+3,ydx+2,2]=invent[ydy+3,ydx+3,2]) and
(invent[ydy+4,ydx,2]=invent[ydy+4,ydx+1,2]) and
(invent[ydy+4,ydx+1,2]=invent[ydy+4,ydx+2,2]) and
(invent[ydy+4,ydx+2,2]=invent[ydy+4,ydx+3,2]) and
(invent[ydy+5,ydx,2]=invent[ydy+5,ydx+1,2]) and
(invent[ydy+5,ydx+1,2]=invent[ydy+5,ydx+2,2]) and
(invent[ydy+5,ydx+2,2]=invent[ydy+5,ydx+3,2]) and
(invent[ydy,ydx,2]=invent[ydy+1,ydx,2]) and
(invent[ydy+1,ydx,2]=invent[ydy+2,ydx,2]) and
(invent[ydy+2,ydx,2]=invent[ydy+3,ydx,2]) and
(invent[ydy+3,ydx,2]=invent[ydy+4,ydx,2]) and
(invent[ydy+4,ydx,2]=invent[ydy+5,ydx,2]) then
image1.Picture.LoadFromFile('F:\1.' +inttostr(invent[ydy,ydx,2])+'.bmp');
image1.Left:=10+((xi-1)*25);
image1.Top:=10+ ((yi-1)*25);
image1.Width:=100;
image1.Height:=150;
end;
end;

end.

Последний раз редактировалось MixNez; 10.02.2011 в 22:53.
MixNez вне форума Ответить с цитированием
Старый 10.02.2011, 22:41   #4
MixNez
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

Проблема именно в непонимании, как нужно правильно сделать, чтобы не было километрового кода, но чтобы проверялись свободные ячейки и на них сверху ложились картинки.
MixNez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag & Drop компоненты mutabor Компоненты Delphi 0 20.07.2010 11:57
drag&drop БАО Общие вопросы C/C++ 2 06.05.2010 12:17
Drag&Drop из TStringGrid Sergey2 Компоненты Delphi 2 01.09.2009 23:02
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04