游戏编程入门(by David Astle)
经常有人问我,没有编程经验的人该如何开始开发游戏。在此之前,我总是一个个的尽力回答。然而,后来提相同问题的人数增长到难以处理的地步。我决定,是时候把我所有的建议写成文章,作为一个大概。
这篇文章是针对那些想要开发自己游戏,但几乎没有编程经验的人。事实上,我假设读者没有任何编程经验。我主要讨论游戏开发的程序和设计方面,而不是艺术性。我也不准备讲述如何进入游戏行业(这方面已经有足够的资料),而只是让你逐步的开始开发自己的游戏。最后,我所指出的这条道路也并不能作为唯一的,或是最好的路径来学习开发游戏,但至少对我和一些人很有用。
选择一门语言
你要做的第一件事就是选择一门开发语言。你有很多选择,包括Basic,Pascal,C,C++,Java,等等。也经常会有人争论对于初学者那一门语言是最好的。对于这一系列流行语言的讨论,你可以参看John Hattan 的著作,What Language Do I Use?(我用什么语言?)
我的建议是以C和C++开始。有些人会说这些语言对初学者来说太高级了,但因为我自己就是学C++,我并不同意这一说法。而且,C/C++是当今使用最广泛的语言(译者认为应该是汉语。。。),所以你可
以到大量学习资料和帮助。你先学C或C++都无所谓,因为只要学了一个,再学另外一个就很容易。但是,如果你先学C++,请保证在学习面向对象编程之前能理解和使用过程编程(等编程熟练再去学习类)。(译者:C是过程性语言,C++是面向对象语言)
如果你开始学习C/C++,发现太难,那再学一个简单一点的也没关系,比如Basic或Pascal。但是我真的认为,如果你坚持努力,而且有好的资料,学C/C++应该没有太大问题。
你的下一个问题可能会是:“我该怎么学C/C++?”我很高兴你这样问。最好的办法是上课。有老师可以回答你的问题,帮助你产生很大进步,编程练习作业也可以保证你能用到所学的东西。
如果你不觉得上课是个好主意,那最好的办法就是买一些好书。不要花太多时间去选一本什么“超级宝典”或“万用全书”,因为你最终可能会买几本。我建议你去一家书店,然后拿几本比较入眼的C或C++书看,直到到一本或几本你能看懂,并且可以拿来学习的。同时,你可能会想要一些更深入的,或者一些材料,但是你一旦对于这门语言有了一些了解,我相信你应该有自己更好的选择。
在这里,我有必要花一些时间,来说我看到很多初学者所关心的一个事情,特别是年轻人:没有钱买书和其他东西。首先,有很多免费资源可以利用,图书馆,Macmillan Computer Publishing,有成千上百的编程书籍。但是如果你真的想要成为一个好的程序员,还是应该投入一部分资金。应当想方设法(合法的)帮助你弄到一些钱。
网上也有很多C/C++的学习指南。但是我认为那只能作为补充而不是你自学的主要资源。
选择正确的编译器
你写的程序,或者代码,是以文本方式储存的,你甚至可以用记事本写C/C++程序。但是总需要有东西把他们转换成为可执行文件。对于C和C++,那就是编译器。
可用的编译器有好多种,包括很多免费的。选择一款自己适合的编译器很重要,免费的编译器就有这样的好处,你可以把它们试个遍,然后从中选择自己最喜欢的。然而,免费编译器比起商业版,可能会缺失一些功能和大部分服务。幸运的是,多数商业版编译器也兼售介绍版或学习版,这要便宜得多,通常功能却不见得少,唯一的限制是你不能发布用它编译的程序(短时间内你也根本用不着)。
总之,选择编译器取决于你能花多少钱,用什么操作系统,和为什么平台开发。如果要为windows开发,我强烈推荐Microsoft Visual C++。他强大的开发环境使得很多事做起来更方便,毫无疑问没有其他编译器更适合开发windows应用程序。如果你是个学生,你还可以折价买到。(译者:爽!)如果你在DOS 平台开发,你最好的选择可能是DJGPP,免费的哦~。
选择开发平台
尽管最终你很可能为好几个平台开发,总要先选择一个来学。当你在学这门语言,还没有接触到图像
时候,你可能会想使用非图形用户界面的操作系统,比如DOS,Unix.这样可以避免接触高层,比如windows 编程,让你集中精力学习语言本身。
一旦你做好开发游戏的准备,那么,应该考虑是否改变平台,让我们来看看每个选项的特征。
windows:如果你想成为游戏行业的专家,或者如果你想让许多人来玩你开发的游戏,那么,这就是你要选择的平台。因为多数你的用户使用windows,而且现在我也看不出有什么改变的迹象。当今大多数的windows游戏都是由一种你可能听说过技术---DirectX---开发的。你可以DirextX这个库直接访问硬件,这意味着你可以开发高性能的游戏。
DOS:DOS过去是占统治地位的游戏平台,但是已经一去不复返了。尽管可能有一些特殊爱好者还在为DOS开发游戏,现在没有一个为DOS开发的商业游戏,他也将继续衰落,直到微软不再支持。如果你只是想开发游戏,还是不要选择DOS,如果你非要这么做,也不要太久。记住:由于存在大量DOS游戏开发的书,可能还有人辩护从这些书中学习DOS游戏开发。但是,windows游戏开发的书越来越多,那些辩解也变得越来越无力。
Linux:Linux是Unix的一种,由于很多原因后来变得流行,包括稳定性,价格,和反微软情绪。尽管Linux用户还是相当少,但是围绕着他的热情和不断增长的市场潜力使其也成为不错的选择。
Macintosh:MAC有大量忠实粉丝并不能说明什么,几乎每一个和我讨论的MAC狂热者都需要更多更好的游戏。我没有见过多少MAC游戏开发资源,但我相信还是有的,因此这也是一个选择。
consoles:console(就是PS,N64,DC等等)的游戏市场十分巨大,当然console游戏开发的前景也不错。然而以非商业的形式开发console游戏,出于各种原因,在现在似乎行不通。如果你开发console,很可能是在被商业游戏开发组雇用之后。
开始进入主题
现在是时候讨论开发游戏了。简单起见,我假设你选择用C/C++在windows平台开发,可能你选择别的,但大多数我说的还是有用的。
成考和自考的区别
首先,甚至在你打算开始开发游戏之前,你必须很好掌握C和C++.你应该懂指针,数组,结构体,函数,可能还有类。如果你精通他们,就可以开始做游戏了。
这篇文章可能不能教会你所有关于开发游戏的东西。幸运的是,也没有这个必要。这方面有很多书,网上也有很多指南。GameDev应该有所有你想要的东西,这里我建议你怎么开始:一本或几本书。对于windows游戏开发初学者,Tricks of the Windows Game Programming Gurus是个完美的开始。除此之外,还有许多好书.读透这些书,试试所有的例子,不懂得部分多读几遍。
网上指南作为补充。除了弄清书上读到的,他们还涉及一些书上没有谈及的主题。
向专家寻求帮助。如果你不能在书上或指南到问题的答案,好好利用我们的论坛和聊天室。那里有好多专家愿意帮助别人。
这并不是要你按照顺序执行的,而是可以同时并且不断的重复执行。
光学习还是不够的,你必须运用你所学到的。从一个小游戏开始,然后在这个基础上前进。你可以看一下Geoff Howland's的著作:How do I Make Games?A Path to Game Development.
开始,自己独立工作。不要急着加入团队,那样只会减缓学习过程。而且一旦你有了自己的几个游戏,你可以为团队做出更大的贡献。
还有关于书,你应该不仅仅看游戏开发的书。为了能够开发出你看到商店出售的游戏,你应该钻研比大多数游戏开发书籍更高级的一些主题。有一些可以在网上到,但你也应该选一些图形学,人工智能,网络,物理学等方面的书。计算机科学学位看来唾手可得,但因为你被迫上这些课的时候可能认为他们和游戏开发无关----你错了!
包装
这里有一些提示很有用
不要只积累知识,用它
你永远不会知道会理解一些东西知道你是用他们。用你学的东西作些演示。做作书上的练习。
多玩游戏
这样做会使你做出更好的游戏。而且可以减轻编程的枯燥。
帮助别人抖音最火的伤感句子
能帮别人的地方尽量帮助别人,教别人的过程中自己会学到更多。
有始有终
不要有这样的想法:“我能够完成这个游戏了,但是我又有一个新的想法,那就直接做下一个。”你可以学得更多如果你完成他,你也可以用事实证明你不是只会空谈。所以,尽量不要做很大很复杂的游戏,直到你有了一定经验。
张卫健江欣燕开始吧!你现在可以开始准备QUAKE4了。可能你不是不是很了解,但是至少应该知道如何开始这条道路,多些资料,加上多年努力工作,他一定会实现!
MMORPG开发入门
原著:Radu Privantu
翻译:pAnic
2005年5月11日
原文出处:A Beginner’’s Guide to Creating a MMORPG
-------------------------------------------------------------------
译者序:这是一篇讲解如何开发一款MMORPG的入门文章,作者本人也是一款游戏的开发者,文中的内容源于实践,有很高的参考价值。很多人都想拥有自己的游戏,这篇文章对那些想自己开发游戏的人来说可能是一纸福音,也可能是一盆冷水。无论如何,开发游戏都不是一件简单的事情。以下是翻译正文:
-------------------------------------------------------------------
文章的中心是如何起步开发你自己的大型多人在线角扮演游戏(原文:Massive Multiplayer Online R
ole Playing Games)(MMORPG)(译者注:俗称:网络游戏,网游)。针对的读者是经验和资源有限的开发者。读完文章之后,你应该懂得如何起步,还有一些关于什么是应该做的和不应该做的忠告。第一步是评估你的能力和资源。你必须对自己诚实,因为做你力不从心的事情会浪费你的时间并让你心灰意冷。
第一步:评估你的能力
必须的技能:
懂至少一种编程语言。迄今为止,C++因为性能和效率的优越性成为游戏开发者的首选。Visual Basic, Java或者C#可能也是不错的选择;
熟悉一种图形库。通常的选择是SDL,OpenGL,或者DX/D3D。(译者注:网上也有很多免费/付费引擎下载和出售);
选择一种网络通讯库。你可以从WinSock,SDL_net,或DirectPlay中选择。(译者注:很多人喜欢开发自己独特的网络库,这并不复杂,似乎ACE也是一种选择);
对游戏开发有大体的经验。例如,事件循环,多线程,GUI设计,等等。桃源奇迹
强烈推荐的技能:
C/S结构通讯;
多平台开发。你可能希望设计一个MMORPG,尤其是服务器能运行在多种操作系统。为此,我推荐使用SDL,OpenGL和SDL_net;
网站开发。如果你想让用户通过网站查看玩家统计,服务器信息和其他信息,这是必须的。(译者注:其实网站可以交给其他人开发,如果有必要的话);
安全管理。你当然不想因为有人攻击你的服务器而浪费时间!
团队组织能力。你需要一个你能成功领导和管理的团队;
第二步:初步规划
我注意到很多人在不同的论坛发帖子寻团队开发MMORPG。他们中的大部分是这样:“我们成立了一个公司/游戏工作室,需要3个美工,两个程序,1个音乐制作,等等。为了创新,不要看过去的MMORPG,你有全部的自由用来创造你想要的世界,等等。我们会在项目完成并赚到钱的时候付给你酬劳,等等”。不幸的是,以现有的技术和带宽,你无法拥有一个动态的世界。朝向无法到达的目标前进只会导致失败。正确的做法是拿出一些小规模的,功能性强的,可扩展的设计和构架。,
基本软件构架
首先,尝试创建一个简单的C/S模型,有如下功能:
创建一个新角;
保存那个角(服务器端);
用那个角登陆;
能够和其他人交谈;
能在3D空间游览;
保存角看起来简单,其实不然。例如,有两种方式保存角:使用数据库服务或者使用文件。两者有各自的优缺点:
请点击查看详细优缺点对比
现在你决定了如何存储角,你还得选择C/S通讯的网络协议:TCP还是UDP?,我们都知道TCP 速度慢,但是更准确,并且需要额外带宽。我实际使用TCP并没有遇到什么问题。如果你有充足的带宽,TCP是个好选择,至少对初学者是这样。UDP会很麻烦,尤其是对新手。记住,游戏或引擎的初步测试会在你的局域网进行,所有的包都会按顺序依次抵达。在Internet上无法保证这一点。虽然包会按顺序到达,但是有时候会丢包,这通常是个麻烦事。当然,你可以设计你的协议使得C/S能够从丢包中恢复。但这对初学者来说很痛苦,不值得推荐。
第三步:选择数据传输协议
又是看起来很简单,其实不然。你不能只是发送’’\0’’结尾的串。因为你需要一个通用的协议,能同时适用字符串和二进制数据。用0(或其他字符)做结束符是不明智的,因为那个结束符可能是你要发送的数据的一部分。此外,如果你发送20字节,然后再20字节,服务器极有可能收不到两个20字节的包。取而代之的是,它会一次性收到40字节,为了避免浪费带宽在不必要的头上。而且,你可以发送1KB的包,但服务器会以两个小包的形式收到它。所以你必须知道哪里是一个包的开始,哪里是结束。在“永恒大陆”(译者注:原文:Eternal Lands,本文的作者正在开发的一款MMORPG)中,我们用如下的方法:
Offset0:1字节表示传输的命令;
Offset1:2字节,传输的数据长度;
Offset3:变长,消息内容;
这种方法有一致的优点:所有的数据传输有统一的标准。缺点是有些命令有固定已知的长度,浪费了一些带宽。以后我们会改成混合的方法。模拟市民3秘籍
下一件事是决定服务器模型:“非阻塞soket,不使用线程”,或者“阻塞soket,使用线程”。两种方法(使用线程vs不使用线程)各有优缺点。企业注册
线程:
服务器响应会更加平滑,因为如果一个玩家需要大量时间(例如从数据库中读取数据),这会在它自己的线程中完成,不会影响其他人。(译者注:也许作者的意思是每个玩家都有独立的线程,但这对MMORPG 不太现实);