我在CMyView::OnCreate()里设置了一个定时器SetTimer(1,200,NULL);在视类的构造函数中给小球一个初速度,使其在定时器事件里自动行驶,问如何用小键盘的四个方向键、Home(左上)、PgUp(右上)、End(左下)、PgDn(右下)这八个方向键控制小球的行驶,并且当按键时,定时器关闭;不按键时,小球按原来轨迹自动行驶?
以下是源代码:
CMyView::OnTimer(UINT nIDEvent)里
{
CClientDC dc(this);
dc.Rectangle(10,10,520,450);//画边框,使小球移动范围限制在该矩形框里
CDC *mdc=new CDC;
mdc->CreateCompatibleDC(&dc);
CBitmap *bitmap=new CBitmap;//小球20*20象素即半径10象素
bitmap->LoadBitmap(IDB_BALL);//装载小球图片
mdc->SelectObject(bitmap);
dc.BitBlt(x,y,20,20,mdc,0,0,SRCCOPY);//小球初始位置(500,430)
//x,y,vx,vy是视类的成员变量int x,y,vx,vy;
//在视类的构造函数中赋初值x=500;y=430;vx=vy=5;
x += vx;//小球的初速度vx=vy=5象素
y += vy;
if(y >= 430)//小球碰到矩形底时,初速度反向
{
vy = -vy;
y = 430;
}
if(x >= 500)//矩形右边
{
vx = -vx;
x = 500;
}
if(x <= 20)//矩形左边
{
vx = -vx;
x = 20;
}
if(y <= 20)//矩形顶
{
vy = -vy;
y = 20;
}
CFormView::OnTimer(nIDEvent);
if(mdc) delete mdc;
if(bitmap) delete bitmap;
}
以下是源代码:
CMyView::OnTimer(UINT nIDEvent)里
{
CClientDC dc(this);
dc.Rectangle(10,10,520,450);//画边框,使小球移动范围限制在该矩形框里
CDC *mdc=new CDC;
mdc->CreateCompatibleDC(&dc);
CBitmap *bitmap=new CBitmap;//小球20*20象素即半径10象素
bitmap->LoadBitmap(IDB_BALL);//装载小球图片
mdc->SelectObject(bitmap);
dc.BitBlt(x,y,20,20,mdc,0,0,SRCCOPY);//小球初始位置(500,430)
//x,y,vx,vy是视类的成员变量int x,y,vx,vy;
//在视类的构造函数中赋初值x=500;y=430;vx=vy=5;
x += vx;//小球的初速度vx=vy=5象素
y += vy;
if(y >= 430)//小球碰到矩形底时,初速度反向
{
vy = -vy;
y = 430;
}
if(x >= 500)//矩形右边
{
vx = -vx;
x = 500;
}
if(x <= 20)//矩形左边
{
vx = -vx;
x = 20;
}
if(y <= 20)//矩形顶
{
vy = -vy;
y = 20;
}
CFormView::OnTimer(nIDEvent);
if(mdc) delete mdc;
if(bitmap) delete bitmap;
}
说这个CFormView::OnTimer(nIDEvent);有问题哦还请楼主指点一二
参考:蛇吞蛋
http://fxstudio.xiloo.com/code/snake.zip
http://fxstudio.xiloo.com/code/snake.zip这个怎么玩呢
// ActionFrame.cpp : implementation file
//#include "stdafx.h"#include "ActionFrame.h"
include "ActionFrame.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ActionFramint p=0;
int count=7;
int count1=0;
int count2=0;
int count3=0;
int life=120;
int x=130,y=360,k=0,yp=250;
int flags=0,flags1=0,flags2=0,flags3=0,flags4=0;
int randomnum[8]={abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20};
int yk[8]={315,270,225,180,135,90,45,0};
int selectram[6]={0,0,0,0,0,0};
IMPLEMENT_DYNCREATE(ActionFrame, CFrameWnd)ActionFrame::ActionFrame()
{
Create(NULL,"游戏----制作",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL,0,NULL);
CRect rect;
CClientDC dc(this);
int width=GetDeviceCaps(dc,HORZSIZE);
int heigh=GetDeviceCaps(dc,VERTSIZE);
GetWindowRect(&rect);
width=width/2;
heigh=heigh/2;
MoveWindow(width,heigh,(rect.right-rect.left),(rect.bottom-rect.top),true);
bgmap= new CBitmap;
maskmap=new CBitmap;
showmap=new CBitmap;
tempmap=new CBitmap;
bg=new CBitmap;
mdc=new CDC;
mdc1=new CDC;
mdc->CreateCompatibleDC(&dc);
mdc1->CreateCompatibleDC(&dc);
showmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bmp1.bmp",IMAGE_BITMAP,542,399,LR_LOADFROMFILE);
bgmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bgmap.bmp",IMAGE_BITMAP,635,435,LR_LOADFROMFILE);
maskmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bmp2.bmp",IMAGE_BITMAP,383,231,LR_LOADFROMFILE);
tempmap->CreateCompatibleBitmap(&dc,633,435);
bg->m_hObject=(HBITMAP)::LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,421,720,LR_LOADFROMFILE);
mdc->SelectObject(tempmap);
i=0;
}ActionFrame::~ActionFrame()
{
bgmap->DeleteObject();
showmap->DeleteObject();
maskmap->DeleteObject();
tempmap->DeleteObject();
mdc->DeleteDC();
mdc1->DeleteDC();
KillTimer(0);
}
BEGIN_MESSAGE_MAP(ActionFrame, CFrameWnd)
//{{AFX_MSG_MAP(ActionFrame)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_KEYDOWN()
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// ActionFrame message handlersvoid ActionFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CFrameWnd::OnPaint() for painting messages
}
int ActionFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(0,25,NULL);
// TODO: Add your specialized creation code here
ModifyStyleEx(0,SWP_NOSIZE);
return 0;
}void ActionFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
count3++;
flags4=0;
CClientDC dc(this);
flags1=0;
CTime nowTime;
nowTime=GetCurrentTime();
CString str;
str=nowTime.Format("%S");
char temp1=str.GetAt(1);
int temp2=(int)temp1;
mdc1->SelectObject(bgmap);
mdc->BitBlt(0,0,633,435,mdc1,0,0,SRCCOPY);
if(y<=0)
{
mdc1->SelectObject(bg);
mdc->BitBlt(21,60,421,-y,mdc1,0,720+y,SRCPAINT);
mdc->BitBlt(21,60-y,421,360+y,mdc1,0,0,SRCPAINT);
}
else
{
mdc1->SelectObject(bg);
mdc->BitBlt(21,60,421,360,mdc1,0,y,SRCPAINT);
}
for(int j=0;j<8;j++)
{
if(yk[j]>=360)
{
selectram[j]=abs(rand())%9;
if(selectram[j]>5)
selectram[j]=0;
randomnum[j]=abs(rand())%100+(temp2-50)*30;
if(randomnum[j]<40||randomnum[j]>330)
randomnum[j]=abs(rand())%290+40;
yk[j]=0;
}
if(x>=randomnum[j]-28&&x<=randomnum[j]+90)
if(yp+32>=420-yk[j]&&yp+32-420+yk[j]<=25)
{
if(selectram[j]==5)
{
yp=388-yk[j]+24;
flags4=1;
}
else
yp=388-yk[j];
flags1=selectram[j]+1;
if(selectram[j]==1)
flags2=randomnum[j];
if(selectram[j]==2)
flags3=randomnum[j];
}
switch(selectram[j])
{
case 0:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,0,SRCPAINT);
yk[j]+=5;
break;
case 1:
if(flags2==randomnum[j])
{
count1++;
switch(count1%5)
{
case 0:
mdc->BitBlt(flags2,420-yk[j]-5,94,24,mdc1,288,183,SRCPAINT);
break;
case 1:
mdc->BitBlt(flags2,420-yk[j]-11,94,36,mdc1,288,215,SRCPAINT);
break;
case 2:
mdc->BitBlt(flags2,420-yk[j]-9,94,32,mdc1,288,254,SRCPAINT);
break;
case 3:
mdc->BitBlt(flags2,420-yk[j]-10,94,34,mdc1,288,289,SRCPAINT);
break;
case 4:
mdc->BitBlt(flags2,420-yk[j]-8,94,30,mdc1,288,327,SRCPAINT);
break;
}
yk[j]+=5;
if(count1>=5)
{
count1=0;
flags2=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,153,SRCPAINT);
yk[j]+=5;
}
break;
case 2:
if(flags3==randomnum[j])
{
count1++;
switch(count1%8)
{
case 0:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 1:
mdc->BitBlt(flags3,420-yk[j]+4,94,12,mdc1,384,352,SRCCOPY);
break;
case 2:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 3:
mdc->BitBlt(flags3,420-yk[j],94,16,mdc1,384,304,SRCCOPY);
break;
case 4:
mdc->BitBlt(flags3,420-yk[j]-2,94,18,mdc1,384,280,SRCCOPY);
break;
case 5:
mdc->BitBlt(flags3,420-yk[j]-4,94,20,mdc1,384,256,SRCCOPY);
break;
case 6:
mdc->BitBlt(flags3,420-yk[j]-6,94,22,mdc1,384,232,SRCCOPY);
break;
case 7:
mdc->BitBlt(flags3,420-yk[j]-8,94,24,mdc1,384,208,SRCCOPY);
break;
}
yk[j]+=5;
if(count1>=8)
{
count1=0;
flags3=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,384,304,SRCPAINT);
yk[j]+=5;
}
break;
case 3:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,15+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 4:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,80+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 5:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,30,mdc1,382,368,SRCPAINT);
yk[j]+=5;
break;
}
}
if(yp<=70)
{
yp=75;
life-=10;
flags4=1;
}
if(flags3!=0)
yp-=30;
if(flags4==1)
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCPAINT);
}
else
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCPAINT);
}
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ActionFramint p=0;
int count=7;
int count1=0;
int count2=0;
int count3=0;
int life=120;
int x=130,y=360,k=0,yp=250;
int flags=0,flags1=0,flags2=0,flags3=0,flags4=0;
int randomnum[8]={abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20,abs(rand())%320+20};
int yk[8]={315,270,225,180,135,90,45,0};
int selectram[6]={0,0,0,0,0,0};
IMPLEMENT_DYNCREATE(ActionFrame, CFrameWnd)ActionFrame::ActionFrame()
{
Create(NULL,"游戏----制作",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL,0,NULL);
CRect rect;
CClientDC dc(this);
int width=GetDeviceCaps(dc,HORZSIZE);
int heigh=GetDeviceCaps(dc,VERTSIZE);
GetWindowRect(&rect);
width=width/2;
heigh=heigh/2;
MoveWindow(width,heigh,(rect.right-rect.left),(rect.bottom-rect.top),true);
bgmap= new CBitmap;
maskmap=new CBitmap;
showmap=new CBitmap;
tempmap=new CBitmap;
bg=new CBitmap;
mdc=new CDC;
mdc1=new CDC;
mdc->CreateCompatibleDC(&dc);
mdc1->CreateCompatibleDC(&dc);
showmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bmp1.bmp",IMAGE_BITMAP,542,399,LR_LOADFROMFILE);
bgmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bgmap.bmp",IMAGE_BITMAP,635,435,LR_LOADFROMFILE);
maskmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bmp2.bmp",IMAGE_BITMAP,383,231,LR_LOADFROMFILE);
tempmap->CreateCompatibleBitmap(&dc,633,435);
bg->m_hObject=(HBITMAP)::LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,421,720,LR_LOADFROMFILE);
mdc->SelectObject(tempmap);
i=0;
}ActionFrame::~ActionFrame()
{
bgmap->DeleteObject();
showmap->DeleteObject();
maskmap->DeleteObject();
tempmap->DeleteObject();
mdc->DeleteDC();
mdc1->DeleteDC();
KillTimer(0);
}
BEGIN_MESSAGE_MAP(ActionFrame, CFrameWnd)
//{{AFX_MSG_MAP(ActionFrame)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_KEYDOWN()
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// ActionFrame message handlersvoid ActionFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CFrameWnd::OnPaint() for painting messages
}
int ActionFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(0,25,NULL);
// TODO: Add your specialized creation code here
ModifyStyleEx(0,SWP_NOSIZE);
return 0;
}void ActionFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
count3++;
flags4=0;
CClientDC dc(this);
flags1=0;
CTime nowTime;
nowTime=GetCurrentTime();
CString str;
str=nowTime.Format("%S");
char temp1=str.GetAt(1);
int temp2=(int)temp1;
mdc1->SelectObject(bgmap);
mdc->BitBlt(0,0,633,435,mdc1,0,0,SRCCOPY);
if(y<=0)
{
mdc1->SelectObject(bg);
mdc->BitBlt(21,60,421,-y,mdc1,0,720+y,SRCPAINT);
mdc->BitBlt(21,60-y,421,360+y,mdc1,0,0,SRCPAINT);
}
else
{
mdc1->SelectObject(bg);
mdc->BitBlt(21,60,421,360,mdc1,0,y,SRCPAINT);
}
for(int j=0;j<8;j++)
{
if(yk[j]>=360)
{
selectram[j]=abs(rand())%9;
if(selectram[j]>5)
selectram[j]=0;
randomnum[j]=abs(rand())%100+(temp2-50)*30;
if(randomnum[j]<40||randomnum[j]>330)
randomnum[j]=abs(rand())%290+40;
yk[j]=0;
}
if(x>=randomnum[j]-28&&x<=randomnum[j]+90)
if(yp+32>=420-yk[j]&&yp+32-420+yk[j]<=25)
{
if(selectram[j]==5)
{
yp=388-yk[j]+24;
flags4=1;
}
else
yp=388-yk[j];
flags1=selectram[j]+1;
if(selectram[j]==1)
flags2=randomnum[j];
if(selectram[j]==2)
flags3=randomnum[j];
}
switch(selectram[j])
{
case 0:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,0,SRCPAINT);
yk[j]+=5;
break;
case 1:
if(flags2==randomnum[j])
{
count1++;
switch(count1%5)
{
case 0:
mdc->BitBlt(flags2,420-yk[j]-5,94,24,mdc1,288,183,SRCPAINT);
break;
case 1:
mdc->BitBlt(flags2,420-yk[j]-11,94,36,mdc1,288,215,SRCPAINT);
break;
case 2:
mdc->BitBlt(flags2,420-yk[j]-9,94,32,mdc1,288,254,SRCPAINT);
break;
case 3:
mdc->BitBlt(flags2,420-yk[j]-10,94,34,mdc1,288,289,SRCPAINT);
break;
case 4:
mdc->BitBlt(flags2,420-yk[j]-8,94,30,mdc1,288,327,SRCPAINT);
break;
}
yk[j]+=5;
if(count1>=5)
{
count1=0;
flags2=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,153,SRCPAINT);
yk[j]+=5;
}
break;
case 2:
if(flags3==randomnum[j])
{
count1++;
switch(count1%8)
{
case 0:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 1:
mdc->BitBlt(flags3,420-yk[j]+4,94,12,mdc1,384,352,SRCCOPY);
break;
case 2:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 3:
mdc->BitBlt(flags3,420-yk[j],94,16,mdc1,384,304,SRCCOPY);
break;
case 4:
mdc->BitBlt(flags3,420-yk[j]-2,94,18,mdc1,384,280,SRCCOPY);
break;
case 5:
mdc->BitBlt(flags3,420-yk[j]-4,94,20,mdc1,384,256,SRCCOPY);
break;
case 6:
mdc->BitBlt(flags3,420-yk[j]-6,94,22,mdc1,384,232,SRCCOPY);
break;
case 7:
mdc->BitBlt(flags3,420-yk[j]-8,94,24,mdc1,384,208,SRCCOPY);
break;
}
yk[j]+=5;
if(count1>=8)
{
count1=0;
flags3=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,384,304,SRCPAINT);
yk[j]+=5;
}
break;
case 3:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,15+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 4:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,80+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 5:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,30,mdc1,382,368,SRCPAINT);
yk[j]+=5;
break;
}
}
if(yp<=70)
{
yp=75;
life-=10;
flags4=1;
}
if(flags3!=0)
yp-=30;
if(flags4==1)
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCPAINT);
}
else
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCPAINT);
}
{
if(yk[j]>=360)
{
selectram[j]=abs(rand())%9;
if(selectram[j]>5)
selectram[j]=0;
randomnum[j]=abs(rand())%100+(temp2-50)*30;
if(randomnum[j]<40||randomnum[j]>330)
randomnum[j]=abs(rand())%290+40;
yk[j]=0;
}
if(x>=randomnum[j]-28&&x<=randomnum[j]+90)
if(yp+32>=420-yk[j]&&yp+32-420+yk[j]<=25)
{
if(selectram[j]==5)
{
yp=388-yk[j]+24;
flags4=1;
}
else
yp=388-yk[j];
flags1=selectram[j]+1;
if(selectram[j]==1)
flags2=randomnum[j];
if(selectram[j]==2)
flags3=randomnum[j];
}
switch(selectram[j])
{
case 0:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,0,SRCPAINT);
yk[j]+=5;
break;
case 1:
if(flags2==randomnum[j])
{
count1++;
switch(count1%5)
{
case 0:
mdc->BitBlt(flags2,420-yk[j]-5,94,24,mdc1,288,183,SRCPAINT);
break;
case 1:
mdc->BitBlt(flags2,420-yk[j]-11,94,36,mdc1,288,215,SRCPAINT);
break;
case 2:
mdc->BitBlt(flags2,420-yk[j]-9,94,32,mdc1,288,254,SRCPAINT);
break;
case 3:
mdc->BitBlt(flags2,420-yk[j]-10,94,34,mdc1,288,289,SRCPAINT);
break;
case 4:
mdc->BitBlt(flags2,420-yk[j]-8,94,30,mdc1,288,327,SRCPAINT);
break;
}
yk[j]+=5;
if(count1>=5)
{
count1=0;
flags2=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,288,153,SRCPAINT);
yk[j]+=5;
}
break;
case 2:
if(flags3==randomnum[j])
{
count1++;
switch(count1%8)
{
case 0:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 1:
mdc->BitBlt(flags3,420-yk[j]+4,94,12,mdc1,384,352,SRCCOPY);
break;
case 2:
mdc->BitBlt(flags3,420-yk[j]+2,94,14,mdc1,384,328,SRCCOPY);
break;
case 3:
mdc->BitBlt(flags3,420-yk[j],94,16,mdc1,384,304,SRCCOPY);
break;
case 4:
mdc->BitBlt(flags3,420-yk[j]-2,94,18,mdc1,384,280,SRCCOPY);
break;
case 5:
mdc->BitBlt(flags3,420-yk[j]-4,94,20,mdc1,384,256,SRCCOPY);
break;
case 6:
mdc->BitBlt(flags3,420-yk[j]-6,94,22,mdc1,384,232,SRCCOPY);
break;
case 7:
mdc->BitBlt(flags3,420-yk[j]-8,94,24,mdc1,384,208,SRCCOPY);
break;
}
yk[j]+=5;
if(count1>=8)
{
count1=0;
flags3=0;
}
}
else
{
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,14,mdc1,384,304,SRCPAINT);
yk[j]+=5;
}
break;
case 3:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,15+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 4:
mdc1->SelectObject(showmap);
count2++;
mdc->BitBlt(randomnum[j],420-yk[j],94,16,mdc1,288,80+count2/3%4*16,SRCCOPY);
yk[j]+=5;
break;
case 5:
mdc1->SelectObject(showmap);
mdc->BitBlt(randomnum[j],420-yk[j],94,30,mdc1,382,368,SRCPAINT);
yk[j]+=5;
break;
}
}
if(yp<=70)
{
yp=75;
life-=10;
flags4=1;
}
if(flags3!=0)
yp-=30;
if(flags4==1)
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp-8,31,31,mdc1,128+k*32,flags*34,SRCPAINT);
}
else
{
mdc1->SelectObject(maskmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCAND);
mdc1->SelectObject(showmap);
mdc->BitBlt(x,yp,31,31,mdc1,k*32,flags*34,SRCPAINT);
}
switch(flags1)
{
case 1:
yp-=5;
break;
case 2:
break;
case 3:
break;
case 4:
yp-=5;
x+=3;
break;
case 5:
yp-=5;
x-=3;
break;
case 6:
yp-=50;
if(!(count--%6))
life-=10;
if(count<=0)
count=7;
break;
}
yp+=21; y-=8;
if(y<=-360)
y=360;
if(x>380)
x=380;
if(x<43)
x=43;
CFrameWnd::OnTimer(nIDEvent);
mdc->BitBlt(40,60,386,15,mdc1,0,367,SRCPAINT);
mdc->BitBlt(22,60,16,360,mdc1,510,0,SRCPAINT);
mdc->BitBlt(426,60,16,360,mdc1,510,0,SRCPAINT);
mdc->BitBlt(20,38,95,16,mdc1,384,life/10*16,SRCPAINT);
mdc->BitBlt(151,25,108,31,mdc1,128,320,SRCPAINT);
mdc->BitBlt(270,25,29,32,mdc1,480,p/100*32,SRCPAINT);
mdc->BitBlt(300,25,29,32,mdc1,480,p/10%10*32,SRCPAINT);
mdc->BitBlt(330,25,29,32,mdc1,480,p%100%10*32,SRCPAINT);
dc.BitBlt(0,0,633,435,mdc,0,0,SRCCOPY);
p=count3/60;
if(count3%20==0)
if(life<100)
life+=10;
if(yp>=490||life<=0)
{
KillTimer(0);
if(p<10)
AfxMessageBox("你好菜啊!呵呵!",MB_ICONINFORMATION);
if(p>=10&&p<50)
AfxMessageBox("水平还有限!",MB_ICONINFORMATION);
if(p>=50&&p<80)
AfxMessageBox("水平可以啦!",MB_ICONINFORMATION);
if(p>=80&&p<100)
AfxMessageBox("好厉害啊!",MB_ICONINFORMATION);
if(p>=100)
AfxMessageBox("不错,是高手!",MB_ICONINFORMATION);
int result=::MessageBox(this->m_hWnd,"是否继续?","询问",MB_YESNO|MB_ICONQUESTION);
i=0;
yp=140;
p=0;
life=100;
if(result==IDOK)
{
SetTimer(0,10,NULL);
}
if(result==IDNO)
DestroyWindow();
}
/* if(p<10)
dc.TextOut(510,203,"小心有陷阱!");
if(p>=10&&p<30)
dc.TextOut(510,203,"路正长,坚持!");
if(p>=30&&p<60)
dc.TextOut(510,203,"漫漫黑夜,不要着急!");
if(p>=60&&p<80)
dc.TextOut(510,203,"已经看到曙光了!");
if(p>=80&&p<100)
dc.TextOut(510,203,"胜利就在眼前了!");
if(p>=100)
dc.TextOut(510,203,"恭喜你!成功了!");
*/
}
BOOL ActionFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
cs.cx=643;
cs.cy=464;
cs.style &=~WS_MAXIMIZEBOX;
return CFrameWnd::PreCreateWindow(cs);
}
void ActionFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
k=i%4;
i++;
if(nChar==VK_RIGHT)
{
flags=1;
x+=15;
}
if(nChar==VK_LEFT)
{
flags=0;
x-=15;
}
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
void ActionFrame::OnSetFocus(CWnd* pOldWnd)
{
CFrameWnd::OnSetFocus(pOldWnd);
SetTimer(0,10,NULL);
// TODO: Add your message handler code here
}void ActionFrame::OnKillFocus(CWnd* pNewWnd)
{
CFrameWnd::OnKillFocus(pNewWnd);
KillTimer(0);
// TODO: Add your message handler code here
}void ActionFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPoint Pos;
Pos=point; CRect rect;
GetClientRect(&rect);
rect.left=510;
rect.top=300;
rect.bottom=350;
rect.right=560;
if(rect.PtInRect((POINT)Pos)&&!m_Stop)
{
m_Stop=TRUE;
KillTimer(0);
}
else if(m_Stop&&rect.PtInRect((POINT)Pos))
{
m_Stop=FALSE;
SetTimer(0,25,NULL);
}
CFrameWnd::OnLButtonDown(nFlags, point);
}
void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch(nChar)
{
case 87://大写W键的ASCII值 可以控制小球向上移动
case 119://小写w键的ASCII值
KillTimer(1);//KeyDown时关闭定时器
y += vy;
this->DrawBall(x,y);//你自己定义一个画小球的函数
if(y <= 20)//
{
vy = vy;
y = 430;
}
SetTimer(1,200,NULL);//不按键时让小球自己走
break;
//其他的键控制可以参考上面,自己要多练习
}