读书频道 > 网站 > 网页设计 > 深入体验VC++项目开发
1.7.5 实现具体显示界面
13-04-19    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > 深入体验VC++项目开发

Visual C++技术是当今使用最为频繁的程序开发技术之一,一直在开发领域占据着重要的地位。本书通过10个综合实例的实现过程,详细讲解了Visual C++在实践项目中的综合运用过程,这些项目从作者的学生时代写起,...立即去当当网订购

2004年7月11日

今天开始进入整个项目的核心阶段,本模块的功能是将各个游戏元素显示出来。为了适应多屏幕的显示,必须获取屏幕的高度和宽度;而由于这个高度和宽度在别的地方也要用到,所以必须设置为全局变量。通过高度才能充分地显示位图,通过宽度才能使位图显示在屏幕中间。

接下来是显示背景,背景的高度是2000像素,远远大于屏幕的高度,但是背景的宽度是有限的,我们必须确定位图的显示起点:((width-800)/2,0)。宽度是一定的,为800。高度就是height,而要显示的是一张很长的位图,该从位图的哪里开始显示呢?另外,如果位图到了尽头,又怎样才能让其实现头尾相接,连续显示呢?有一个办法就是同时显示两张背景位图,让它们头接尾地出现,当一张出现后我们看到的将是另一张而不是空白。

在具体实现上,我依然利用透明背景位图的显示函数,但并没有在Game类里面建立一个专门的函数来显示。但是,显然由于一些变量的关系,我只能在这里添加语句。通过一个背景数组,可以显示出对应的几种位图。这里利用的是给数组赋值,不同的值表示不同的位图。对应关系如下。
 我方子弹:2
 敌方飞机:3
 敌机子弹向左下角:4
 敌机子弹向正下方:5
 敌机子弹向右下角:6
 敌机炸毁:7
 我机炸毁:8

注意:敌机子弹的值不同是为了下一次下移的需要,我方飞机和火力分别用一个点表示。
该模块的具体实现代码如下:

   void CMy6_1View::OnDraw(CDC* pDC)
{
      int i,j;
      CMy6_1Doc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      // TODO: add draw code for native data here
      CRect WindowRect;
      GetWindowRect(&WindowRect);
      //屏幕宽度
      width=WindowRect.right-WindowRect.left;
      //屏幕高度
      height=WindowRect.bottom-WindowRect.top;
      CDC Dc;
       if(Dc.CreateCompatibleDC(pDC)==FALSE)
               AfxMessageBox("Can't create DC");
      //在不同位置显示位图
     Dc.SelectObject(backmap);
      //显示两张位图使它们连接
      pDC->BitBlt((width-800)/2,0,800,height,&Dc,0,goup-2000,SRCCOPY);
      pDC->BitBlt((width-800)/2,0,800,height,&Dc,0,goup,SRCCOPY);
      CClientDC dc(this);
      //显示
      //检查背景数组
      for(i=0;i<15;i++)
             for(j=0;j<12;j++)
             {
                //显示我方子弹
                if(game.back[i][j]==2)
                     //利用透明显示函数
                     game.TransparentBitmap(dc.GetSafeHdc(), game.bmshot,(width-800)/2+i*50+20,j*height/600*50, 0,0, game.cTransparentColor);    
                    //显示敌机
                if(game.back[i][j]==3)
                     game.TransparentBitmap(dc.GetSafeHdc(), game.enemy,(width-800)/2+i*50+20,j*height/600*50,0,0, game.cTransparentColor);    
                    //飞机炸毁
              if(game.back[i][j]==7||game.back[i][j]==8)
                  game.TransparentBitmap(dc.GetSafeHdc(), game.enemydead,(width-800)/2+i*50+20,j*height/600*50,0,0, game.cTransparentColor);    
                  //敌机子弹
                    if((game.back[i][j]==5)||(game.back[i][j]==4)||(game.back[i][j]==6))
      game.TransparentBitmap(dc.GetSafeHdc(), game.bmenemyshot,(width-800)/2+i*50+20,j*height/600*50,0,0, game.cTransparentColor);    
             }
             //显示火力位图
      game.TransparentBitmap(dc.GetSafeHdc(), game.bmfire,(width-800)/2+game.pointfire.x*50+20,  game.pointfire.y*height/600*50, 0,0, game.cTransparentColor);
      //显示我方飞机
      game.TransparentBitmap(dc.GetSafeHdc(), game.plane,(width-800)/2+game.xStart*50+20,  game.yStart*height/600*50, 0,0, game.cTransparentColor);    
      //显示信息
      game.DrawMessage(pDC,width,height);
      //信息的飞机位图
      game.TransparentBitmap(dc.GetSafeHdc(), game.plane,(width-800)/2+20,  height-80, 0,0, game.cTransparentColor);      
      //信息的火力位图
      game.TransparentBitmap(dc.GetSafeHdc(), game.bmfire,(width-800)/2+800-120,height-80,0,0, game.cTransparentColor);    
}

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站