6

我一直在考虑在家里开始一个业余项目来锻炼我的大脑。 黑白棋看起来像一个简单的游戏,其机动性对游戏玩法有着深远的影响。它至少比井字游戏更上一层楼。这将是一个单一的玩家对抗某种人工智能。

我想在 PC 上用 C++ 试试这个。

我可能会遇到什么问题?

你会推荐什么图形库?

我不够聪明地问自己什么问题?

4

9 回答 9

3

问题...

好吧,在编写游戏的策略部分时一定要确定,而不是简单地做出让你获得最多棋子的动作。您还必须重视董事会位置。例如,如果有机会将棋子放在棋盘角落,则应优先于任何其他动作(除了赢得比赛),因为该棋子永远无法翻回。而且,将一块棋子放在角落点附近几乎是你能做出的最糟糕的举动(如果角落空间是开放的)。

希望这可以帮助!

于 2008-10-14T00:28:56.317 回答
2

正如其他人所提到的,我将从深入了解游戏玩法和策略以及所涉及的算法开始。此链接可能对您有用,它描述了基本的黑白棋策略和算法:

http://www.site-constructor.com/othello/Present/Basic_Strategy.html

于 2008-10-14T00:35:11.140 回答
2

正如这些人建议我告诉你首先考虑算法和游戏逻辑的想法。对我来说,下一个答案是图形库,它取决于您的目标平台、编程语言、框架等。但正如我建议的那样,将 C# 与 Cairo 2D 图形库一起使用,您可以使用 Mono 框架来实现这一点(然后您可以针对所有三个让您的游戏运行的主要操作系统)-> www.mono-project.org。同时我发现我认为这种资源会帮助你:http ://home.datacomm.ch/t_wolf/tw/misc/reversi/html/index.html 。但是如果你完成了这个,你可以尝试实现数独。

于 2008-10-14T00:42:30.393 回答
2

如果你写一个 AI 来对抗,你会想用 alpha-beta 剪枝来研究 minimax。您最喜欢的搜索引擎将对这个话题有很多话要说。

于 2008-10-14T01:04:35.730 回答
2

在您自己掌握了游戏逻辑之后,请阅读 Peter Norvig 的杰出著作Paradigms of AI Programming的第 18 章。(源代码在这里。)它有一个相当短且可读性极强的程序,几乎可以踢任何人的屁股;你应该通过比较你的解决方案来学到很多东西。

于 2008-10-14T01:12:34.997 回答
2

总的来说,你最终会遇到的问题将取决于你和你的方法。朋友倾向于从不同的角度说复杂的简单。

图形库的选择取决于你要写什么样的游戏?OpenGL 是此类项目中的常见选择,但您也可以使用一些 GUI 库或直接使用 windows 或 xorg 自己的库。如果你想做点花哨的,只需使用 OpenGL。

你应该问的问题:

C++ 是这个项目的明智选择吗?也考虑 C 和/或 python。我对此的回答是,如果你只想写黑白棋,那就去 python。但是如果你想学习一门低级语言,先学C。C++ 是对 C 的扩展,因此在 C++ 中要学习的东西比在 C 中的要多。在我看来,你必须在 C++ 上学习的越多不值得付出努力。

你如何使用图形库?如果您要制作精美的效果,请转到场景图。相反,您可以只渲染带有按钮的黑白棋网格。

你应该如何实现 UI,你应该使用常见的 UI 概念吗?通常的 UI 概念(窗口、框架、按钮、菜单栏、对话框)并不像人们想象的那么好,要正确实现它们还有很多工作要做。应用场景图来解释输入,并尝试不同的巧妙方法来控制游戏。避免使用介绍菜单(它们是愚蠢且无用的工作),对大多数配置使用命令行参数。

我还给你一些想法让你开始:

奥赛罗棋盘为 8x8,总共 64 个单元。您可以为每个单元分配一个字节,这使得每个板状态为 64 个字节。它是 8 个长整数,一点也不长!您可以存储游戏的整个进度,玩家甚至不会注意到它。因此,建议将黑白棋板实现为一个不可变结构,当您更改状态时始终复制该结构。它还将在以后帮助您使用 AI 并实现“撤消”功能。

因为一个字节可以存储比三个状态(EMPTY、BLACK、WHITE)更多的信息,我建议您还要提供两个额外的状态(BLACK_ALLOWED、WHITE_ALLOWED、BOTH_ALLOWED)。您可以在复制新状态时计算这些值。

检查可以放置块的位置的算法,可以一个一个地通过板,然后从空单元格跟踪到正则表达式模式的每个方向:B+W => W^,W+B => B^ 这样您可以将游戏规则封装在一个简单的界面中,该界面可以处理所有事情。

于 2008-10-14T13:50:16.870 回答
1

那里有大量的库,但据我所知,您的游戏将需要事件和图形库......以及一个声音库,以获得更多乐趣!Allegro 5 是一个最佳选择……它是一个多合一的库。 http://liballeg.org/ 虽然它是用 C 语言编写的,但您可以创建面向对象的程序。

和一个教程...

http://fixbyproximity.com/2d-game-development-course/

或者您可以使用低级 API,例如 OpenGL 用于图形。用于声音的 OpenAL。glfw 用于活动。

但是 OpenGL 很重要,因为您必须创建自己的精灵表处理程序和所有 2d 的东西。

使用 allegro...完成您的游戏,然后使用 OpenGL!

于 2015-11-17T05:21:57.053 回答
0

黑白棋应该是一个非常容易实现的游戏。在 AI 的实现过程中学习一些基本的博弈论算法(特别是 min-max)是完美的。

关于人工智能需要注意的一件事是,完全有可能为黑白棋制作一个完美的人工智能(无论对手的动作如何,它总是会获胜)。所以在战略方面,如果你的 AI 输了,你还有工作要做:)

于 2008-10-14T14:01:18.580 回答
0

很多年前,我还在上学的时候写过一个黑白棋游戏。它的策略非常简单,它只追求最大数量的棋子,但加权所以它更喜欢边缘,尤其是角落,不喜欢冒险放弃角落的正方形。

这对那些还没有弄清楚它在做什么的人来说效果很好,但是一旦你有了它,就很容易使用它的策略来对付它。然而,我并不自豪地说,尽管我已经写了它,但它最初几次击败了我!

具有一些前瞻动作的适当 AI 要复杂得多。应该是一个有趣的问题,但当时我对用户界面更感兴趣。

于 2008-10-14T14:08:32.357 回答