你将如何实施游戏逆转?(奥赛罗)

Evi*_*ach 6 c++ graphics

我一直在考虑在家开始一个侧面项目来锻炼我的大脑. 黑白棋看起来像一个简单的游戏,其中移动性对游戏玩法有深远的影响.它至少比tic tac toe更进了一步.这将是针对某种AI的单一玩家.

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

我可能遇到什么问题?

你会推荐什么图形库?

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

Che*_*ery 2

总的来说,您最终遇到的问题将取决于您和您的方法。朋友常说,从不同的角度来看,复杂就是简单。

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

你应该问的问题:

对于这个项目来说,C++ 是明智的选择吗?也考虑 C 和/或 python。我对此的回答是,如果你只想写黑白棋,那就用 python。但如果你想学习低级语言,请先学习 C。C++ 是C 的扩展,因此需要学习的内容比 C 多。而且根据我的判断,在 C++ 上学习越多是不值得的。

你如何使用图形库?如果您想做一些奇特的效果,请转到场景图。相反,您可以只渲染带有按钮的黑白棋网格。

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

我还给你一些想法来帮助你开始:

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

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

用于检查可以在哪里放置块的算法,可以将棋盘一一遍历,然后从空单元格追踪到正则表达式模式的每个方向:B+W => W^, W+B => B^ 这样您可以将游戏规则封装在一个简单的界面中来处理这一切。