Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Карточная игра


Автор: MacTep 23.8.2003, 13:22
Ребята! Помогите! Проблема вот в чем: надо объединить колоду карт (рисованные картинки в формате BMP) в один файл (библиотеку). Сделать это нужно таким образом, чтобы потом из этого файла можно было их считывать. А при необходимости написать (создать) еще одну такую библиотеку карт, чтобы можно было в любой момент пользователю заменить вид карт на другой. Короче, хочу добавить к своей игрушке небольшой аддон, но только пока мыслей, как это сделать нет! Помогите!!!

Заранее благодарен!

Автор: stab 23.8.2003, 13:41
простейший способ сделать dll и в нее запихать как ресурсы твои картинки, а потом их из dll загружать при помощи TBitmap.LoadFromResourceName

Автор: December 23.8.2003, 15:46
Если карты фиксированной высоты/ширины, то просто слей их одну за другой в столбик в один бмп, и считывай потом фрагментами.

Автор: MacTep 5.9.2003, 10:48
Вопрос для cully: ты вот написал, мол, создай dll и в него запихай свои картинки. А вот это и самый интересный вопрос: как это сделать? Как создать DLL? как запихать в него картинки, как потом их из него считывать. Ответьте пожалуйста!!!

Автор: x77 5.9.2003, 11:19
2 Cully: не глумись над человеком, LoadFromResourceName подгружает не из dll-ки, а из ресурса:
Цитата
Loads a bitmap resource into the bitmap object.

procedure LoadFromResourceName(Instance: THandle; const ResName: string);

Description

LoadFromResourceName loads the specified bitmap resource along with palette information from a module's executable file. Specify the resource to be loaded as the value of ResName.

Note: Use this routine to load bitmaps from RES files instead of the LoadBitmap API. LoadBitmap does not support 256-color images.


2 МасТер: но в одном Cully прав: использование вышеозначенной функции - простейший путь. в ImageEditor создаёшь ресурс, забиваешь в него свои bmp-ки, цепляешь ресурс к экзешнику, а потом загружаешь из него картинки, скажем, в ImageList.

Автор: x77 5.9.2003, 11:30
упс... менять колоды таким образом не получится, надо будет писать ещё и редактор ресурсов, что возможно, но простейшим не является. сорри, я просмотрел про смену колод. присоединяюсь к December'у. smile.gif

Автор: beif 5.9.2003, 12:15
Да зачем DLL делать? Просто создавать большой .bmp. Например у тебя 36 карт, размером h на w, так создаешь большой bmp-ресурс размером скажем 4*h на 9*w, и вносишь туда рисунки карт по мастям в строку. Так создаешь несколько bmp-шек и все, а в процессе игры выбираешь из какого файла грузить рисунки smile.gif А считывать рисунки очень простым циклом и все smile.gif

Автор: x77 5.9.2003, 13:18
о чём и написал December smile.gif

Автор: beif 5.9.2003, 13:47
да smile.gif только в один столбик (строку) неудобно бмп делать и править smile.gif

Автор: stab 6.9.2003, 14:33
как делать dll с ресурсами:

1. Запускаем Delphi. (У меня Delphi 6)
2. File -> New -> Other -> DLL Wizard
3. Удаляем:

Код
{ Important note about DLL memory management: ShareMem must be the
 first unit in your library's USES clause AND your project's (select
 Project-View Source) USES clause if your DLL exports any procedures or
 functions that pass strings as parameters or function results. This
 applies to all strings passed to and from your DLL--even those that
 are nested in records and classes. ShareMem is the interface unit to
 the BORLNDMM.DLL shared memory manager, which must be deployed along
 with your DLL. To avoid using BORLNDMM.DLL, pass string information
 using PChar or ShortString parameters. }



Код
uses
 SysUtils,
 Classes;


остается:

Код
library Project2;

{$R *.res}

begin
end.


4. Деляем Save All в папку, скажем, RES DLL.
5. Нажимаем Ctrl+F9.
6. В папке RES DLL находим файл с расширением *.res. (У меня project2.res.) Это ресурсы которые будут включены в библиотеку. На данный момент там только иконка, которая не понять зачем нужна...
7. Ищем какой-нить редактор ресурсов. Я использую втсроеный в Visual Studio. Если VS нет, то на диске с Delphi обычно есть папка Workshop, там борландовый редактор ресурсов -- кривой до ужаса. smile.gif Но на худой конец и он сойдет.
8. Открываем project2.res в редакторе ресурсов. Видим, что иконка есть smile.gif Ищем команду Import или подобную, выбираем файл битмапа который должен быть в ресурсах. Таким образом мы добавали ресурс типа RT_BITMAP.
9. Запоминаем цифирку которая стоит рядом с добавленой картинкой -- это идентификатор ресурса.
10. Сохраняем и зыкрываем редактор ресурсов.
11. В Delphi делаем Project -> Build ProjcetX
12. Закрываем проект.

как использовать dll с ресурсами:

1. Скопируем полученную dll в папку проекта, который должен использовать картинку из dll.
2. В проекте делаем так:

Код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 hm: Integer;
 bm: TBitmap;
begin
 hm := LoadLibraryEx('project2.dll', 0, LOAD_LIBRARY_AS_DATAFILE);
 if hm <> 0 then
 begin
   bm := TBitmap.Create;
   bm.LoadFromResourceID(hm, 102 {та самая цифирка, которую запомнили});
   Canvas.Draw(0, 0, bm);
   bm.Free;
   FreeLibrary(hm);
 end;
end;

end.


з.ы. подразумевается, что каждая карта будет отдельным ресурсом тогда загрузка примерно так будет выглядеть:
Код

for i := 0 to 35 do
 card_bmp[i].LoadFromResourceID(hm, 100 + i);

Автор: beif 6.9.2003, 18:11
cully круто!!! Это вам не это.... ДА!
Я просто поражен твоим ответом!!!
Настолько побробно и исчерпывающе, что тут и дополнительных вопросов не задашь и ни к чему не прикопаешься... Побольше бы таких ответов smile.gif А все-таки в DLL рисунки же будут больше занимать места? Однако их проще считывать...

Автор: MacTep 10.9.2003, 16:38
Спасибо, ребята! Вы мне очень помогли! Я обязательно сделаю так, как вы просили! Спасибо! Cully, ты просто супер! Надеюсь, все получится!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)