游戏艺术工厂

首页 » 游戏制作交流 » 游戏程序 » <开始做游戏>系列--拥有你自己的游戏
admin - 2006-8-9 12:30:00
声明:匆忙之中,错误应该很多,请提出来

上次我们讨论了游戏领域里面的几种职业,以后我会说明他们是如何一起工作完成一个游戏的。今天呢,就要

实现大家的梦想,拥有一个自己的游戏;甭管自己多菜,先做出来个游戏先;不过还是要对一些常见的游戏有

所了解:

RPG: Role Play Game        角色扮演类游戏       天之痕
FPS: First Person Shoot   第一人称射击游戏     Counterstrike
Puzzle Games               棋牌类游戏            五子棋
Sports Game                 体育运动类          极品飞车、Fifa
Action Game                   动作类             格斗
还有很多,例如冒险类、休闲类、网游类;分类标准不同,不能一一说明,只是想对游戏一无所知的人临时充

充电。选择一个尽量简单的游戏,我的建议是越简单越好,RPG游戏不要去想,我们现在做个自己的第一个游戏

只是想对游戏有所了解,不是拿去卖;也不要高深的人工智能(这样的话,当然也要把棋牌类游戏排除),先把

时间花费在程序结构上面去,算法当然重要,不是我们现在所要考虑的;而我常常很多人建议新手去编五子棋

,我想这绝对是个误导。

那你可能在想,我们现在能做什么呢?既然你想跟着我来做游戏,那么我想一些知识你是需要掌握的,关于c++

、VC和Direct X的知识:
1、能够区分MFC 和win32 app,能建立工程、能在工程中添加文件、能设置头文件和库文件的路径、能向工程中 

  添加库,基本的调试程序的能力;
2、有类、对象、接口、指针的概念
3、有独立下载Direct X SDK(3.0--9.0)和CDX 库(我这里有cdx 3.1)的能力;cdx开发库是开放源代码的,所以以后如果有兴趣,可以研究一下他们是怎么封装的;
   cdx可以在http://www.cdxlib.com/找到

4、会安装并在VC++ 6.0中设置Direct X SDK(3.0--9.0)和CDX库.

不过要提醒一下,安装direct sdk前,先要把VC++ 6.0关掉。Direct SDK会询问你是不是要关联到VC++ 6.0,选择是,就不需要手动添加;你会发现 工具-->选择-->目录中 路径里面,Direct X SDK的头文件和库文件已经被添加进去了;
安装CDX的时候就没有这么智能,你需要自己手动添加,不会的话,回复我的时候说一声;
好了,假设你一切搞定;
现在打开cdx安装目录下的"games\blaster\Blaster.dsp",将会打开工程,这就是我向大家推荐的第一个游戏;确切点说,是我们要修改这个游戏,不过前提是,我们要能够编译运行通过,而且能够了解这个游戏的来龙去脉。对了,cdx默认安装在 c:\cdx文件夹

迈出第一步通常是很难的,不过迈出第一步后就很轻松了;你可能会发现你还是不能运行,常见的错误是找不到"cdxd.lib",没关系,我们只要稍微修改就可以了,在 工程-->设置-->Link中 模块\库里,看有没有cdxd.lib?如果有的话(呵呵,当然是有的),改成cdx.lib
 
这样就万事大吉了,再编译运行,应该没错了把?还有??!!那提出来,看我能不能帮你解决;遇到困难不要急,到ogdev论坛里来问一下,基本上你遇到的问题我也会遇到过,我会给你建议;我每天都来上网,你的问题会很快解决,这个不要担心。

那么我们现在就要看代码了:
游戏结构代码:

/////////////////////////////////////////////////////////////////////////////////////////////
// GAME.CPP          游戏的框架,不同的是UpdateGame()实现不同
/////////////////////////////////////////////////////////////////////////////////////////////


void FiniApp()
{
//代码略  
        //游戏结束的清理工作
}

