|
|
谢谢热心人了
int Game_Init(void *parms = NULL, int num_parms = 0)
{
//创建IDirectDraw接口
if(FAILED(DirectDrawCreateEx(NULL,(void **) &lpdd,IID_IDirectDraw7,NULL)))
{
return(0);
}
//创建与WINDOWS协作层
if(FAILED(lpdd->SetCooperativeLevel(main_window_handle,DDSCL_FULLSCREEN|DDSCL_ALLOWMODEX|DDSCL_EXCLUSIVE|DDSCL_ALLOWREBOOT)))
{
return(0);
}
//设置显示模式
if(FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,0,0)))
{
return(0);
}
//填充ddsd结构体以创建主表面
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
//创建主表面
if(FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL)))
{
return(0);
}
//填充调色板结构数组
for(int color=1;color<255;color++)
{
palette[color].peRed=rand()%256;
palette[color].peGreen=rand()%256;
palette[color].peBlue=rand()%256;
palette[color].peFlags=PC_NOCOLLAPSE;
}
palette[0].peRed=0;
palette[0].peGreen=0;
palette[0].peBlue=0;
palette[0].peFlags = PC_NOCOLLAPSE;
palette[255].peRed=255;
palette[255].peGreen=255;
palette[255].peBlue=255;
palette[255].peFlags = PC_NOCOLLAPSE;
//设置主表面
if(FAILED(lpdd->CreatePalette(DDPCAPS_8BIT|DDPCAPS_ALLOW256|DDPCAPS_INITIALIZE,palette,&lpddpal,NULL)))
{
return(0);
}
//设置调色板依附于主表面
if(FAILED(lpddsprimary->SetPalette(lpddpal)))
{
return(0);
}
return(1);
}
int Game_Main(void *parms = NULL, int num_parms = 0)
{
//按ESC退出程序
if(KEYDOWN(VK_ESCAPE))
SendMessage(main_window_handle,WM_CLOSE,0,0);
//清空ddsd结构体的内存区域
memset(&ddsd,0,sizeof(ddsd));
//填充ddsd结构???????????????????????????????????????????????????请问这句话去掉或者移到锁定表面语句的后面为什么不行?
ddsd.dwSize=sizeof(ddsd);
//锁定表面
if(FAILED(lpddsprimary->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL)))
{
return(0);
}
//??????????????????????????????????????????????????????????????下面这两条语句移到锁定表面语句的前面为什么不行?
int mempitch=(int)ddsd.lPitch; // 记录程序所在显示模式的内存间距
UCHAR *video_buffer=(UCHAR *)ddsd.lpSurface; // 记录显示表面所驻留的实际内存的指针
//为主显示表面的像素着色
for(int index=0;index<1000;index++)
{
UCHAR color=rand()%256;
int x=rand()%640;
int y=rand()%480;
//绘制像素
video_buffer[x+y*mempitch]=color;
}
//解锁表面
if(FAILED(lpddsprimary->Unlock(NULL)))
{
return(0);
}
//延时
Sleep(30);
return(1);
}
int Game_Shutdown(void *parms = NULL, int num_parms = 0)
{
if(lpddpal)
{
lpddpal->Release();
lpddpal=NULL;
}
if(lpddsprimary)
{
lpddsprimary->Release();
lpddsprimary=NULL;
}
if(lpdd)
{
lpdd->Release();
lpdd=NULL;
}
return(1);
} |
|