EAN
14/04/2003, 03:56
Selamlar,
C++'de bir oyun yazıyorum. Sadece kendimi geliştirmek için tetris'i yeniden yazmaya çalışıyorum. Bir yerde çok güzel bir asm kod parçası buldum. Onu yaptım da, sormak istediğim olay şu;
1- Sprite dosyalarını nasıl oluşturabiliriz?
2- Bu bitmapları nasıl okuruz? Görüntüleriz?
3- Bu forumda C++ ya da VB ile oyun yazan arkadaş var mı?
Sevgiyle,
//Not; İkinci soru için yabancı bir forumda aşağıdaki gibi bir kod verdiler ben bir şey anlamadı.. Bir de kod eksik; tanımlanamayan uçmayan, fakat kullanılmış tanımlamalar mevcut.. :p
#define NUM_COLORS 256
void ReadBitmap(char *file)
{
FILE *fp;
unsigned short num_colors;
if ((fp = fopen(file,"rb")) == NULL)
{
DispError("Error opening file.\n");
}
Mode13h.ClearScreen(0);
Mode13h.CopyPageToScreen();
fread(&f, sizeof(Fileheader), 1, fp);
if (f.ClrUsed==0)
num_colors=NUM_COLORS;
else
num_colors=f.ClrUsed;
if ((Bmp = (unsigned char * )farmalloc(sizeof(unsigned char)*(f.Width*f.Height))) == NULL)
{
fclose(fp);
printf("Error allocating memory for file %s.\n",file);
exit(1);
}
for(int i=0; i<num_colors; i++)
{
fread(&Palette[i], sizeof(RGBQuad), 1, fp);
ColStr.r=Palette[i].rgbRed>>2;
ColStr.g=Palette[i].rgbGreen>>2;
ColStr.b=Palette[i].rgbBlue>>2;
Mode13h.SetPaletteColor(i,ColStr);
}
for(long j=(f.Height-1)*f.Width; j>=0; j-=f.Width)
{
for(i=0;i<f.Width;i++)
*(Bmp+j+i)=fgetc(fp);
if(f.Width%4!=0)
{
for(int x=f.Width%4; x<4; x++)
fgetc(fp);
}
}
fclose(fp);
}
void DisplayBitmap(void)
{
Mode13h.ClearScreen(0);
Mode13h.CopyPageToScreen();
for(long i=0; i<f.Width; i++)
for(int j=0; j<f.Height; j++)
Mode13h.PlotPixel(i, j, *(Bmp+i+j*f.Width));
Mode13h.CopyPageToScreen();
farfree(Bmp);
}
C++'de bir oyun yazıyorum. Sadece kendimi geliştirmek için tetris'i yeniden yazmaya çalışıyorum. Bir yerde çok güzel bir asm kod parçası buldum. Onu yaptım da, sormak istediğim olay şu;
1- Sprite dosyalarını nasıl oluşturabiliriz?
2- Bu bitmapları nasıl okuruz? Görüntüleriz?
3- Bu forumda C++ ya da VB ile oyun yazan arkadaş var mı?
Sevgiyle,
//Not; İkinci soru için yabancı bir forumda aşağıdaki gibi bir kod verdiler ben bir şey anlamadı.. Bir de kod eksik; tanımlanamayan uçmayan, fakat kullanılmış tanımlamalar mevcut.. :p
#define NUM_COLORS 256
void ReadBitmap(char *file)
{
FILE *fp;
unsigned short num_colors;
if ((fp = fopen(file,"rb")) == NULL)
{
DispError("Error opening file.\n");
}
Mode13h.ClearScreen(0);
Mode13h.CopyPageToScreen();
fread(&f, sizeof(Fileheader), 1, fp);
if (f.ClrUsed==0)
num_colors=NUM_COLORS;
else
num_colors=f.ClrUsed;
if ((Bmp = (unsigned char * )farmalloc(sizeof(unsigned char)*(f.Width*f.Height))) == NULL)
{
fclose(fp);
printf("Error allocating memory for file %s.\n",file);
exit(1);
}
for(int i=0; i<num_colors; i++)
{
fread(&Palette[i], sizeof(RGBQuad), 1, fp);
ColStr.r=Palette[i].rgbRed>>2;
ColStr.g=Palette[i].rgbGreen>>2;
ColStr.b=Palette[i].rgbBlue>>2;
Mode13h.SetPaletteColor(i,ColStr);
}
for(long j=(f.Height-1)*f.Width; j>=0; j-=f.Width)
{
for(i=0;i<f.Width;i++)
*(Bmp+j+i)=fgetc(fp);
if(f.Width%4!=0)
{
for(int x=f.Width%4; x<4; x++)
fgetc(fp);
}
}
fclose(fp);
}
void DisplayBitmap(void)
{
Mode13h.ClearScreen(0);
Mode13h.CopyPageToScreen();
for(long i=0; i<f.Width; i++)
for(int j=0; j<f.Height; j++)
Mode13h.PlotPixel(i, j, *(Bmp+i+j*f.Width));
Mode13h.CopyPageToScreen();
farfree(Bmp);
}