Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
4-1075386758
_hunter_
2004-01-29 17:32
2004.04.11
как добавить пользователя в группу


1-1080141740
BJValentine
2004-03-24 18:22
2004.04.11
Кодировка DOS --> Windows


14-1082405495
Подорожник
2004-04-20 00:11
2004.04.11
Какие работы надо провести с машиной после зимы?


4-1079608687
boa
2004-03-18 14:18
2004.04.11
Как программно узнать, что сервер НТ является терминал-сервером?


1-1082660847
Боян Георгиев
2004-04-22 23:07
2004.04.11
Курсор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский