`
xujinquan19
  • 浏览: 150031 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

最经典 VC游戏开发全过程

阅读更多

入门篇:

游戏是动画的延伸,只要知道了动画的原理,在动画变化时,使它根据键盘或鼠标的输入操作而变化,就是游戏了。

所以在介绍游戏编程之前,先讲讲动画。

动画一般分三种形式:形变、位变、色变。如下:

 

1. 形变  

 

即几种形状的图形或位图依次转变而成。(图1-1)


                          图1-1

 

 

先看一个简单的实例:

a.  新建工程1_1,选择单文档,完成。

b.  在view类加变量int ituxing,并在构造函数里赋值为ituxing=0;

c.  在OnDraw(CDC* pDC)函数上添上以下语句:

  void CMy1_1View::OnDraw(CDC* pDC)

{

    CMy1_1Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here

  //清除当前图形

    CBrush mybrush1;

    mybrush1.CreateSolidBrush(RGB(255,255,255));

    CRect myrect1(0,0,1024,768);

    pDC->FillRect(myrect1,&mybrush1);

    //判断当前图形ituxing

    if(ituxing==1)

  //ituxing=1,画矩形

           pDC->Rectangle(20,20,89,89);

    else if(ituxing==2)

    //ituxing=2,画圆

            pDC->Ellipse(20,20,89,89);

        else

    //否则,画三角形

           {

                  pDC->MoveTo(20,20);

                  pDC->LineTo(89,45);

               pDC->LineTo(20,89);

                  pDC->LineTo(20,20);

           }

}

d.  添加OnTimer(UINT nIDEvent)和OnCreate(LPCREATESTRUCT lpCreateStruct),并加上语句如下:

   void CMy1_1View::OnTimer(UINT nIDEvent) 

{

        // TODO: Add your message handler code here and/or call default

     //获取指针pdc

     CDC *pDC=GetDC();

     //调用OnDraw(pDC)重画

     OnDraw(pDC);

     //使ituxing循环

     ituxing=(ituxing+1)%3;

 

     CView::OnTimer(nIDEvent);

}

 

int CMy1_1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{

     if (CView::OnCreate(lpCreateStruct) == -1)

            return -1;


     // TODO: Add your specialized creation code here

     //设置更新时间

     SetTimer(1, 750, NULL);

     return 0;

}

e.  完成。

 

2. 位变 

 

 即同一个图形或位图依次在不同的位置上出现而形成动画。(图1-2)

      

 

   

                       图 1-2

 

见实例1_2:

a.       复制实例1_1文件夹,改名为1_2。

把void CMy1_1View::OnTimer(UINT nIDEvent)中的ituxing=(ituxing+1)%3;改为ituxing=(ituxing+1)%10;

b.       把OnDraw(CDC* pDC)函数改为:

    void CMy1_1View::OnDraw(CDC* pDC)

{

       CMy1_1Doc* pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       // TODO: add draw code for native data here

       //清除当前图形

       CBrush mybrush1;

mybrush1.CreateSolidBrush(RGB(255,255,255));

CRect myrect1(0,0,1024,768);

               pDC->FillRect(myrect1,&mybrush1);

 

               //用当前图形位置ituxing     

       //画圆

       pDC->Ellipse(30*ituxing,30*ituxing,30*ituxing+50,30*ituxing+50); 

}

c.       执行,OK!

      

3.  色变  

 

即利用不同颜色的转变而形成有动感的图画。(图1-3)


                             图1-3

 

 

   实例1_3:

a.       新建单文档工程1_3。

b.       添加参数int icolor并赋值为0。

c.       添加函数OnTimer(UINT nIDEvent)和OnCreate(LPCREATESTRUCT lpCreateStruct),并添加语句如下:

 

        void CMy1_3View::OnTimer(UINT nIDEvent) 

{

       // TODO: Add your message handler code here and/or call default

       icolor+=1;

    //此函数使客户区失效,以致重画

       Invalidate();

       CView::OnTimer(nIDEvent);

}

 

int CMy1_3View::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{

       if (CView::OnCreate(lpCreateStruct) == -1)

                     return -1;

       

                     // TODO: Add your specialized creation code here

                     SetTimer(1,750,NULL);

                     return 0;

}

d.       最后在OnDraw(CDC* pDC)加上画圆语句:

     void CMy1_3View::OnDraw(CDC* pDC)

{

       CMy1_3Doc* pDoc = GetDocument();

       ASSERT_VALID(pDoc);

       // TODO: add draw code for native data here

       //获取icolor值

    int i=icolor;     

    //在不同位置画四个不同颜色的圆

    CBrush brush1(RGB(20+(64*i)%255,140+(64*i)%255,210*(64+i)%255));

       CBrush*pOldBrush1=pDC->SelectObject(&brush1);

    pDC->Ellipse(300,200,350,250);

    pDC->SelectObject(pOldBrush1);

       

       CBrush brush2(RGB(84+(64*i)%255,204+(64*i)%255,24+(64*i)%255));

       CBrush*pOldBrush2=pDC->SelectObject(&brush2);

    pDC->Ellipse(350,200,400,250);

    pDC->SelectObject(pOldBrush2);

       

       CBrush brush3(RGB(148+(64*i)%255,14+(64*i)%255,88+(64*i)%255));

       CBrush*pOldBrush3=pDC->SelectObject(&brush3);

    pDC->Ellipse(300,250,350,300);

    pDC->SelectObject(pOldBrush3);

       

       CBrush brush4(RGB(212+(64*i)%255,78+(64*i)%255,152+(64*i)%255));

       CBrush*pOldBrush4=pDC->SelectObject(&brush4);

    pDC->Ellipse(350,250,400,300);

       pDC->SelectObject(pOldBrush4); 

}

e.       完成。

 

以上是三种最基本的动画。当然,具体情况不会这么简单,而往往的其中二或三种的复杂的结合。

 

而作为游戏,它的关键在:在动画的基础上加一些主观的操作。如先画一个球,然后用方向键或鼠标移动。如实例1_4:

 

a.       新建单文档工程1_4。

b.       添加半径和圆心  

        int ir;//半径

           CPoint center;//圆心

在CMy1_4View()中赋值如下:

 CMy1_4View::CMy1_4View()

{

       // TODO: add construction code here

                   center.x=400;

                     center.y=200;

                     ir=50;

}

c.       在OnDraw(CDC* pDC)函数中画圆

       void CMy1_4View::OnDraw(CDC* pDC)

{

                     CMy1_4Doc* pDoc = GetDocument();

                     ASSERT_VALID(pDoc);

                     // TODO: add draw code for native data here

//画圆

                  pDC->Ellipse(center.x-ir,center.y-ir,center.x+ir,center.y+ir);

}

   

d.       添加OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags),使它按照键盘方向键的操作而移动圆的位置。如下:

 

     void CMy1_4View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 

{

       // TODO: Add your message handler code here and/or call default

       //利用方向键左右上下移动20

       switch(nChar)

       {

       case VK_LEFT:

           center.x-=20;

              break;

       case VK_RIGHT:

           center.x+=20;

              break;            

       case VK_UP:

        center.y-=20;

              break;

       case VK_DOWN:

           center.y+=20;

              break;

       }

       //重画

       Invalidate();

       CView::OnKeyDown(nChar, nRepCnt, nFlags);

}   

e.       执行,看看效果,你就可以操纵了。

f.        那么,利用鼠标又是怎样操作呢?添加OnLButtonDown(UINT nFlags, CPoint point)如下:

 

    void CMy1_4View::OnLButtonDown(UINT nFlags, CPoint point) 

{

       // TODO: Add your message handler code here and/or call default

       //把圆移动鼠标指定位置

       //圆心赋值为point

       center=point;

    //重画

       Invalidate();

       CView::OnLButtonDown(nFlags, point);

}  

g.       再执行,你现在键盘鼠标都可以操作了。

 

真正的游戏,也就是以上简单的图形或位图的复杂化和简单操作的复杂化而已。

 

 

………………………………………………………………………………

………………………………………………………………………………………………………………………………

……………………………………………………………………………………………………………………………………………………

//

//

//学好入门篇之后,再来下载全部的经典游戏源码,保证你成为一个高级的游戏开发专家!!!!

分享到:
评论

相关推荐

    坦克大战游戏-VC开发

    通过这个项目,开发者不仅可以提升C++编程技能,还能深入理解游戏开发的基本原理和技术,包括图形渲染、物理模拟、事件处理等多个方面。对于学习游戏编程的初学者来说,这是一个很好的实践平台,能帮助他们将理论...

    vc游戏编程入门,用vc来开发游戏

    DirectX是微软提供的多媒体编程接口,包含了处理图形、音频和输入设备的组件,是VC游戏开发中的常见选择。 2. **游戏引擎架构**:理解游戏循环、状态管理、渲染管道以及对象管理是游戏开发的基础。你需要设计一个...

    很好很全的VC游戏编程

    1. **DirectX**: 微软的DirectX库是VC游戏开发中的核心工具,包含Direct3D(3D图形),DirectSound(音频),DirectInput(输入设备)等组件,用于实现游戏的视觉和听觉效果。 2. **游戏引擎架构**:理解游戏的主...

    vc一款飞机游戏,带源码

    标题中的“vc一款飞机游戏,带源码”指的是使用...总的来说,这是一个全面的VC++游戏开发学习资源,不仅可以帮助开发者提升编程技能,还能够提供实践经验,让学习者能够从理论走向实践,真正理解游戏开发的全过程。

    贪吃蛇游戏增强VC6.0开发

    《贪吃蛇游戏增强VC6.0开发》是一款经典的基于PC平台的游戏,它以其独特的设计和可自定义的游戏速度吸引了无数玩家。...对于想要深入学习C++和游戏开发的初学者来说,这是一个极具价值的学习资源。

    vc拼图游戏源码

    通过这个项目,游戏开发初学者可以系统地学习到从设计游戏逻辑、实现图形界面到调试优化的全过程,同时提升编程技巧和解决问题的能力。对于进一步深入游戏开发领域,如3D游戏、网络对战游戏等,这个基础将非常有益。

    vc几款3D游戏源码.rar

    深入学习这些源码,不仅可以帮助我们理解3D游戏开发的全过程,还能提升我们的编程能力和解决问题的能力。然而,源码学习需要耐心和扎实的基础,建议初学者先掌握C++基础知识和相关的图形学理论,再逐步深入源码分析...

    vc游戏源码打包.rarvc游戏源码打包.rar

    对于学习者来说,研究源码可以帮助理解游戏设计和实现的全过程。 3. 打包:在软件工程中,打包通常指的是将源码、资源文件、配置文件等组织成一个可执行文件或者安装包的过程。在这里,"打包"意味着所有游戏相关的...

    VC+glut开发opengl程序

    总的来说,“VC+glut开发opengl程序”涵盖了从环境搭建到实际编程的全过程,涉及到OpenGL图形库的使用和GLUT工具包的集成。通过学习这个主题,开发者可以具备使用C++和OpenGL创建2D和3D图形应用程序的基本能力。记得...

    Visual C++ 游戏开发与设计实例

    《VC游戏开发 (CD)》可能包含了该书的源代码示例,这些示例通常会涵盖各种游戏类型,如简单的2D游戏到复杂的3D游戏。开发者可以通过阅读和修改这些代码,深入理解游戏开发的各个层面。源代码是学习的最佳资源,因为...

    传奇的故事 学VC编游戏 源代码和运行程序

    通过动手实践,结合书中的指导,读者可以逐步掌握游戏开发的全过程。 总之,《传奇的故事:学VC编游戏》不仅是一部介绍游戏编程的著作,也是一份实用的学习资源,它涵盖了从基础知识到高级技术的多个层次,旨在帮助...

    VC俄罗斯方块游戏

    《VC俄罗斯方块游戏》是一款基于Visual C++编程环境开发的经典休闲游戏,旨在提供一个学习编程和游戏开发的实例。这个项目对初学者特别有益,因为它涵盖了从设计到实现的全过程,提供了完整的源代码,方便深入理解每...

    VC 游戏设计入门,共同学习下吧

    在进入游戏设计的世界之前,首先我们要理解什么是"VC"。...以上只是游戏设计入门的一些基本概念和方向,真正的游戏开发是一个涵盖广泛领域的复杂过程,需要不断学习和实践。祝你在VC游戏设计的道路上取得成功!

    纸牌游戏 (用VC编写的。包括需求分析,源代码,可执行文件)

    本项目是用Microsoft Visual C++(简称VC)开发的一款纸牌游戏,涵盖了从需求分析到源代码编写,再到最终可执行文件生成的全过程,对于学习数据结构和课程设计的学生来说,是一个极好的实践案例。 首先,我们要理解...

    这是我在VC6.0下设计的一个坦克大战的游戏,很经典。。。程序完整。。你可以先试玩一下。。希望对你有所帮助

    10. **游戏测试**:游戏开发完成后,进行全方位的测试,确保游戏的稳定性和可玩性。这包括功能测试、性能测试、兼容性测试等。 通过分析这个“坦克大战”项目,不仅可以学习到VC6.0的编程实践,还能深入理解游戏...

    用VC编写的一个五子棋:五子棋源代码

    总之,“用VC编写的一个五子棋”项目涵盖了从图形界面设计到游戏逻辑实现的全过程,对于学习C++编程和了解VC开发流程具有很高的价值。通过分析和理解这段源代码,开发者不仅可以提升编程技巧,还能加深对游戏开发...

    俄罗斯方块VC完整代码

    《俄罗斯方块VC完整代码》是一个面向初学者和专业开发者的学习资源,主要涵盖了使用Visual C++(简称VC)开发经典游戏“俄罗斯方块”的全过程。这个项目是为本科课程设计而准备的,旨在帮助学生理解和实践C++编程...

    基于VC6.0 的MFC俄罗斯方块游戏设计(含课程设计报告)

    在计算机科学领域,游戏开发是一种结合编程技术、艺术设计和用户体验的复杂实践。本文将深入探讨如何利用Microsoft Visual C++ 6.0(简称VC6.0)的MFC(Microsoft Foundation Classes)库来设计一款经典的俄罗斯方块...

    游戏斗地主vc源码 超好的学习资料

    - **理解游戏开发流程**:从设计到实现,再到测试和优化,全面了解游戏开发的全过程。 总的来说,这份斗地主VC源码不仅是一份教学材料,更是一个实践平台,它将帮助你将理论知识转化为实际技能,提升你的编程水平,...

Global site tag (gtag.js) - Google Analytics