这是一个非常开放式的问题。你可以写一本书来回答它。但我们先指明正确的方向...
第一步,你需要具备良好的调试技巧才能完成这样的项目。阅读Steve McConnell的Code Complete。全部阅读。所投资的时间将比你阅读/实验任何其他内容都更有价值。
获取一些游戏源代码。任何游戏都可以。确保在看到复杂的代码之前先看到一些简单的东西,并且请记住在查看任何游戏代码时,他们可能花费了比你更多的时间来协同工作。这样做的目的是为了看到代码结构。
获得3D数学的参考资料,不必太深入,但你需要知道如何反复推导出点积等内容,以便能够计算出相机在世界中的矩阵等(即使你没有编写任何渲染代码)。
(编辑)这是一本关于3D数学的好书:Mathematics for 3D Game Programming and Computer Graphics, Second Edition (Game Development Series) 这并不是你在大学里学习的那种,它更像是三角学和更高级的实用概念之间的交叉:如何为自己创建一个简单物理,高效碰撞检测等的工具箱。
你需要了解一些渲染和管道方面的知识。SDL会给你一个好的起点,但请确保你理解它在做什么。
阅读有关实际系统设计的内容,你的各个系统将必须相互配合。认真考虑。你的系统可以使用C或C++编写,重要的是思考你的数据/控制流如何流动,而不是完美地模拟设计模式(尽管这些也非常有用)。
AI基础,不是“真正”的AI,而是功能性AI;这是有很大区别的。状态机是一个很棒的开始,对于简单的FPS已经足够了。
学习一些关于估算和规划的知识。制作FPS游戏时,你不会有足够时间去做所有你想要做的事情。你必须同时进行分类和学习如何分类; 它们是两个不同的事情,后者更难。经验是最好的老师。(尽管传奇人物麦康奈尔也有一本关于此的书)
建立一个将游戏玩法插入到你的关卡中的系统。如果只有你一个程序员,那么你最好编写一个插件,用于已有的编辑程序(例如3DS Max)。对于一个程序员来说,我强烈推荐Max而不是Maya。Maya脚本很好用,但更适合聪明的非程序员使用。我发现3DS Max更能像程序员一样思考创造和编辑你的世界。
你可以花费数年时间开发工具,以使你能够正确地做这件事,因此你要以一种让你能够快速准确地编辑的方式来做事情 如果你正在制作自己的编辑器,请将其整合到你的游戏世界中。 如果你的世界不是真正的三维的,并且你想快速制作很多关卡,你可以将你的关卡数据保存为像这样的格式,这会节省你很多时间 其中X是墙壁,其他字母是游戏对象,一个简单的解析器可以将它们转换为游戏对象和世界坐标。
xxxxxxxxxxxxxxxxxxxxxxxx
xx..........P..........x
xxxxxxx...........I....x
xR....xxx...........E..x
xx.................0xxxx
xxxxxxxxxxxxxxxxxxxxxxxx
但这一切都取决于你的游戏。我的观点是,你需要诉诸于所谓的“贫民窟编码”,即如何将游戏数据导入到你的世界中非常重要,而且你需要考虑一些既易于快速实施又适合你使用的方法。
最终关键在于你的目标是什么?如果你的目标是学习以绝对正确的方式编写代码,那么你需要花费大部分时间在代码迭代上,因为一个月前看起来还不错的代码现在可能需要重新修改,以满足你现在的需求。不要害怕重写代码,这样做可以让你学到更多,但如果你的目标是功能性的话,你可能需要想办法将某些东西(比如嵌入游戏数据和坐标到代码文件中)直接加入代码中。只要你知道自己在哪里进行了修改,并且已经将其与好的代码分开,以便在有机会的时候能够回过头来正确地编写代码,这样就可以了。
总之,你需要决定你在这个项目中的目标是学习还是功能性,并在两者之间找到一个平衡点。
从fileshack下载Quake 3源代码并学习。
虽然与SDL无关,但NeHe的OpenGL教程是学习如何进行3D编程的绝佳起点。
如果这是你的第一款游戏,你可能希望把目标放得低一些,不要追求FPS。使用SDL编写一个简单的2D俄罗斯方块游戏将教会你有关该库的所有知识。