简易五子棋游戏2
提交数: 440, 通过率: 28.86%, 平均分: 43.13
题目描述:
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。游戏双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。棋具与围棋通用,标准棋盘横竖各19条线,互相交叉形成361个点作为棋子位置,如下图所示。
现在给定15*15的二维棋盘(数组), 黑白双方都已经各下了 20 手棋 ,请编写程序判断当前局面的胜负情况。
黑棋为1,白棋为2。
输入格式:
给定一个黑白双方都已经各下了 20 手棋的棋局,1代表黑子,2代表白子。
输出格式:
输出一行,表示黑赢,白赢或平局。
黑赢输出black,, 白赢输出 white, 平局输出 draw。
数据范围:
棋盘大小为15*15。
样例输入:
200000200000000 122000000000000 000000000000000 000022001020002 020000000000001 000000001000002 000200000000000 000020100000000 000100000000012 000000000011001 021000002001000 010020001000102 000001000020000 000000100001000 020002000101000
样例输出:
draw
提示:
请完善程序:
# 函数名: is_win(r, c)
# 参数表: r, c 棋子在棋盘中的行列坐标
# 返回值: 若棋子获胜返回 True, 否则返回 False
def is_win(r, c):
direction = [ [1, -1], [1, 0], [1, 1], [0, 1] ] #该棋子周围 4 个方向
counts = [0] * 4 #记录各个方向上连续相同棋子数量
#enumerate(seq)分别提取序列的索引和数据元素, 例如:d=0, pos=(1,-1); d=1, pos=(1,0);
for d, pos in enumerate(direction):
for k in range(1, 5): #某一方向上最多考虑 4 个棋子
i = r + pos[0] * k #相邻交叉点位置
j = c + pos[1] * k #相邻交叉点位置
if 0 <= i < size and 0 <= j < size and _________(1)____________:
counts[d] += 1 #没有越界且为同色棋子, 则统计
else:
break
for i in range(4): #超过五子连珠说明已经获胜
if _________(2)__________ :
return True
return False
def situation():
condition = ["draw", "black", "white"] #"平局", "黑胜", "白胜"
for i in range(size):
for j in range(size):
if ________________(3)________________:
return condition[ int( gobang_map[i][j] ) ] #黑胜或白
return condition[0] #平局
size = 15 #棋盘大小
gobang_map = [ [0] * size for i in range(size) ] #创建空白棋盘
#读取棋谱信息
for i in range( size ):
line = input()
for j in range( size ):
gobang_map[ i] [j] = line[j]
print( situation() ) #输出当前局面胜负情况
时间限制: 1000ms空间限制: 256MB