基于SDL的C++黑白棋

https://apriljia.com/2018/07/30/%E5%9F%BA%E4%BA%8Esdl%E7%9A%84c%E9%BB%91%E7%99%BD%E6%A3%8B/

写了一个基于SDL的黑白棋游戏,分享一下。

黑白棋,又叫翻转棋(Reversi)、奥赛罗棋(Othello)、苹果棋或反棋(Anti reversi)。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。

如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。

翻转棋类似于棋盘游戏“奥赛罗 (Othello)”,是一种得分会戏剧性变化并且需要长时间思考的策略性游戏。

翻转棋的棋盘上有 64 个可以放置黑白棋子的方格(类似于国际象棋和跳棋)。游戏的目标是使棋盘上自己颜色的棋子数超过对手的棋子数。

当游戏双方都不能再按规则落子时,游戏就结束了。通常,游戏结束时棋盘上会摆满了棋子。结束时谁的棋子最多谁就是赢家。

 

我的源代码在这里:https://github.com/plutojia/Reversi-SDL

其中ai.h和ai.cpp里实现了黑白棋的算法,也有各种辅助函数,可以单独拿出来用,加一个MAIN函数后在小黑窗里运行如下:

基于SDL的C++黑白棋

Reversi.cpp中采用了SDL图形库为黑白棋加了一个图形界面。我是用的VS2015写的代码,需要先配置SDL环境才能运行。运行效果如下:

基于SDL的C++黑白棋基于SDL的C++黑白棋