谁有c++builder的游戏编程实例?

321 2000-03-16 04:36:00
谁有c++builder的游戏编程实例?
...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaiwenyan 2010-06-17
  • 打赏
  • 举报
回复
也给我mail一份吧 谢谢了
panfeng880601@126.com
towdney 2000-05-11
  • 打赏
  • 举报
回复
我也要,能发给我一份吗?
Email: towdney.yeah.net
koyl 2000-05-10
  • 打赏
  • 举报
回复
Dear dongcan:
给我一份吧!!! Email: zhkou@263.net
fuzhenxing 2000-05-07
  • 打赏
  • 举报
回复
初始化声音
两个难题都在这了
希望对你有帮助
FILE* fp = fopen("bz.wav", "rb");
if (fp == NULL){ ShowMessage("Open File Error ! "); return false;}

// Read in the wave header
Waveheader Wavhdr;
if (fread(&Wavhdr, sizeof(Wavhdr), 1, fp) != 1)
{
ShowMessage("Read File Header Error ! ");
fclose(fp);
return NULL;
}

// Figure out the size of the data region
DWORD dwSize = Wavhdr.dwDSize;
// Is this a stereo or mono file?
BOOL bStereo = Wavhdr.wChnls > 1 ? TRUE : FALSE;
// Create the sound buffer for the wave file
if (!CreateSoundBuffer(dwSize, Wavhdr.dwSRate, Wavhdr.BitsPerSample, Wavhdr.wBlkAlign, bStereo))
{
// Close the file
fclose(fp);
return false;
}

// Read the data for the wave file into the sound buffer
if (!ReadData(fp, dwSize, sizeof(Wavhdr)))
{
fclose(fp);
return false;
}

// Close out the wave file
fclose(fp);

return TRUE;
}

bool __fastcall TForm1::ReadData(FILE* fp, DWORD dwSize, DWORD dwPos)
{
// Seek to correct position in file (if necessary)
if (dwPos != 0xffffffff)
{
if (fseek(fp, dwPos, SEEK_SET) != 0) return false;
}

// Lock data in buffer for writing
LPVOID pData1;
DWORD dwData1Size;
LPVOID pData2;
DWORD dwData2Size;
HRESULT rval;

rval = m_lpDSB[0]->Lock(0, dwSize, &pData1, &dwData1Size, &pData2, &dwData2Size, DSBLOCK_FROMWRITECURSOR);
if (rval != DS_OK)
{
return false;
}

// Read in first chunk of data
if (dwData1Size > 0)
{
if (fread(pData1, dwData1Size, 1, fp) != 1)
{
char holder[256];
wsprintf(holder, "Data1 : %d, dwdata: %d, fp: %d", pData1, dwData1Size, fp);
OutputDebugString(holder);
return false;
}
}

// Read in second chunk if necessary
if (dwData2Size > 0)
{
if (fread(pData2, dwData2Size, 1, fp) != 1)
{
return false;
}
}

// Unlock data in buffer
rval = m_lpDSB[0]->Unlock(pData1, dwData1Size, pData2, dwData2Size);
if (rval != DS_OK) return false;

return TRUE;
}

bool __fastcall TForm1::CreateSoundBuffer(DWORD dwBufSize, DWORD dwFreq, DWORD dwBitsPerSample, DWORD dwBlkAlign, BOOL bStereo)
{
PCMWAVEFORMAT pcmwf;
DSBUFFERDESC dsbdesc;

// Set up wave format structure.
memset(&pcmwf, 0, sizeof(PCMWAVEFORMAT));
pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM;
pcmwf.wf.nChannels = bStereo ? 2 : 1;
pcmwf.wf.nSamplesPerSec = dwFreq;
pcmwf.wf.nBlockAlign = (WORD)dwBlkAlign;
pcmwf.wf.nAvgBytesPerSec = pcmwf.wf.nSamplesPerSec * pcmwf.wf.nBlockAlign;
pcmwf.wBitsPerSample = (WORD)dwBitsPerSample;

// Set up DSBUFFERDESC structure.
memset(&dsbdesc, 0, sizeof(DSBUFFERDESC));
dsbdesc.dwSize = sizeof(DSBUFFERDESC);
dsbdesc.dwFlags = DSBCAPS_STATIC and DSBCAPS_CTRLDEFAULT and DSBCAPS_GETCURRENTPOSITION2;
dsbdesc.dwBufferBytes = dwBufSize;
dsbdesc.lpwfxFormat = (LPWAVEFORMATEX)&pcmwf;
if(m_pDS->CreateSoundBuffer(&dsbdesc, &m_lpDSB[0], NULL)!=DS_OK)
{
ShowMessage("CreateSoundBuffer Error ");
this->Close();
}
return true;
}


