在《学VC编游戏》中,作者融汇多年的程序设计经验和程序设计教学经验,按职业技术教育的知识体系最小够用原则,尝试一些新的程序设计知识、技术的组织方式,让大家学到一些现在电脑游戏(本书主要针对2D游戏)中常用的实现方法和相关知识。本书中提到的知识、方法都给出实例程序和可以运行的示范代码,所有的示范最后形成了一个可玩的类似《传奇》的单机版游戏。
《学VC编游戏》基本上涵盖了2D游戏的关键技术,例交口,动画形成、透明显示、角色八方位移动、动作变换、对象遮挡、大地图的生成和移动、搜索算法、碰撞检测、通道合成、背景音乐声音播放和游戏资源打包以及DirectX技术的使用最后还给出了游戏场景的编辑器的编制全过程。这些所有的知识技术,不但有原理讲解,也有完整的可编译运行的源程序和源程序中文注解,是2D游戏编程技术的大揭秘。
《学VC编游戏》全书贯穿了一条学习VisuaI C++、编制通用软件的普遍思路。从在VC中建立一个简单的程序框架开始,学习如何在VC中编译、连接、调试程序,从中介绍了程序的各种消息函数的建立和使用方法,介绍的C++的类的建立、使用、继承方法,还有文件的存取、目录的选择遍历等等,也是一本学习VC编程的入门书。
第1章开篇辟意[内容简介]
1-1前面的话
1-1-1网络游戏谱写的财富神话
1-1-2你也可以编游戏
1-2本书内容、技术知识提要
1-3本书重点
1-4为什么要选择VC++
第2章我来了[显示图形]
2-1任务
2-2用VC建立程序框架
2-2-1创建一个程序
2-2-2程序框架简介
2-2-3编译运行程序
2-3将游戏角色显示出来
2-3-1图形操作的基本方法
2-3-2调入图形文件
2-3-3显示图形
2-3-4程序的主要结构
2-3-5编译运行程序
2-4流程图
2-5小结
第3章让我动吧[产生动画]
3-1任务
3-2建立时钟消息
3-3让角色动起来
3-3-1变化的文件名
3-3-2getpic()调图片到相关位图
3-3-3可以动了
3-3-40nOK()启动时钟
3-4窗口、控件的基本操作
3-5“让我动吧Dlg.cpp”完整的程序和注释
3-5-1全局定义
3-5-2程序的初始入口
3-5-30nOK()确定键
3'-5-40nCancel()退出程序
3-5-5时钟函数
3-5-6调图片到相关位图
3-5-7调BMP图片
3-6有关程序运行时的目录
3-7流程图
3-8小结
第4章别给我框框[透明显示]
4-1任务
4-2透明显示位图
4-2-1透明显示位图的原理
4-2-2透明显示位图的功能函数
4-3屏幕刷新
4-4程序的编译模式
4-4-1DEBUG调试模式
4-4-2Release发布模式
4-4-3编译模式的设置
4-4-4设置目标程序(*.exe)的存贮目录
4-5流程图
4-6小结
第5章走四方[角色移动]
5-1任务
5-2角色的移动
5-2-1建立鼠标左键按键消息
5-2-2角色定义
5-2-3角色移动
5-3角色的动作变化
5-3-1动作转换函数
5-3-2人物图形规律分析
5-3-3动物图形偏移值
5-3-4在时钟消息中加入角色移动和动作转换
5-4小结
第6章穿越丛林[角色遮挡]
6-1任务
6-2类文件
6-2-1建立类文件
6-2-2类文件的使用
6-2-3初始化场景
6-2-4多对象处理
6-3对象遮挡
6-3-1冒泡法排序
6-3-2解决对象遮挡
6-4游戏类库
6-4-1game.cpp
6-4-2game.h
6-4-3常数定义.h
6-5小结
第7章广阔天地[地图移动]
7-1任务
7-2单块地图无缝延伸法
7-2-1大地图的拼接
7-2-2拼接地图的移动
7-3微缩地图
7-3-1生成微缩地图
7-3-2显示微缩地图
7-4移动地图
7-4-1建立消息截获函数
7-4-2移动地图功能函数
7-4-3快速定位地图
7-5对主程序的修改
7-5-10nTimer()时钟函数中的改动
7-5-20nLButtonDown()中的改动
7-5-30nCancel()退出确认
7-6类的继承和地图类
7-6-1类的继承-子类
7-6-2继承类(子类)的调用
7-6-3game_地图.cpp
7-6-4game_地图.h
7-7小结
第8章脚踏实地[路径搜索]
8-1任务
8-2设置障碍
8-2-1场景中的障碍点
8-2-2障碍点的数字化模型
8-2-3调入障碍表的函数
8-3Ao搜索算法
8-3-1findpath()A,搜索
8-3-2加入At算法寻路
8-3-3FindPath(q,x,y)Ao算法寻路
8-3-4搜索算法.cpp
8-3-5搜索算法.h
8-4动物在场景中随机运动
8-4-1随机数发生器rand()
8-4-2randxy()随机产生动物的移动目标点
8-5选择地图
-8-60nTimer()时钟函数中的时钟段
8-7图形光标
8-7-1新建光标
8-7-2画光标
8-7-3定义光标变量
8-7-4调入图形光标
8-7-5图形光标的使用
8-8小结
第9章狩猎谋生[角色打斗]
9-1任务
9-2碰撞检测
9-2-1碰撞检测的原理
9-2-2碰撞检测程序注释
9-3半透明显示的技术
9-3-1半透明函数AlphaBlend()
9-3-2半透明的实例说明
9-3-3Alphasetobj()对象显示
9-3-4Alphasetobj()注释
9-4MIDI背景音乐播放方法
9-5又一种选择调入地图的方法
9-5-1建立对话框资源
9-5-2添加资源类文件
9-5-3模态对话框的调用方法
9-5-4通过模态对话框调入地图
9-5-5setmap类的程序
9-6小结
第10章快一点[资源打包]
10-1任务
10-2图形资源的打包
10-2-1资源打包程序简介
10-2-2选择目录
10-2-3资源打包的程序主结构
10-2-4主结构程序注释
10-2-5LoadBmp压缩打包函数
10-2-6压缩打包函数注释
10-3图形压缩包的使用
10-3-1调压缩资源包
10-3-2压缩图形的相关变量定义
10-3-3调压缩图片getpic0()
10-4小结
第11章再快一点[DirectX技术]
11-1任务
11-2认识DirectX
11-3建立DirectX环境
11-3-11nitDDraw(Void)初始化DirectDraw环境
11-3-21nitDDraw(void)注释
11-3-3定义指定高宽的缓存页面Surface()函数
11-3-4gema.h中与DirectX有关的类变量
11-3-5还需要什么
11-4页面内容的拷贝
11-4-1将GDI设备图形装入DX缓存页面
11-4-2DX缓存页面间的拷贝
11-5在我们的游戏中使用DirectX
11-5-1将对象图形调入对象缓存页面DXSgonh
11-5-2Alphasetobj(mtq,inta)对象显示的修改
11-5-3Alpha(intx,inty)DX半透明显示函数
11-5-4BklToPr()主缓存页面到主页面函数
11-5-5地图块移动拼接的DX方法
11-5-6调地面块到背景地图页面DXSBack0
11-6小结
第12章真的打呀[角色的生命]
12-1任务
12-2加入生命值后相关函数的改变
12-2-1对象显示函数中的修改
12-2-2有关对象倒地和残体化解的其他函数的修改
12-3调地图函数中加生命值和添加道具
12-3-1生命值攻击力定义
12-3-2调入地图函数的修改
12-3-3新加的添加物品函数
12-4打斗时生命值的改变
12-5调入、读取物品资源压缩包
12-6在主界面显示人的生命值
12-6-1时钟函数的修改
12-6-2新加主界面上显示生命值函数
12-7小结
第13章指点江山[地图编辑器]
13-1任务
13-2新建地图
13-2-1新建地图
13-2-2设置新地图的相关数据
13-2-3选择地面风格的方法
13-3编辑地图
13-3-1showline()显示编辑
13-3-2显示编辑方格注释
13-3-3编辑障碍点
13-3-4选择对象和编辑对象
13-4添加对象
13-4-1显示选择对象
13-4-21nsert()添加对象
13-4-3添加景物、动物转换
13-4-4对象选择滚动条
13-5保存地图
13-5-1存文件通用对话框
13-5-2savemap()保存地图函数
13-6小结
附录
附录AVC++程序调试方法
附A1使用编译、连接的出错信息
附A2使用消息MessageBox()函数进行运行时调试
附A3设置断点进行单步调试
附录B本书使用到的VC知识汇集
附B1创建程序和消息
附B2编译运行
附B3变量类型
附B4函数定义和类
附B5MFC和API函数
附B6常用的功能函数源程序
附B7VC窗口、控件的基本操作命令
我在职业中学教过几年的程序设计课程,又在一家曾经有名的软件公司当过技术总监。一直想写一本有关程序设计的书,为大量潜在的程序员写一本程序设计入门的书。想了很久,也动笔写过十多万字,最后都放弃了。因为现在程序设计类的书籍太多了,学程序虽然是有趣的,但学习确是一个艰苦的过程,特别是入门。
从去年网游热起,在网上论坛中游戏成为谈论热点,有一些游戏的玩家“玩物生志”,在玩游戏的激情中萌发出创造的欲望,渴望步入游戏编程的殿堂。从编游戏入手,以浓厚的兴趣激发学习者的热情,是教程序设计的一个不错方法。
感觉仿佛找到了,一个以完整游戏为主线,各种编程技术为骨架,多年职业教育经验为血肉的《学VC编游戏》的思路在心中形成。此前我还没编写过游戏,我就像初学者一样,从头学起,每一步都记好笔记、保留好代码。游戏DEMO完成后,我像当年为学生备课一样,分重点、理难点,反复斟酌各章各节的编写。我想,这本书不是向人们表明我的知识深、技术高,而是要把人们认为高深的科学知识和技术,用浅显的方式表现出来,让更多的人能接受,成为程序设计初学者的入门阶梯。
《学VC编游戏》涉及的是2D(平面)游戏技术,其内容基本涵盖了2D游戏的关键技术,例如,动画形成、透明显示、角色八方位移动、动作变换、对象遮挡、大地图的生成和移动、搜索算法、碰撞检测、通道合成、背景音乐声音播放和游戏资源打包以及DirectX技术的使用最后还给出了游戏场景编辑器的编制全过程。这些所有的知识技术,不但有原理讲解,也有完整的可编译运行的源程序和源程序中文注解(所有程序;源程序、图形资源都在随书附送的光盘上),可以说是2D游戏编程技术的大揭秘。
当然,这本书是为初学者写的,有些技术在不影响功能的情况下进行了简单的处理,例如用于角色遮挡的对象排序就用了最简单的冒泡法排序算法,尽管比它优秀的算法还很多。还有有关大地图的技术也是用了最好理解的“单块地图无缝延伸法”。特别是在使用DirectX技术上,我想了好久,最后还是选择在本书的后四分之一处才引入DirectX的Draw平面图形处理技术,在此前各章节中一直用的是Windows的标准GDI技术(现在计算机的速度也太快了,GDI技术编写的游戏还真的可以跑起来哩);到第十章引入再DirectX技术时,好像一切都很自然了:建立好DirectX的环境后,替换几个图形显示函数,一个基于DirectX技术的2D游戏就跑起来了,游戏的运行速度、流畅度还真的有了明显提升。经过这些由难到简的处理,书的可读性好多了,因为我希望本书是游戏编程初学者喜欢的书。
游戏编程在整个软件行业中只是小小的一支,编程技术在各行业的发展空间是无穷尽的。我希望更多的朋友把学编游戏作为一个兴趣的起点,以此进入软件编程更广阔的领域,所以本书也贯穿了一条学习Visum C++、编制通用软件的普遍思路。从在VC中建立一个简单的程序框架开始,学习如何在vc中编译、连接、调试程序,从中介绍了程序的各种消息函数的建立和使用方法,介绍的C++的类的建立、使用、继承方法,还有文件的存取、目录的选择遍历等等。可以说这也是一本“学Vt'’的入门书,所以我就用“学VC编游戏”作为书名了。当你游戏都会编了,一定更有信心去学习和尝试其他软件的编写吧。
现在《学VC编游戏》后继书《学OpenGL编3D游戏》的编写已经开始,编3D游戏是一个更吸引人的话题,技术难度更高。我完全有信心将这种高端的知识技术,用浅显的方法表述出来,让更多的人能接受并进入到3D编程领域。
这个选题是系列化的,后面还有学D3D编3D游戏篇,有局域网游戏和广域网游戏篇。尽管这个“游戏编程系列丛书”涉及的技术较深,但我们能“用浅显的方法,让更多的人接受”新的应用技术,为更多有志进入软件行业的人搭建阶梯,这也是一个可以为之奋斗的事业吧。
这里还是要说明的是,这本书从找到感觉开始,通过学编游戏到编出全书的游戏DEMO,再到书的完稿,我一个人花了半年时间。中间因其他原因耽搁了两个月,也算时间仓促吧,而且又在探索一种新的程序设计教学方法。所以书中一定有不少错误,也可能有知识上的错误。请读者给予指正,谨在此表示诚挚谢意。读者可以通过我在GameRes游戏开发资源网论坛上建立的“学vc编游戏”栏目与我交流。也可以通过邮件与我交流。
GameRes游戏开发资源网 http://WWW.gameres.com
GameRes游戏开发资源网论坛http://bbs.gameres.com
E mail:cqtml@163.COm