Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизПоле игры Найти похожие ветки
← →
Анатолий (2003-10-01 03:39) [0]Вообщем вопрос такой: как нарисовать поле игры типа как в морском бое или сапере чтобы потом к каждой клетке(ячейке) можно было обращаться и делать с ней все что угодно...
Попробовал нарисовать на имадже,получилось неудобно
procedure TForm1.FormCreate(Sender: TObject);
var i,j:byte;
begin
KLETKA:=TBitMap.Create;
KLETKA.LoadFromResourceName(HInstance,"KLETKA");
for i:=0 to 9 do
for j:=0 to 9 do
Form1.Image1.Canvas.Draw(i*16,j*16,KLETKA);
End;
Подскажите плз как по другому сообразить?
← →
Думкин © (2003-10-01 06:19) [1]Механизм может быть разным.
Создаешь массив(список...) клеток.
Клетка - некая структура, содержащая всю нужную информацию, например содержащая координаты прямоугольника в поле и т.д. К ней нужные свойства и методы.
Массив клеток в тип поле. Там тоже свойства и методы.
При прорисовке поля - в цикле вызываешь прорисовки клеток. Потом с нарисованным полем делаешь, то что тебе надо.
Если клеток много, то лучше всего, если все внешние события будут обрабатываться полем, а потом уже идти к нужным клеткам. Ну и т.д.
← →
MBo © (2003-10-01 07:28) [2]Судя по приведенному коду, вполне подойдет TStringGrid (или TDrawGrid)
← →
Николай (2003-10-01 09:31) [3]Я дедал проще. Например, поле будет состоять из картинок (с рамкой или без). Создаешь новый класс на базе tPicture, которому присваиваешь дополнительные свойства (типа "координата Х", "координата У", "номер корабля", "корабль или пусто" и т.д.). Т.е. у тебя получается массив элементов, которым ты можешь задать свойства при отрисовке (не создаёшь заранее), которым ты можешь присвоить любое имя, и т.п.
И в дальнейшем рисуешь поле из динамически создаваемых элементов.
Получается массив, с которым ты потом и работаешь.
← →
<Falcon> (2003-10-01 12:08) [4]Попробуй KOLmdvXLGrid.Там есть пльзовательская отрисовка ячеек, возможность встраивать обьекты в ячейки. Опять-таки с координатами проблем нет.
← →
nexxiss (2003-10-01 13:18) [5]Вложенным циклом создаешь клетки и каждой в поле Tag присваиваешь порядковый номер и обработчик события OnClick:=MyClick, в котором по полю Tag выясняешь номер нажатой клетки. Вот пожалуй и все.
← →
Darthman © (2003-10-01 14:38) [6]А чем свой класс с двумерным массивом не катит?
← →
Temp (2003-10-01 16:01) [7]Вот тебе мой пример. Квадрат 16х16, нажатие на клетку обрабатываешь через Tag.
Const
OColor: array [1..10] of TColor=(clRed,clBlue,clWhite,clYellow,clGreen,clPurple,clAqua,cl3dLight,clGrayText,clOlive);
var
Form1: TForm1;
Field: array [1..16, 1..16] of TPanel;
procedure TForm1.FormShow(Sender: TObject);
var t,i,j,FT,FL:integer;
begin
Score:=0;
Randomize;
FT:=25; FL:=15;
For i:=1 to 16 do
Begin
For j:=1 to 16 do
begin
Field[i,j]:=TPanel.Create(Form1);
Field[i,j].Parent:=Form1;
Field[i,j].Visible:=True;
Field[i,j].Top:=FT;
Field[i,j].Left:=FL;
Field[i,j].Color:=clBlack;
Field[i,j].Width:=25;
Field[i,j].Height:=25;
FL:=FL+25;
end;
FT:=FT+25;
FL:=15;
end;
← →
Mihey © (2003-10-01 18:38) [8]>Создаешь новый класс на базе tPicture, которому присваиваешь дополнительные свойства
А вот это растрата ресурсов. Слишком уж сложен и ёмок этот класс для клекти, кораблика или чего-то ещё. Раз уж взникла сложность, то проще воспользоваться спрайтовым движком. Так в Graphic32 есть слои, принадлежащие изображению, который могут, например, реагировать на нажатия мышью.
← →
Rem © (2003-10-01 19:35) [9]Лучше всего прочитать еще раз:
MBo © (01.10.03 07:28) [2]
← →
Думкин © (2003-10-02 05:56) [10]Мои клетки вообще графическими ресурсами не владеют, все это на откуп дальнейшему хозяину. Их задача только предоставить нужную информацию, как и есть в TStringGrid, но ничто не мешает реализовать свое. Тем более игру делаешь - что дальше понадобится, покрыто мраком.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c