|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.02.2011, 22:04 | #1 |
Регистрация: 11.12.2010
Сообщений: 4
|
Массивы, Drag&Drop.
Всех приветствую.
Сейчас пишем с товарищем проект, начали разрабатывать инвентарь и появились загвоздки. Нашел множество статей, но всё не то.. Идея такова - допустим, взять инвентарь из игры Atom Fishing(а на него мы и ровняемся). Он представляет из себя поле, разделенное на "ячейки", в котором мы можем перемещать картинки по этим ячейкам в том случае, если они свободны. Решили мы сделать разделение на ячейки с помощью массива(x,y, свободна ячейка или нет) с координатами и всё вроде бы нормально получилось, но дальше начались проблемы с тем, как это всё "автоматизировать" чтоли, т.е. чтобы при создании картинок они искали свободные ячейки и занимали их(и само собой, чтобы в массиве занятые ячейки отмечались). Помогите, пожалуйста, если кто знает как решить эту проблему. |
10.02.2011, 22:25 | #2 |
DelphiProger
Участник клуба
Регистрация: 14.11.2010
Сообщений: 1,023
|
код увидеть можно?
VirusN13
|
10.02.2011, 22:39 | #3 |
Регистрация: 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. |
10.02.2011, 22:41 | #4 |
Регистрация: 11.12.2010
Сообщений: 4
|
Проблема именно в непонимании, как нужно правильно сделать, чтобы не было километрового кода, но чтобы проверялись свободные ячейки и на них сверху ложились картинки.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |