Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

уровни   Найти похожие ветки 

 
Bortel ©   (2004-02-10 13:56) [0]

Мастера помогите как мне новый уровень игры написанной на DelphiX засунуть в файл и потом его подгружать когда надо. И с каким расширением должен быть этот файл. В файл надо засунуть весь интерфейс и поведение ботов.


 
Darthman ©   (2004-02-10 15:02) [1]

blockread();
blockwrite();

или

Stream.Read
Stream.Write

или
Write
Read

В цикле пиши все как надо, потом в том же цикле читай, расширение - какое больше нравится.


 
pavel_k   (2004-02-10 15:02) [2]

>Мастера помогите как мне новый уровень игры написанной на DelphiX засунуть в файл и потом его подгружать когда надо.
Зависит от реализации.
И с каким расширением должен быть этот файл.
С любым. .map, .karta, .lnd, .uroven  можешь придумать еще :) .
игры написанной на DelphiX
Обычно, DelphiX и т.п. используется для вывода графики, а как ты хранишь уровень - это твое дело. Все, что надо - пишешь в файл, потом - загружаешь.


 
Renegade_   (2004-02-10 16:24) [3]


#include <stdio.h>
#include <windows.h>
typedef struct _map
{
  char name[30];
  UINT data[100][100];
}MAP;

typedef struct object
{
  int x,y;
  unsigned int type;//WALL||DOOR||SOMESHIT
  PVOID graph;
}OBJECT,*POBJECT;

struct level
{
  MAP map;
  OBJECT obj[1000000000000000000];
}

MAP LoadMap(char *name)//<=name doznt mean
{
 MAP m;
 FILE *fp;
 if((fp=fopen(name,"rb"))!=NULL)
 {
   fread(&m,sizeof(MAP),1,fp);
   fclose(map);
 }
 else
 {
   MessageBox(NULL,"Cannot load map!","RulzGame3000",MB_ICONERROR)l
 }
}


 
Lucifer (rh ZAROLF)   (2004-02-10 16:35) [4]

> Bortel ©   (10.02.04 13:56)  
> Мастера помогите как мне новый уровень игры написанной на
> DelphiX засунуть в файл и потом его подгружать когда надо.
> И с каким расширением должен быть этот файл. В файл надо
> засунуть весь интерфейс и поведение ботов.
-----------------------------------------------------------------
А может тебе хранить разновидности ботов(с их поведениями)в классах, а размещать их на карте в цифровом формате хоть .txt, вот пример:

//level_1
const Map:array[0..1260,0..20]of integer=
((1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),
....
//где 1 - это например игрок1
//где 7 - это например бот

Player:=TPlayer.Create(DXSpriteEngine.Engine);
with TPlayer(Player)do
begin
if Map[j,i]=1then Image:=ImageList.Items.Find("Игрок1");

Enemy1:=TEnemy1.Create(DXSpriteEngine.Engine);
with TEnemy1(Enemy1)do
begin
if Map[j,i]=7then Image:=ImageList.Items.Find("Враг1");


 
Ed   (2004-02-11 22:47) [5]

Можно сделать все это через редактор сцен,где:1)Предварительно грузишь картинки (можно анимационный ряд) в структуру DXImageList
2)Создаешь визуальные объект (можно использовать класс типа TDXPaint) по щелчку мыши,при этом грузится образ из предварительно выбранного DXImage.Items[I] и запоминаются коодинаты объекта на сцене и ссылка на него в динамической структуре типа TList и  одновременно заполняются другие поля
3)Корректируем параметры объектов: перемещаем объекты в нужное положение на сцене,задаем параметры смещения dx,dy ,свойство Visible,свойство Animation,имя объекта,флаг движения и т.д.
4)Выгружаем в потоковые файлы типа TStream по кнопке "Save",соответствующие структуры,содержащие заголовок-счетчик загружаемых структур,структуры содержащие параметры спрайтов,структуры-заголовки содержащие параметры Imageобъектов,сами DIB-объекты.Создаются три Stream-файла,которые в основной программе подгружаются в процедуре типа "LoadScene".

Кусок кода из редактора сцен,выгружающий сцену в Stream-файлы.

procedure TMainForm.SpeedButton10Click(Sender: TObject);

 const N=100;
 var NameScene,FileName1,FileName2,FileName3:String[32];
 var I:Integer;
 var DXDIB:TDIB;

 var Spr:array[0..N] of TPointSprite;

 var Stream1,Stream2,Stream3:TStream;

 type TPointSprHeader= record
   Name:String[32];
   Count:Integer;
   end;

 var SprHeader:TPointSprHeader;

 type TImageSpr=record
 Name:String[32];
 PatternHeight,PatternWidth,SkipHeight,SkipWidth:Integer;
 Transparent:Boolean;
 TransparentColor:TColor;
 end;

 var ImageSpr:TImageSpr;

 type TImageSprHeader=record
 Name:String[32];
 Count:Integer;
 end;

 var ImageSprHeader:TImageSprHeader;

 Function SetPointSprite(S:TSpriteList):TPointSprite;
   var P:TPointSprite;
    begin
      P.Name:=TDXPaint(S.Items[I]).Name;
      P.X:=TDXPaint(S.Items[I]).Left;
      P.Y:=TDXPaint(S.Items[I]).Top;
      P.DX:=TDXPaint(S.Items[I]).DX;
      P.DY:=TDXPaint(S.Items[I]).DY;
      P.tag:=TDXPaint(S.Items[I]).tag;
      P.AnimLooped:=TDXPaint(S.Items[I]).AnimLooped;
      P.Visible:=TDXPaint(S.Items[I]).Visible;
      Result:=P;
    end;

  Function SetImageSpr(S:TDXImageList):TImageSpr;
     begin
       with Result do
         begin
           Name:=S.Items[I].Name;
           PatternHeight:=S.Items[I].PatternHeight;
           PatternWidth:=S.Items[I].PatternWidth;
           SkipHeight:=S.Items[I].SkipHeight;
           SkipWidth:=S.Items[I].SkipWidth;
           Transparent:=S.Items[I].Transparent;
           TransparentColor:=S.Items[I].TransparentColor;
         end;
      end;
 begin
   NameScene:=Edit1.Text;
   FileName1:=NameScene + "HImg.Stm";
   FileName2:=NameScene + "Img.Stm";
   FileName3:=NameScene + "HSpr.Stm";
   DXDIB:=TDIB.Create;
   Stream1:=TFileStream.Create(FileName1,fmCreate);
   Stream2:=TFileStream.Create(FileName2,fmCreate);
   Stream3:=TFileStream.Create(FileName3,fmCreate);
   with ImageSprHeader do
     begin
       Name:=NameScene;
       Count:=DXImageList1.Items.Count;
     end;
     

   try
   Stream1.WriteBuffer(ImageSprHeader,Sizeof(TImageSprHeader));
   for I:=0 to (DXImageList1.Items.Count-1) do
     begin
       ImageSpr:=SetImageSpr(DXImageList1);
       Stream1.WriteBuffer(ImageSpr,SizeOf(TImageSpr));
       DXDIB.Assign(DXImageList1.Items[I].Picture);
       DXDIB.SaveToStream(Stream2);
     end;
   finally DXDIB.Free;DXImageList1.Free;Stream1.Free;Stream2.Free;
   end;
   with SprHeader do
     begin
       Name:=NameScene;
       Count:=SprCount;
     end;
   try
   begin
   Stream3.WriteBuffer(SprHeader,SizeOf(TImageSprHeader));
   for I:=0 to (SprCount-1) do
   begin
      Spr[I]:=SetPointSprite(SpriteList);
      Stream3.WriteBuffer(Spr[I],SizeOf(TPointSprite));
   end ;
   end;
   finally
          Stream3.Free;

   end;
end;




Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
1-1086182669
Dysan
2004-06-02 17:24
2004.06.13
универсальная система отчетов


14-1085383304
PEVEC
2004-05-24 11:21
2004.06.13
Karaoke


14-1085337867
Delphin
2004-05-23 22:44
2004.06.13
подключение к PS/2


3-1085108938
mikl2002
2004-05-21 07:08
2004.06.13
Выборка записей и возвращение промежутка выбранных строк


1-1085757205
FireMan_Alexey
2004-05-28 19:13
2004.06.13
Thread