小明陪你编游戏系列(一)win32游戏开发快速入门

来源:互联网 发布:彩票开奖数据 编辑:程序博客网 时间:2024/06/05 15:06


也许一个人要走很长的路,经历过生命中无数突如其来的繁华和苍凉才会变的成熟。

小明陪你编游戏系列(一)win32游戏开发快速入门


小明对游戏的兴趣看看小明大学时候的挂科率便可见一斑,勉强拿到学位的小明依然对游戏热衷不改。


不得不说,小明是个很懒而且很害怕挫折的人,当然这都是程序猿们的死门,希望大家这点引以为戒,废话不多说啦,开始正题!~


游戏的结构实际上就是一个有限状态机,自动执行一部分代码,当接收到IO消息的时候,进入到另外一个状态。为了更快的进入游戏的主体的架构学习,所以小明选择暂时躲开细节实现的烦恼。

为此,小明列出了这样一款清单。

1.  游戏设计。 没什么好说的,喜欢做什么就做什么吧。

2.  游戏主体结构。就像人的骨头,没骨头,站都站不起来,少不了。

3.  图像显示。 属于细节内容,但不可或缺,暂时用简单的技术手段代替。

4.  多媒体播放。 细节内容,后续章节实现

5.  网络模块。 后续章节实现


根据这样一款清单来看,小明入门的任务很简单,第一,实现图形显示,第二实现主体架构。


(一)游戏设计

先拿一个简单的上手吧,小明设计了这么个类似贪吃蛇的游戏。

(1)剧情,五个人探险(就拿LOL的头像了,嘿嘿,谁让它好找呢),寻找自己的分身。

(2)在WIDTH(=6)*HEIGHT(=8)的长方形中,每搁S(=1)秒后,第一个向前方前进一格,后面四个移动到前面一格的位置上。

(3)撞墙则游戏失败。

(4)发现新队友时,如果新队友已存在,该角色属性值+1,如果不存在,则淘汰属性值最低的队友。

(5)当队伍总属性值超过LEVEL_VALUE的时候晋级,重新开始。nLevelValue = nLevel * 10.等级level初始值为1。

(6)其他内容待定。


(二)实现图像显示

图像显示有很多手段,直接使用Bitblt就可以,但是太繁琐不说,还有很多细节无法获得,好在gdiplus很给力,很容易上手,而且即使以后有了更高级更适合开发游戏的技术手段后,gdiplus依然很适合作为游戏的GUI。

1. 配置. ok,现在看看gdi+得有多简单吧,如果你使用的是VS2005及其以上版本,你不需要配置任何东东,如果不是,请自行到网上查找配置,很简单,不多说。

2. 包含头文件<gdiplus.h>,如果编译失败,就请包含头文件<objbase.h>,另外,需要using namespace Gdiplus。(小明额外啰嗦一句,包含头文件的时候,不区分大小写),另外,需要#pragma(lib, "gdiplus.lib") 

3. 初始化gdiplus,这个代码看起来好像挺复杂, 但是喜欢copy的小明感到毫无压力,这就给各位copy一份。

GdiplusStartupInput gdiplusInput;GdiplusStartup(&m_gdiplusToken,&gdiplusInput,NULL);

只要记住保存住m_gdiplusToken就好,原因请看第4条

4. 关闭gdiplus,代码如下:

GdiplusShutdown(m_gdiplusToken);
5. 初始化Graphics对象

HDC hdc;// hWnd is the handle of the current window.hdc = GetDC(m_hwnd);Graphics graphics(hdc);
6.初始化图像对象,其中BG_PICTURE_DIR是图像路径,ImageNames是图像名

wstring str = BG_PICTURE_DIR;str += ImageNames[0];Image *pImage = new Image(str.c_str());

7. 可以绘制了。

graphics.DrawImage(pImage, 0, 0, WIN_WIDTH, WIN_HEIGHT);


(三) 游戏架构

这部分相对简单多了,直接建立win32 应用程序,在Init处初始化,while循环内draw,循环外关闭gdiplus即可。


好了,今天暂时先到这里,下一篇里会贴出CGame类状态机的实现以及源码下载地址。大家可以先写写看,看看效果会不会比小明的好~


小明的开发Q群欢迎所有游戏开发爱好者的加入,开发Q群:69788620


幸福就像香水,洒给别人也一定会感染自己。




0 0