如果我想制作一个吃豆人游戏?

8
我立即将这篇文章放置在公共社群中。我现在不想询问关于编程的帮助,也没有具体的编程问题,而是想了解制作这样一个游戏所需的过程和资源。
简单来说:我的大学朋友和我决定给自己一个非常大的挑战,以提高我们的编程技能。在六个月内,我们想展示一个Pac-Man游戏。Pac-Man将像幽灵一样由人工智能控制,经过一系列尝试后,活得最久的Pac-Man胜利。
这不像我们以前做过的任何事情。对我来说,这里的目标不是创造完美的游戏,而是尝试完成它,在此过程中学到很多东西。即使我不能在时间内完成,这是一个很大的可能性,我也至少想尝试一下这个项目。
那么我的问题是:我应该如何开始准备?我已经开始学习向量数学、矩阵等所有有趣的内容。我想使用DirectX 9.0c作为平台,这是可行的吗?请记住,这不仅仅是针对这个项目的偏好,我希望在图形开发方面有一些未来的发展,因此我想选择一个未来安全的平台。
至于游戏开发的一般情况,我应该考虑什么?我以前从未做过真正的游戏,因此任何关于中等规模项目(如果这将是一个中等规模项目)开发的建议都将不胜感激。
我的主要担心是陷阱和挫败感。
如果问题太模糊,请原谅。如果它不属于这里,那么我会将其删除。否则,非常感谢有关制作大型项目的所有建议。

7
请查看http://www-cs-students.stanford.edu/~amitp/gameprog.html,其中的内容可能对某些主题有所帮助。 - tur1ng
多酷的页面啊!非常感谢提供链接! - IAE
DirectX的等价于“Hello World!”的方式是在屏幕上绘制一个三角形,使用渲染系统。试着搜索“DirectX绘制一个三角形。”😉 - Heath Hunnicutt
@tur1ng:收藏了那个链接。谢谢! - chaosTechnician
7个回答

9
给你一些建议,因为你之前没有尝试过这种事情。 从DirectX(以及预计的C++)之外的其他东西开始 DirectX和C++会让你接触到很多低级别的东西,你可以在以后学习。保持简单,也许尝试一下XNA和C#,它们非常相似,你可以稍后进行移植,但现在可以跳过很多像内存管理和指针之类的东西。 从2D开始而不是3D 原始的Pacman是2D的,所以现在不需要向量数学。
那么你应该怎么做呢?
好吧,一些需要考虑的事情是游戏循环、保持同步、更新屏幕和响应用户输入。
这些都是很好的原则,可以让你更快地启动并运行。不要低估了保持进展的重要性 - 如果你最初设置的技术门槛太高,这将是困难的。
我会按照以下顺序进行(为了保持有趣和有趣)
1.显示一个屏幕 - 这是高度可视化的 2.让Pacman响应用户输入 3.限制Pacman在墙内 4.让鬼响应次要用户输入 - 你可以互相追逐 5.了解一些碰撞检测 6.渲染点和能量药丸,以便你可以得分并吃掉幽灵 7.渲染更多的幽灵并找到AI 8.找出完成级别的代码 9.当进入新级别时,使地图改变和状态重置
一旦你做到这一点,让它运行起来,然后决定是否想玩更好的AI、3D数学或切换到C++。

嗨!感谢您的评论,但是为了澄清:我在游戏编程方面并不是完全的初学者。我以前用ActionScript制作过塔防游戏,并且已经使用XNA C#进行了编程,因此我非常清楚游戏循环和一些流程-尽管不是太多。我想使用C++的原因是它是大多数游戏使用的真正的编程语言,也是大学课程教授的主要语言。我很感激您的评论,我会认真考虑您的建议^^特别是关于2D-哎呀!应该意识到向量可能不适用于那里。 - IAE
太好了!如果你不想失去信心,我仍然建议你坚持使用类似上面描述的顺序。在你能够直观地看到它运行之前,试图编写像 AI 这样的东西是一个痛苦的过程 ;) - DamienG
1
是的,这就是为什么我会在Excel中建模我的路径查找算法,你可以清楚地看到发生了什么(而且你会因此在公司里被称为那个疯狂的Excel专家)。 - Grant Peters