LPDIRECTSOUNDBUFFER TForm1::GetFreeBuffer(void)
{
DWORD Status;
HRESULT rval;
LPDIRECTSOUNDBUFFER Buffer;

if(m_lpDSB == NULL) return NULL;

if(Buffer = m_lpDSB[m_Current])
{
rval = Buffer->GetStatus(&Status);
if(rval < 0) Status = 0;

if((Status & DSBSTATUS_PLAYING) == DSBSTATUS_PLAYING)
{
if(m_nBuffers > 1)
{
if (++m_Current >= m_nBuffers) m_Current = 0;

Buffer = m_lpDSB[m_Current];
rval = Buffer->GetStatus(&Status);

if((rval >= 0) && (Status & DSBSTATUS_PLAYING) == DSBSTATUS_PLAYING)
{
Buffer->Stop();
Buffer->SetCurrentPosition(0);
}
}
else
{
Buffer = NULL;
}
}

if(Buffer && (Status & DSBSTATUS_BUFFERLOST))
{
if((Buffer->Restore() < 0))
{
Buffer = NULL;
}
}
}

return Buffer;
}
//////////////////////////////////////////////////////////////////////////////////
bool __fastcall TForm1::Play(int Pan, DWORD dwFlags)
{
HRESULT rval;
LPDIRECTSOUNDBUFFER Buffer = NULL;

if(m_pDS == NULL) return false;

Buffer = GetFreeBuffer();
if(Buffer == NULL) return false;

rval = Buffer->SetPan(Pan);
if(rval != DS_OK) return false;

rval = Buffer->Play(0, 0, dwFlags);
if(rval != DS_OK) return false;

return true;
}
fuzhenxing 2000-05-07
  • 打赏
  • 举报
回复
初始化画面

HRESULT ddrval;
DDSURFACEDESC ddsd;
DDSCAPS ddscaps;
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
ddrval = lpDD->SetCooperativeLevel(Handle,DDSCL_EXCLUSIVE and DDSCL_FULLSCREEN);
ddrval = lpDD->SetDisplayMode(640, 480, 16);

ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS and DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE and DDSCAPS_FLIP and DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 2;
ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL);
//create primary
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
//load back ground


ddsd.dwFlags = DDSD_CAPS and DDSD_WIDTH and DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = 50;
ddsd.dwHeight = 60;
ddrval=lpDD->CreateSurface( &ddsd, &lpDDSPlane, NULL );
if(ddrval!=DD_OK)MessageBox(GetActiveWindow(),"ERROR","e",MB_OK);
ddrval=DDReLoadBitmap(lpDDSPlane, "center.bmp");
if(ddrval!=DD_OK)MessageBox(GetActiveWindow(),"load map ERROR","e",MB_OK);
mxp 2000-04-29
  • 打赏
  • 举报
回复
能否mail给我一份!谢谢!
to : mxp@huiwin.com
ttff 2000-04-24
  • 打赏
  • 举报
回复
给我一份好吗?bc_h@263.net
saxash 2000-03-16
  • 打赏
  • 举报
回复
dongcan : 也mail我一份好吗,谢谢!
{ saxash@sina.com }
王释之 2000-03-16
  • 打赏
  • 举报
回复
请问:dongcan
您有c++ Builder吗?
E-mail:befresh@263.net
谢谢!
dongcan 2000-03-16
  • 打赏
  • 举报
回复
我有,明天我整理一下,Email给你!
告述我地址。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