📄 main.cpp
字号:
//换页
void Flip()
{
RECT Window;
POINT pt;
GetClientRect(hwnd, &Window);
pt.x=pt.y=0;
ClientToScreen(hwnd, &pt);
OffsetRect(&Window, pt.x, pt.y);
HRESULT rval=lpDDSFront->Blt(&Window, lpDDSBack, NULL, DDBLT_WAIT, NULL);
if(rval == DDERR_SURFACELOST) lpDDSFront->Restore();
return ;
}
void DrawAll()
{
int i;
HRESULT rval;
// HDC hdc;
RECT rect,rect1;
switch (GameStatus)
{
case 1: //Game Normal
//背景
GetRect(&rect, 0, 0, 433, 348);
rval=lpDDSBack->Blt( NULL, lpDDSBk, NULL, DDBLT_WAIT, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
//画出老鼠
for (i = 8;i>=0;i--)
{
if (mouse[i] > 0)
{
GetRect(&rect1,0,status[i]*85,124,85);
GetRect(&rect,holepos[i].x, holepos[i].y, 124, 85);
rval=lpDDSBack->Blt( &rect, lpDDSMouse[mouse[i]-1], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
if ((behit[i] >0)&&(status[i] ==4))
{
GetRect(&rect1,0,0,68,24);
GetRect(&rect,mousepos[i].x, mousepos[i].y,68,24);
rval=lpDDSBack->Blt( &rect, lpDDSBow, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
GetRect(&rect1,0,0,43,25);
GetRect(&rect,mousepos[i].x, holepos[i].y-20,43,25);
switch (mouse[i])
{
case 1:
rval=lpDDSBack->Blt( &rect, lpDDSScore[0], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
break;
case 2:
rval=lpDDSBack->Blt( &rect, lpDDSScore[1], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
break;
case 3:
rval=lpDDSBack->Blt( &rect, lpDDSScore[2], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
break;
}
}
}
}
//画出木锤
if (!hit)
{
GetRect(&rect1,0,0,68,68);
GetRect(&rect,pos.x-34, pos.y-68, 68, 68);
rval=lpDDSBack->Blt( &rect, lpDDSHammer, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
}
else
{
GetRect(&rect1,0,68,68,68);
GetRect(&rect,pos.x-34, pos.y-68, 68, 68);
rval=lpDDSBack->Blt( &rect, lpDDSHammer, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
}
GetRect(&rect1,0,0,45,13);
GetRect(&rect,10, 10, 45, 13);
rval=lpDDSBack->Blt( &rect, lpDDSTime, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
DrawNumber(lpDDSBack,lpDDSFig,time,60,7,16,23);
DrawNumber(lpDDSBack,lpDDSHamfig,score,300,7,26,38);
break;
case 0: //Game Starting
//背景
GetRect(&rect, 0, 0, 433, 348);
rval=lpDDSBack->Blt( NULL, lpDDSBk, NULL, DDBLT_WAIT, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
//画出老鼠
for (i = 8;i>=0;i--)
{
if (mouse[i] > 0)
{
GetRect(&rect1,0,status[i]*85,124,85);
GetRect(&rect,holepos[i].x, holepos[i].y, 124, 85);
rval=lpDDSBack->Blt( &rect, lpDDSMouse[mouse[i]-1], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
if ((behit[i] >0)&&(status[i] ==4))
{
GetRect(&rect1,0,0,68,24);
GetRect(&rect,mousepos[i].x, mousepos[i].y,68,24);
rval=lpDDSBack->Blt( &rect, lpDDSBow, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
GetRect(&rect1,0,0,43,25);
GetRect(&rect,mousepos[i].x, holepos[i].y-20,43,25);
rval=lpDDSBack->Blt( &rect, lpDDSScore[mouse[i]-1], &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
}
}
}
//画出木锤
if (!hit)
{
GetRect(&rect1,0,0,68,68);
GetRect(&rect,pos.x-34, pos.y-68, 68, 68);
rval=lpDDSBack->Blt( &rect, lpDDSHammer, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
}
else
{
GetRect(&rect1,0,68,68,68);
GetRect(&rect,pos.x-34, pos.y-68, 68, 68);
rval=lpDDSBack->Blt( &rect, lpDDSHammer, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
}
GetRect(&rect1,0,0,319,56);
GetRect(&rect,90,20,319,56);
rval=lpDDSBack->Blt( &rect, lpDDSLogo, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) lpDDSBack->Restore();
break;
}
}
void InitData()
{
int i;
bActive = true;
delay = 5;
dwLastTickCount = 0;
hit = false;
get = false;
time = 20;
score = 0;
RECT Window;
GameStatus = 0;
GetClientRect(hwnd, &Window);
pt.x=pt.y=0;
ClientToScreen(hwnd, &pt);
//初始化老鼠洞位置
holepos[0].x = 24;
holepos[0].y = 215;
holepos[1].x = 160;
holepos[1].y = 215;
holepos[2].x = 296;
holepos[2].y = 215;
holepos[3].x = 1;
holepos[3].y = 150;
holepos[4].x = 137;
holepos[4].y = 150;
holepos[5].x = 274;
holepos[5].y = 150;
holepos[6].x = 32;
holepos[6].y = 87;
holepos[7].x = 159;
holepos[7].y = 87;
holepos[8].x = 287;
holepos[8].y = 87;
//初始化老鼠头位置
for (i = 0 ;i <9;i++)
{
mousepos[i].x = holepos[i].x + 25;
mousepos[i].y = holepos[i].y +15;
}
mousewidth = 62;
mouseheight = 62;
//初始化老鼠洞
for (i =0 ;i<9;i++)
{
mouse[i] = 1;
status[i] = 0;
holepos[i].y -= 21;
mousepos[i].y -= 21;
behit[i] = 0;
}
}
void CheckHit()
{
int i;
if (GameStatus ==0) return ;
if ((hit)&&(!get))
{
for (i =0;i<9;i++)
{
if ((mouse[i] >0)&&(status[i]<4))
{
if ((pos.x>mousepos[i].x)&&(pos.y>mousepos[i].y)&&(pos.x<mousepos[i].x+mousewidth)&&(pos.y<mousepos[i].y+mouseheight))
{
if (behit[i]<3)
behit[i] ++;
if (mouse[i]==2)
{
if (behit[i]>2)
{
status[i] = 4;
time += 1;
score += 3;
}
}
else
if (mouse[i] == 1)
{
score += 1;
status[i] = 4;
}
else if (mouse[i] == 3)
{
time -=2;
score -= 5;
if (score<=0 ) score = 0;
if (time<=0) time = 0;
status[i] = 4;
}
get = true;
return; //You can Only get One most.
}
}
}
}
//When Game is Over
if (time <=0)
{
char temp[30];
int s;
s = 0;
//写入注册表
HKEY hRegKey;
unsigned long result;
unsigned long datasize,datatype;
RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Raynor Game\\For Epork",0,"Epork",0,KEY_ALL_ACCESS,
NULL,&hRegKey,&result);
if (result == REG_CREATED_NEW_KEY)
{
}
else
{
datasize = sizeof(DWORD);
RegQueryValueEx(hRegKey,"Hiscore",NULL,&datatype,(LPBYTE)&s,&datasize);
}
sprintf(temp,"你得到了%d分",score);
if (score > s)
{
strcat(temp,",恭喜您破了纪录啦!");
RegSetValueEx(hRegKey,"Hiscore",NULL,datatype,(LPBYTE)&score,datasize);
}
RegCloseKey(hRegKey);
MessageBox(hwnd,temp,"GameOver:(",MB_OK);
hit = false;
get = false;
GameStatus = 0;
time = 20;
}
}
void StepAll()
{
// if (GameStatus == 0) return;
int i;
int num;
get = true;
for (i =0;i<9;i++)
{
if (mouse[i] >0)
{
if ((status[i]==4)&&(behit[i]>0))
{
behit[i] = 0;
}
else
{
status[i] ++;
if (status[i] >3)
{
mouse[i] =0;
status[i] = 0;
behit[i] = 0;
}
}
}
}
num = rand()/2000;
if (num <9)
{
if (mouse[num]==0)
{
int n;
n = rand()/10922;
if (n<3)
{
mouse[num] = n+1;
status[num] = 0;
}
}
}
}
void StartGame()
{
int i;
bActive = false;
delay = 5;
dwLastTickCount = 0;
hit = false;
get = false;
time = 20;
score = 0;
GameStatus = 1;
//初始化老鼠洞
for (i =0 ;i<9;i++)
{
mouse[i] = 0;
status[i] = 0;
behit[i] = 0;
}
MessageBox(hwnd,"游戏开始咯!\n黄色的老鼠只要打一下\n灰色的老鼠要连续打三下\n粉红色的老鼠不要随便打哦\n时间限制15秒\n打掉一只灰色的老鼠可以加1秒\n","注意啦!",MB_OK);
bActive = true;
}
void DrawNumber(LPDIRECTDRAWSURFACE dd,LPDIRECTDRAWSURFACE ss,int num,int x,int y,int width,int height)
{
int temp,temp1;
RECT rect,rect1;
HRESULT rval;
int i;
i = 0;
temp = temp1 = num;
while (1)
{
while (temp1>=10)
temp1 = temp1/10;
GetRect(&rect1,width*temp1,0,width,height);
GetRect(&rect,x+i*width,y, width,height);
rval=dd->Blt( &rect, ss, &rect1, DDBLT_WAIT|DDBLT_KEYSRC, NULL);
if(rval == DDERR_SURFACELOST) dd->Restore();
if (temp <10) break;
temp =temp - 10*(temp/10);
temp1 = temp;
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -