vc小游戏的第一篇

来源:互联网 发布:思科网络技术学院教程 编辑:程序博客网 时间:2024/05/17 06:05

昨天把我写博客的计划和顺序跟大家讲了讲,希望大家多给意见和看法,不管好坏一律接受。好了废话少说上“大餐”。
我这第一篇博客也是《VC小游戏开发实例教程》的第一章--游戏基础,我刚开始看这本已经很老的书,也许这书上的技术已经过时了不用了,但是不可磨灭这现在看来很out的技术给游戏带来的巨大改变。好了不说了,如果有兴趣的话就看看,没有兴趣的话就当小说看看就行了。


总所周知游戏分为内核和界面,内核是最重要的,是一个游戏的灵魂,就像war3里面的英雄们,如果没有这些英雄来指导那些兵来作战,迟早是会被gg的。但是如果没有界面的话,内核就像war3里面的英雄没有了他们的兵,即使他们的想法多好,等级多高也不会等到最终的胜利。那么这一篇就是讲讲界面的怎样来绘制。


大家都知道基本上一个窗口有一个框架(Frame),一个视图(View),一些资源(Resources)就可以构成一个窗口,图形的绘制工作都会在view上面来完成的,像图片的移动和一些位图的展示都会在view上面绘制,微软又给咱们提供了一些图形的绘制函数。所以像一些简单的图形比如说圆矩形三角形都有一些函数来直接调用,所以我们就用这些函数来体验一下view的绘制。开始上代码了(也许这一篇的内容稍微少点但是我以后会补上的)。

 

 

我参考书上还有一些大牛们的编写程序的步骤基本上都是三步:一、先要弄清干什么。二、把框架搭建起来。三、填写代码。本人认为这三步都是挺重要的,不过觉得一二两步是最关键的两步,如果没有这两步的话一切皆是浮云(个人意见希望大家给出建议和看法)。

 

游戏就是一些图形的变化,图形会随着鼠标的点击和键盘的按下来产生不同的变化。咱们就来看看形变、位变和色变。

 

形变:

咱们就来看看这个形变:咱们按照上面的三步走来分析这个问题:1、想要干什么?咱们就是要展示一个形变的视图,让一个矩形从矩形变为圆形在变为三角形,以后一直依次变化。2、怎样展示,用什么格式来表达这种位图?因为只是演示的过程咱们就用最简单的vc的单文档程序来显示视图。3、填写什么代码?windows的MFC中有大量的用于绘图的东西比如说:Ellipse()画圆,Rectangle()矩形等函数,咱们就用这样的函数来实现形变。建立一个当文档程序因为咱们是在view上面画图,所以在view这个类上面添加一个变量 int ituxing并赋值为0用来使图形改变。然后在OnDraw函数中填写一下代码:

void CMy1_1View::OnDraw(CDC* pDC)

{

    CMy1_1Doc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);//清除当前图形

    CBrush mybrush1;//设置笔刷

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


    CRect myrect1(0,0,1024,768);//设置区域

    pDC->FillRect(myrect1,&mybrush1);

 

    if(ituxing==1)  //判断当前图形ituxing

     //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);

           }

}

 

以上的代码是画出来图形然后我们就要做的是使图形变起来,每隔一段时间使变量ituxing增加1就可以达到形变的效果。接下来就是时间触发器的编写。首先咱们要在一个位置上面初始化这个时间触发器,每隔一段时间让ituxing增加一,在view类中添加WM_CRETATE和WM_TIMER两个消息函数分别添加如下代码:

 

int CMy1_1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{

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

return -1;

SetTimer(1, 750, NULL);//当创建的时候发送间隔的时候发送消息

return 0;

}

 

 

 

void CMy1_1View::OnTimer(UINT nIDEvent) 

{

CDC * pDC = GetDC();

OnDraw(pDC);//重新得到绘制区域

ituxing = (ituxing+1)%3;//当收到消息的同时取得OnDraw的函数然后把ituxing这个变量加一

CView::OnTimer(nIDEvent);

}

然后编译运行就可以看到形变的效果了。

说完形变以后我们来谈谈位变,位变见名知意就是位置的改变,由上面的例子可以想象咱们这个程序该怎样编写,那么大家都可能想到还是那样时间触发重新绘制图像,对就是那个样子,代码如下:

 

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

       pDC->Ellipse(30*ituxing,30*ituxing,30*ituxing+50,30*ituxing+50); //用当前图形位置ituxing 画圆  

}

然后编译连接,就能看出效果来(色变也是同样的步骤,在此不再啰嗦)。

我会在后面几篇博客中把第一章以后的内容都会写出来,好的我总结一下我上面讲到的我认为是重点的东西:

一、理解视图这个含义。

二、理解图形变化的本质。

三、就是编写程序的一般思路。

四、windows机制和函数的掌握。

在此希望众大牛们给出意见和看法不管好坏都会接受的谢谢了!!!!