|
|
//省掉了部分代码,把主干代码贴出来
int CGame()
{
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
return(0);
if (FAILED(lpdd->SetCooperativeLevel(hwnd,
DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX |
DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
return(0);
if (FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,0,0)))
return(0);
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
dsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
ddsd.dwBackBufferCount=1;
if (FAILED(lpdd->CreateSurface(&ddsd, &lpddz, NULL)))
return(0);
ddsd.ddsCaps.dwCaps=DDSCAPS_BACKBUFFER;
if (FAILED(lpddz->GetAttachedSurface(&ddsd.ddsCaps,&lpddb)))
return(0);
return(1);
}
int MGame()
{
if (!Lbmp("位图加载"))
return(0);
memset(&ddbltfx,0,sizeof(ddbltfx));
ddbltfx.dwSize=sizeof(ddbltfx);
ddbltfx.dwFillColor = _RGB16BIT565(0,0,0);
lpddb->Blt(&dest_rect,lpddb,&source_rect,DDBLT_WAIT | DDBLT_COLORFILL,
&ddbltfx);
lpddb->Lock(NULL,&ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);
USHORT *buf = (USHORT *)ddsd.lpSurface;
for (int index_y = 0; index_y <SCREEN_HEIGHT ; index_y++)
{
for (int index_x = 0; index_x < SCREEN_WIDTH ; index_x++)
{
UCHAR blue = (buffer[index_y*SCREEN_WIDTH*3 + index_x*3 ]) >> 3,
green = (buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 1]) >> 3,
red = (buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 2]) >> 3;
USHORT rgb = _RGB16BIT565(red,green,blue);
buf[index_x + (index_y*ddsd.lPitch>> 1)] = rgb;
}
}
if (FAILED(lpddb->Unlock(NULL)))
return(0);
while (FAILED(lpddz->Flip(NULL,DDFLIP_WAIT)));
return(1);
}
|
|