我是一个相对缺乏经验的程序员,最近我对为学校项目制作一个跳棋游戏应用产生了兴趣。我不确定从哪里开始(或者我是否应该尝试)创建这个。我心中的项目可能不会涉及太多,除了一个简单的AI和一个多人游戏模式。
有人能给我一些提示/指导,让我开始学习吗?
回答:
在某种程度上,我同意一些评论中建议“先尝试一些更简单的”的观点,但跳棋足够简单,你可能会得到一个可用的程序——而且你肯定会在过程中学到有用的东西。
我的建议是将问题分成几个部分,然后依次解决每个部分。例如:
1) 棋盘表示 – 或许可以使用一个8×8的数组来表示棋盘。你需要能够用空白、白子、黑子、白王、黑王来填充一个方格。一个更有效的解决方案可能是查看“位棋盘”,其中棋盘的占用情况由一组64位整数来描述。你可能最终想要一些可以加载或保存棋盘状态、打印或显示棋盘、并确定某个位置上是否有棋子的函数。
2) 移动表示 – 找到一种计算合法移动的方法。哪些棋子可以移动,它们可以移动到哪里。你需要考虑到——移动到棋盘边缘、被阻挡的移动、跳跃、多次跳跃、王可以“向后”移动等。你可能最终想要一些可以计算一个棋子的所有合法移动、判断一个建议的移动是否合法、记录游戏为一系列移动的函数,可能还需要与最终用户交互,以便通过鼠标或输入文本命令,你可以在你的棋盘上“玩”一个游戏。所以即使你只做到这一步,你也有一个可以展示的“产品”,人们可以与之互动。
3) 电脑玩法 – 这是更难的部分 – 你需要学习关于极小极大算法、alpha-beta剪枝、迭代加深以及所有与电脑游戏AI相关的术语 – 有些听起来比实际难。你还需要开发一个位置评估算法,来衡量一个位置的价值,以便电脑可以决定哪一个是“最佳”移动。这可以像天真的假设那样简单,即拿走对手的棋子总是比不拿走好,变成王比不变成王好,或者一个让你有更多未来移动的移动比一个让你下一步选择较少的移动更好。实际上,即使是一个非常简单的“贪婪”棋盘评估,如果你能提前看2-3步,也能工作得相当好。
总的来说,可能更简单的是看看比跳棋稍微不那么雄心勃勃的东西 – 奥赛罗棋可能是一个不错的选择,而且写一个能击败没有玩过很多游戏的人的奥赛罗棋玩家并不难。三维井字游戏,或者一个小的点和线游戏也可能适合。这些游戏更简单,因为没有王或边界来复杂化事情,所有(嗯,大多数)移动都是合法的,而且它们足够“有趣”来玩,作为一个值得展示的软件演示。