CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问高手:如何用键盘控制小球的运动?先谢谢了!

楼主danlansky(忧郁蓝色)2003-10-03 20:54:10 在 VC/MFC / 基础类 提问

我在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;  
          } 问题点数:100、回复次数:14Top

1 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2003-10-03 21:02:30 得分 5

楼主:我怎么编译不行呢  
  说这个CFormView::OnTimer(nIDEvent);有问题哦  
   
  还请楼主指点一二Top

2 楼nuaawenlin(飘人)回复于 2003-10-03 21:03:41 得分 0

设一个标志,当键盘按下时执行另一个函数,而在OnTimer()里面的绘图动作停止Top

3 楼danlansky(忧郁蓝色)回复于 2003-10-03 21:11:41 得分 0

CFormView是我选的CMyView的基类;所以在Wizard里的最后一步你选CMyView的基类为CFormView就行了。或者你随便用什么视图的基类,然后将CFormView::OnTimer(nIDEvent);里的CFormView改成你自己用的基类就行了!另外,  
                    CBitmap   *bitmap=new   CBitmap;//小球20*20象素即半径10象素  
  bitmap->LoadBitmap(IDB_BALL);//装载小球图片  
  mdc->SelectObject(bitmap);  
  这三行中的IDB_BALL是在资源(ResourceView)管理器里加入了一张小球图片(bmp位图格式)的ID;如果你没有的话,可以找一个大小为20*20象素的位图代替就可以了!谢谢你了先!我的E-mail:goujianbing@163.com             QQ:4000990  
  Top

4 楼danlansky(忧郁蓝色)回复于 2003-10-03 21:14:47 得分 0

nuaawenlin(飘人):你好!能不能详细点,我是初学者,好多东西都不会。如何获取键盘对小球的控制?函数如何写?能帮我写写吗?Top

5 楼Skt32(荒城之月)回复于 2003-10-03 21:35:06 得分 10

 
  参考:  
   
  蛇吞蛋  
  http://fxstudio.xiloo.com/code/snake.zipTop

6 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2003-10-03 21:58:08 得分 0

Skt32(荒城之月)  
  http://fxstudio.xiloo.com/code/snake.zip  
   
  这个怎么玩呢Top

7 楼danlansky(忧郁蓝色)回复于 2003-10-03 22:05:30 得分 0

Skt32(荒城之月)谢谢指点,今天晚上我研究一下!但是我运行的时候怎么没有背景音乐啊!我仔细没看源代码!还是看了再问你吧!Top

8 楼yaoha2003(爱老婆更爱键盘!)回复于 2003-10-03 22:37:24 得分 0

重载ON_KEYDOWN消息啊,  
  //   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  
   
   
  /////////////////////////////////////////////////////////////////////////////  
  //   ActionFram  
   
  int   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   handlers  
   
  void   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);  
  }Top

9 楼yaoha2003(爱老婆更爱键盘!)回复于 2003-10-03 22:37:59 得分 0

include   "ActionFrame.h"  
   
   
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
   
   
  /////////////////////////////////////////////////////////////////////////////  
  //   ActionFram  
   
  int   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   handlers  
   
  void   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);  
  }Top

10 楼yaoha2003(爱老婆更爱键盘!)回复于 2003-10-03 22:38:12 得分 0

很菜的Top

11 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2003-10-04 10:38:28 得分 0

国庆来了,我不打算送你们太多,只想送你们六千万:千万要快乐,千万要健康,千万要平安,千万要知足,千万不要忘记我,千万要给我分!Top

12 楼yaoha2003(爱老婆更爱键盘!)回复于 2003-10-04 12:05:08 得分 0

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);  
  }  
  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);  
  }  
  Top

13 楼Skt32(荒城之月)回复于 2003-10-04 14:23:39 得分 5

koules:      
   
   由Linux移植的程序,经典作品。    
   
      开发工具:VC++6.0   和   Directx      
   
   程序及源程序下载(174k)  
   
  http://creativesoft.home.shangdu.net/koules.zipTop

14 楼aXu(小鱼儿)回复于 2003-10-08 20:48:34 得分 80

重载ON_KEYDOWN消息  
  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;  
                    //其他的键控制可以参考上面,自己要多练习  
  }Top

相关问题

  • 控制键盘Num lock灯
  • 用键盘控制窗体上的commandbutton运动时,如何消除commandbutton的停滞感??(内详)
  • 怎样控制键盘灯
  • 键盘控制方向
  • 运动控制卡
  • 如何用键盘控制tc程序。
  • 如何用键盘来控制焦点????
  • 键盘控制问题(高分相送!)
  • 怎么用键盘来 控制
  • 键盘输入控制问题?

关键词

  • mdc
  • 函数
  • 矩形
  • 控制
  • dc
  • yk
  • srcpaint
  • randomnum
  • actionframe
  • bitblt

得分解答快速导航

  • 帖主:danlansky
  • dzqsuper
  • Skt32
  • Skt32
  • aXu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo