1. 问题提出
编写一个智能五子棋程序,使其可以进行人机交互,并进行人机对弈。
2. 功能要求
棋盘为19×19格子,以字符界面输出。(若实现图形界面,可适当加分)。
游戏可让玩家选择先手或后手。
可假定用x表示机器下的子,o表示玩家下的子。(也可用 实心小圆圈 和 空心小圆圈 表示)
每走一步,屏幕均刷新显示形如图1 或图2 或图3 所示的棋盘状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
a . . . . . . . . . . . . . . . . . . .
b . . . . . . . . . . . . . . . . . . .
c . . . . . . . . . . . . . . . . . . .
d . . . . . . . . . . . . . . . . . . .
e . . . . . . . . . . . . . . . . . . .
f . . . . . . . . . . . . . . . . . . .
g . . . . . . . . . . . . . . . . . . .
h . . . . . . . . . . . . . . . . . . .
i . . . . . . . . . . . . . . . . . . .
j . . . . . . . . . . . . . . . . . . .
k . . . . . . . . . . . . . . . . . . .
l . . . . . . . . . . . . . . . . . . .
m . . . . . . . . . . . . . . . . . . .
n . . . . . . . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . .
p . . . . . . . . . . . . . . . . . . .
q . . . . . . . . . . . . . . . . . . .
r . . . . . . . . . . . . . . . . . . .
s . . . . . . . . . . . . . . . . . . .
please put your stone ( e.g. "a1" ) : i9
图1 棋盘初始状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
a . . . . . . . . . . . . . . . . . . .
b . . . . . . . . . . . . . . . . . . .
c . . . . . . . . . . . . . . . . . . .
d . . . . . . . . . . . . . . . . . . .
e . . . . . . . . . . . . . . . . . . .
f . . . . . . . ● o ● . . . . . . . . .
g . . . . . . . o o . . . . . . . . . .
h . . . . . . . o ● . . . . . . . . . .
i . . . . . . . . . ● . . . . . . . . .
j . . . . . . . . . . . . . . . . . . .
k . . . . . . . . . . . . . . . . . . .
l . . . . . . . . . . . . . . . . . . .
m . . . . . . . . . . . . . . . . . . .
n . . . . . . . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . .
p . . . . . . . . . . . . . . . . . . .
q . . . . . . . . . . . . . . . . . . .
r . . . . . . . . . . . . . . . . . . .
s . . . . . . . . . . . . . . . . . . .
please put your stone ( e.g. "a1" ) : g10
图2 游戏进行中的状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
a . . . . . . . . . . . . . . . . . . .
b . . . . . . . . . . . . . . . . . . .
c . . . . . . . . . . . . . . . . . . .
d . . . . . . . . . . . . . . . . . . .
e . . . . . . . . . . . . . . . . . . .
f . . . . . . . ● o ● o . . . . . . . .
g . . . . . ● o o o ● . . . . . . . . .
h . . . . . . . o ● o . . . . . . . . .
i . . . . . . . ● o ● . . . . . . . . .
j . . . . . . ● o . . . . . . . . . . .
k . . . . . ● . . . . . . . . . . . . .
l . . . . . . . . . . . . . . . . . . .
m . . . . . . . . . . . . . . . . . . .
n . . . . . . . . . . . . . . . . . . .
o . . . . . . . . . . . . . . . . . . .
p . . . . . . . . . . . . . . . . . . .
q . . . . . . . . . . . . . . . . . . .
r . . . . . . . . . . . . . . . . . . .
s . . . . . . . . . . . . . . . . . . .
I win.
图3 某一方获胜的状态
五子棋游戏应具备一定的智能,如:
(1) 判断当前棋局的胜负:当任何一方下子之后,立刻判断是否有任何一方获胜。如发现有一方已赢,则显示胜方,并结束游戏
(2) 判断当前棋盘是否还能下子。如不能下子,则判为和局
(3) 可通过“搜索”“概率计算”“定式识别”等多种方法,提高游戏的防御能力和进攻能力
(4) 机器“思考”时间不应过长,每一步限制在5秒内比较合适
3. 知识点及参考资料
知识点:文件、循环、数组、函数、递归等。
参考资料:C语言程序设计(第二版)(教材),自学的五子棋知识。