通过前两节的学习,我相信你已经对计算机和游戏编程有了比较基础的认识了。那么,接下来是不是直接学习代码呢?如果是普通的编程,直接学习代码是没问题的,可是,我们现在学习的是游戏编程,基础一定要打好了。
作为一个什么都不懂的菜鸟,最先想到的问题是,我有了代码,那这个代码是如何变成游戏软件的呢?在上一节我们已经说过,高级语言写出的代码是要通过翻译程序才能变成机器语言的,而机器语言就是我们平常看到的应用程序。翻译程序是公开的,只要你有代码,直接让翻译程序翻译一下就可以了。一般而言,这个翻译程序被我们称为编译程序。
编译程序是公开的工具,所以,我们缺少的只是游戏代码而已。游戏代码是一个一个的字母、符号加数字,就是说,我们用记事本这样的文本编辑工具就可以写游戏的源代码了。
话是这么说,但是用记事本写游戏源代码,问题是非常多的。我们只是普普通通的人,并不是神,所以,我们是非常容易犯错误的。比方说,写程序的时候不小心少了一个字母,又或者把程序逻辑写错了。这些错误我们是发现不了的,只有当你把源代码写完之后,编译程序报错了我们才知道。但是代码这么多,要找一个错误谈何容易?正是因为如此,在高级语言诞生不久,编译器就问世了。
一、什么是编译器?
你完全可以把编译器看成是一个功能比较强大的记事本,而我们要写的游戏源代码,就是在这个编译器里面一个字母一个字母敲出来的。编译器为我们考虑了很多的事情,比如上面的小错误,在你犯错误的同时,编译器就会通过提醒的方式告诉你。不仅仅是避免犯错,编译器还能帮忙管理庞大的游戏代码。除非是像俄罗斯方块这样简单的游戏,否则的话,一般的游戏源代码都是非常庞大的,如果只是用记事本来完成工作的话,程序员脑袋都要大了。
在没有编译器之前,程序员写完源代码之后,要手动使用编译程序来编译自己的源代码,这实在是太麻烦了,而编译器直接把编译程序集合了进来,只要程序员一个按钮,自动就编译了,是不是很方便?我们小小总结一下,编译器就是一个应用软件而已,它能帮助程序员更好地完成代码。那么,我们要用什么编译器呢?
二、推荐使用VS
这款编译器的全称是VisualStudio,是微软公司的编译器。我记得我上大学的时候(我不是计算机专业的),C语言的课程还用的是DOS版本的编译器,而计算机学院的同学,用的是VC6.0,现在过去这么多年了,不知道大学的机房有没有更新软件呢?VC6.0的功能已经很强大了,不过,现在大多数的电脑都是win10系统,VC6.0可能有点不兼容。而现在VS的版本已经很高了,而且新出的VS编译器都是免费的,我们为什么不用呢?
原因非常简单,VS往上的版本,没有离线的帮助文档,只有在线的帮助文档。
一个优秀的大型游戏程序,很难从零开始写,我们需要非常多前人的研究成果,而编译器的帮助文档中,全部都是前人的研究成果。相当于,程序员前辈把他们的成果弄成了一个一个的芯片,这些芯片就放在帮助文档里,我们想用的话,直接去帮助文档里找就行了。程序员写程序,不可能时时刻刻都有网络,这个时候,离线文档的好处就体现出来了。
除此之外还有一个原因,不排除有的零基础读者用的还是XP系统,而VS往上的版本是无法安装在XP系统上的。所以,为了最大的包容性,我选择了VS作为俄罗斯方块这个游戏源代码的编译器。
三、写的是游戏程序,需要DirectX的支持
只要是玩过电脑版本的大型单机游戏,都知道DirectX。比如电脑端的吃鸡,就需要DirectX这个插件的支持,只不过我们用Steam安装游戏的时候,这些必备的插件早就安装好了。
什么是DirectX呢?就是微软公司专门给游戏程序员提供的游戏编程接口,是一个非常成熟可靠的接口。
我再讲一讲DirectX的历史,这样你就能理解地更加深刻了。
我们知道,最早的民用计算机系统是DOS系统,进入系统后一片黑,只有一个光标闪来闪去,用户输入一定的命令后,就可以使用计算机的功能了。DOS系统的好处就是独占,独占是什么就不刨根问底了,因为好几千字都讲不明白,我们只需要知道,DOS系统的独占,让游戏编程变得顺手。
前面我们已经说过,游戏就是把图像啊、视频啊、文字啊、声音啊等等,通过一定的方式显示在电脑屏幕上(当然,声音是从喇叭放出来的),也就是说,游戏程序需要和显示器有非常直接地接触,不仅仅是显示器,连键盘和喇叭也需要直接和游戏程序接触。为什么呢?只有直接地接触,才能直接把图像显示在屏幕上、才能直接把声音放出来、才能直接从键盘上读取玩家的控制。DOS系统的独占,能够让游戏程序非常直接地接触这些硬件,所以,DOS系统天生就是为了游戏编程而生的。你是否知道,第一代3D游戏DOOM就是一个DOS游戏,开辟了3D游戏的里程碑。
虽然程序员很喜欢DOS系统,可一般的用户不喜欢啊,使用还需要去记忆命令,多麻烦?所以,微软公司开发了有划时代意义的Windows系统。可是,Windows系统屏蔽了所有的硬件,目的是防止用户误操作损坏硬件,可这么一弄,游戏编程的程序员就无法直接接触硬件,以前写游戏代码的方便感一下子就没有了。而且,Windows自带的功能完全无法满足游戏编程的需要,因为这些自带功能运行速度太慢了,非要用这些东西编程的话,最后游戏就会卡得不行。
所以,微软公司被迫开发了一套游戏开发工具包,目的是让程序员能像在DOS系统下一样爽快地编程,这一套工具包就是前面所讲的DirectX。DirectX帮助程序员完成了接触硬件的工作,并且把接口提供了出来。什么意思呢?就是说,DirectX相当于是一个一个的芯片,有的芯片负责和显卡交流,有的芯片负责和声卡交流,有的芯片负责和键盘交流。而这些芯片都有一个接头,程序员想要用什么功能,把自己的程序和这个接头接上就可以了。
DirectX非常强大,优化地非常好,正是因为DirectX的存在,很多大型游戏就可以在普通的电脑上流畅地运行了。
四、为什么选择C++
有了编译器之后,接下来就是选择一个编程语言了。高级语言非常多,而且每一个高级语言都能写游戏。按理说,这次面对的都是零基础的读者,我应该选一个入门的计算机语言,比如Basic语言。后来我一想,还是选C++比较好。C++是一个比较快的高级语言,C++写出的程序,运行速度比其他很多高级语言写出的程序快很多,而游戏是非常需要效率的,还是用C++比较好。
而且,只要你认真学习本课程,C++就是小事情,完全不在话下,因为本课程的难点,在于游戏编程的思路。所以,当你下载安装完VS之后,可以把主语言设置为VisualC++。
五、在游戏编程之前,VS需要调整哪些内容?
第一个要设置的,就是把DirectX和VS连接起来。DirectXSDK安装之后,在安装目录下会有include目录和lib目录,我们需要把这两个目录添加到VS里面。具体方法如下:
1.打开VS;
2.在“工具”菜单下找到“选项”;
3.打开“选项”后,找到“项目和解决方案”下的“VC++目录”;
4.在右侧下拉菜单选择“包含文件”,并把DirectXSDK安装后的include目录添加进来。需要特别注意的是,添加进来的这条目录一定要在最上面,如果不在最上面,请把它调整到最上面。如果这个目录不在最上面,最后程序编译的时候会出错。
5.同理,找到库文件菜单,把lib目录添加进来。如果你下载的DirectXSDK版本比较新,会有x86和x64两个子目录。我们暂时不编写64位程序,选择x86就可以了。和第4点一样,这个新加进来的目录要放在最上面。
第二个要设置的,就是VS帮助文档。如果你没有安装,请把它安装完整。
第三个要设置的,就是视图菜单下面的几个视图。比较重要的是类视图和资源视图,这两个是默认不显示的,建议将他们显示出来。
最后要设置的,就是把浮动的窗口弄固定了。这一点可以不设置,毕竟只是个人的使用习惯而已。
好了,一切都准备就绪了,马上就可以开启我们的游戏编程之旅了。
课后作业:请在自己的电脑上安装VS和DirectXSDK,并在VS里面将DirectX添加进去。