BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
//贴出鸟的图片
SelectObject(bufdc,bird);
for(i=0;i<3;i++)
{
if(rand()%3 != 1) //有2/3几率进行追踪
{
if(p[i].y > y-16)
p[i].y -= 5;
else
p[i].y += 5;
if(p[i].x > x-25)
p[i].x -= 5;
else
p[i].x += 5;
}
if(p[i].x > x-25) //判断小鸟的移动方向,从而选择合适的位图朝向
{
BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,61,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,61,SRCPAINT);
}
else
{
BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,61,0,SRCAND);
BitBlt(mdc,p[i].x,p[i].y,61,61,bufdc,0,0,SRCPAINT);
}
}
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
tPre = GetTickCount(); //记录此次绘图时间
num++;
if(num == 8)
num = 0;
}
//****消息处理函数***********************************
// 1.按下【Esc】键结束程序
// 2.按下方向键重设贴图坐标
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_KEYDOWN: //按下键盘消息
//判断按键的虚拟键码
{
case VK_ESCAPE: //按下【Esc】键
PostQuitMessage( 0 ); //结束程序
break;
case VK_UP: //按下【↑】键
//先按照目前的移动方向来进行贴图坐标修正,并加入人物往上移动的量(每次按下一次按键移动10个单位),来决定人物贴图坐标的X与Y值,接着判断坐标是否超出窗口区域,若有则再次修正
switch(dir)
{
case 0:
y -= 10;
break;
case 1:
x -= 1;
y -= 8;
break;
case 2:
x += 2;
y -= 10;
break;
case 3:
x += 2;
y -= 10;
break;
}
if(y < 0)
y = 0;
dir = 0;
break;
case VK_DOWN: //按下【↓】键
switch(dir)
{
case 0:
x += 1;
y += 8;
break;
case 1:
y += 10;
break;
case 2:
x += 3;
y += 6;
break;
case 3:
x += 3;
y += 6;
break;
}
if(y > 375)
y = 375;
dir = 1;
break;
case VK_LEFT: //按下【←】键
switch(dir)
{
case 0:
x -= 12;