/////////////////////////////////////////////////////////////////////////////////////////////
// WinProc         窗口消息处理函数,一般不处理游戏的事件
/////////////////////////////////////////////////////////////////////////////////////////////
long PASCAL WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)                      //消息处理函数做了很少的工作,主要工作是在没消息的                                              //时候的空闲处理函数里做的
{
case WM_ACTIVATEAPP:
       bActive = wParam;
break;

case WM_KEYDOWN:
switch(wParam)
{        //ESC键使游戏结束
case VK_ESCAPE:              
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;

case WM_DESTROY:
FiniApp();
PostQuitMessage(0);
break;
}

return DefWindowProc(hWnd, message, wParam, lParam);
}

/////////////////////////////////////////////////////////////////////////////////////////////
// InitApp         产生窗口,初始化游戏
/////////////////////////////////////////////////////////////////////////////////////////////
BOOL InitApp(HINSTANCE hInst, int nCmdShow)
{
//注册窗口类,创建窗口,窗口句柄hWnd

if(!hWnd) return FALSE;

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

InitGame();
Input.Create(hInst, hWnd);

return TRUE;
}

/////////////////////////////////////////////////////////////////////////////////////////////
// WinMain         程序的入口位置
/////////////////////////////////////////////////////////////////////////////////////////////
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
        //这里调用初始化窗口和游戏
if(!InitApp(hInst, nCmdShow)) return FALSE;

while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;
TranslateMessage(&msg); 
DispatchMessage(&msg);
}
else if(bActive)                //bActive标志游戏是否在运行
{
UpdateGame();             //这个函数起了很大的作用,更新输入和游戏
}
else WaitMessage();
}
}

上面也是基本的win32 application的基础知识,如果看不懂程序怎么运行的,提出来好了-----

今天的工作就上确保游戏能够运行,下次我再说明游戏是怎样工作的。blaster.JPG<br />width: 320 px<br />size: -1 bytes<br />double click to view all
game001 - 2006-8-23 18:43:00
[em03]
game001 - 2006-8-23 18:48:00
[em06]
game001 - 2006-8-23 18:49:00
dddddddddddddddddddd[em02]
game001 - 2006-8-23 18:50:00
ddddddddddddd[em01]
yousigai - 2006-9-1 15:19:00

ysufbg123 - 2006-9-3 19:34:00

学习中。。。。。。。。。。。。。

 

[em07]
雅薇 - 2006-9-23 11:55:00
不太明白
billwillman - 2006-10-1 22:11:00

先看WINDOWS 程序设计 这本书,然后看DIRECTX入门的书

kenny119 - 2006-10-19 0:13:00

太好了~~~斑竹可以介绍多点书来吗?

斌斌仔仔 - 2006-10-20 16:44:00
C#算了
kuilove - 2006-11-14 16:49:00
学习交流一下
tu3206 - 2006-12-2 13:19:00
我现在正在做D3D的小游戏,并且研究卡通渲染.现在DDraw好像都不怎么用了...[em15]
闪电12 - 2006-12-9 17:54:00

不错。

lovemaxmax - 2007-5-5 6:28:00
[em04]呵呵~~
312527404 - 2007-5-18 9:57:00

楼主有兴趣作类似《恐龙世纪》的横版过关游戏吗?是原创的psp自制游戏,不过现在没有引擎。

tjinhu - 2007-6-3 22:17:00

我的装了SDK后没有关联VC啊

ckworld - 2007-6-19 10:44:00
牛,,,学习了很多东西。。
bbmb - 2007-7-30 8:29:00
看不懂
OmniK - 2008-12-17 16:46:00
不错不错``很好``
yucheng1102 - 2008-12-30 17:49:00
差不多就是这点 呵呵
不过只有这几行是不能运行的。。。。。。。
1
查看完整版本: <开始做游戏>系列--拥有你自己的游戏