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

时间:2008-10-14 00:23:05

标签: c++ graphics

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

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

我可能遇到哪些问题?

您会推荐哪些图形库?

我有什么问题不够自问?

9 个答案:

答案 0 :(得分:3)

...问题

嗯,确保在编写游戏的策略部分时,不要只是简单地做一下给你最多的动作。你还必须给予董事会职位权重。例如,如果有机会将棋子置于棋盘角落,则应优先于任何其他动作(除了赢得比赛),因为该棋子永远不会被翻过来。并且,在角落附近放置一块是你可以制作的最糟糕的移动(如果角落空间是开放的)。

希望这有帮助!

答案 1 :(得分:2)

正如其他人所说,我首先要深入了解游戏玩法和策略,以及所涉及的算法。此链接可能对您有用,它描述了基本的奥赛罗策略和算法:

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

在你自己对游戏逻辑进行了重击之后,请阅读Peter Norvig的优秀着作Paradigms of AI Programming的第18章。 (源代码here。)它有一个相当简短且极易阅读的程序,可以踢任何人类的屁股;你应该通过比较你的解决方案来学到很多东西。

答案 5 :(得分:2)

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

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

你应该问的问题:

这个项目是C ++的明智选择吗?考虑C和/或python。我对此的回答是,如果你只想写反转,请转到python。但是如果你想学习低级语言,那就先做C吧。 C ++是C的扩展,因此在C中学习的内容比C中的更多。而且我的判断,你学习C ++的次数越多,不值得付出努力。

您如何使用图形库?如果您要进行奇特的效果,请转到场景图。相反,您可以使用按钮在其上渲染reversi网格。

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

我还给你一些想法让你入门:

奥赛罗董事会总体而言是8x8,64个细胞。您可以为每个单元分配一个字节,使每个板状态为64字节。这是8个长的整数,根本不是很多!您可以存储游戏的整个进度,玩家甚至无法注意到它。因此,建议将othello板实现为不可变结构,当您更改状态时,您始终会复制该结构。它还将帮助您稍后使用AI并实现“撤消”功能。

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

用于检查可以放置块的位置的算法可以一个接一个地通过板,然后从空单元跟踪到正则表达式的每个方向:B + W => W ^,W + B => B ^通过这种方式,您可以将游戏规则封装在一个简单的界面中,该界面可以完成所有操作。

答案 6 :(得分:1)

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

和这个教程...

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

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

但OpenGL是一个大问题,因为你必须创建自己的精灵表处理程序和所有2d的东西。

与allegro一起...完成你的游戏,然后去OpenGL!

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

很多年前,当我还在上学的时候,我写了一个逆转游戏。它的策略很简单,它只是最大数量的碎片,但加权所以它更喜欢边缘,尤其是角落,并且不喜欢有可能放弃角落的方块。

这对那些还没有弄清楚它在做什么的人来说效果相当不错,但是一旦你有了它,就很容易使用它的策略。然而,我并不自豪地说,即使我写了它,它在前几次击败了我!

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