4
我曾经在面向对象的课程中用Java写过一个吃豆人游戏。除了找出最佳的墙壁映射方式可能有点困难外,我觉得这个项目非常简单。经过一番研究,我发现这个链接:http://javaboutique.internet.com/PacMan/source.html使用位移来确定墙壁。看起来很复杂,但是在我稍微调整一下数学后,我认为它非常优雅。除此之外,吃豆人是一个非常适合使用数组的概念,所以可以使用数组来表示游戏板块、基本精灵,调整速度和刷新率,跟踪游戏数据,并将其放入循环中。
至于幽灵的人工智能,已经有相关文章介绍了它们各自具有特定的策略。或者你也可以自己编程,让幽灵总是朝着吃豆人(或他的大致位置/象限)前进,或者像最短路径一样复杂。

3

玩吃豆人!这是您项目的第一个任务!


3

2

就我个人而言,我会这样做:

  • 研究开源游戏,看看它们是如何实现的
  • 购买一本关于游戏编程的书籍(实际上,我已经有了一本游戏编程的书籍,但你可能需要更加新的版本)
  • 选择一个工具集或游戏开发库(SourceforgeGoogle Code
  • 按照该库提供的教程进行学习,如果API过于奇怪,可以考虑换一个库
  • 制定一个需求文档
  • 绘制第一版设计(“计划扔掉一个”),尝试让别人审核一下
  • 制定测试计划
  • 制定进度表,不是因为要严格按照计划执行,而是为了将任务分解成易于定义的任务
  • 编写最小完整的游戏(例如,在窗口中可以控制的吃豆人精灵:没有迷宫、鬼、分数、生命、死亡等功能)
  • 添加功能,直到实现整个游戏

这些是非常实用的想法。只有一个问题,您如何定义“奇怪”的API? - IAE
7
在执行上述任何操作之前,我会安装一个版本控制系统,并熟悉其使用。 - anon
放到我的列表上,谢谢!你有什么特别推荐的吗?还是说这是一个“自己试验一下”的东西? - IAE
@SoulBeaver 因为你们两个人,而且可能不想运行一个集中式服务器,像Mercurial这样的分布式版本控制系统似乎是最好的选择。这里有很多关于“哪种DVCS?”的问题 - 请不要再开一个新的! - anon
你可以定义“奇怪”。一些API来自MFC的思想(主要是“在做任何其他事情之前从我们的类派生,并让我们处理main()”),而其他一些则仅提供对OpenGL的薄包装。其他API有不同的基本哲学。你可能会发现某些API比其他API更容易使用,但你需要尽早找出API是否适合你,以便在没有太多痛苦的情况下切换到其他API。我希望有一个处理诸如碰撞检测之类的API。你需要考虑精灵而不是图形原语。 - Max Lybbert

1

好东西!我很高兴Pacman能够激励和启发你。

开始准备事项。

1)确定开发环境。

a) Are you building a standalone game or a networked game. 

b) Which language are you targetting at to improve? 

2) 你对人工智能了解多少?

3) 你对编程算法技术熟练掌握吗,例如A*(A星)路径查找、Dijkstra算法、碰撞检测、命中测试甚至递归编程?

4) 你们中有谁在图形设计方面有天赋吗?

祝好运。

P/S:顺便提一下,如果我要写一个吃豆人游戏,我会用C#和Silverlight 4.0来写(虽然我也可以很舒服地写C++,但我的首选是跳上Silverlight的列车)。


1

听起来是一个很好的学习项目!我推荐你的方法有两个基本点:

  1. 迭代式开发
  2. 沿途阅读关于C++和DirectX的大量资料

从小处着手——先写一些仅仅在屏幕上绘制吃豆人(Pac-Man)的代码。然后通过实现屏幕上的移动构建它。接着构建地图边界和无法穿越它们。以这种方式继续,以完成下一个任务为重点,然后尽一切努力完成它。不要让任务过于庞大。

为了找出如何完成任务,您需要阅读。书籍、网站和现有代码都对实现所需的内容非常有帮助。值得一看的是多种不同完成相同任务的方法,因为有些方式比其他方式更好,或者可能更适合您的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接