Python五子棋游戏胜利判断函数代码解析
这段代码实现了一个五子棋游戏的胜利判断函数。其中,'over_pos'是一个列表,表示已经落子的位置,每个位置包括一个二元组(x,y)和一个颜色值'white_color'或'black_color'。'check_win'函数将'over_pos'转换为一个15×15的数组'mp',数组中的元素为1表示黑子,为2表示白子。然后,函数依次检查每行、每列、每条斜线上是否存在五个连续的同色棋子,如果存在,则返回胜利方的颜色值和连成五子的位置列表。如果不存在五子连心,返回[0, []]表示无人胜利。
over_pos = [] # 表示已经落子的位置
def check_win(over_pos): # 判断五子连心
mp = np.zeros([15, 15], dtype=int)
for val in over_pos:
x = int((val[0][0] - 27) / 44)
y = int((val[0][1] - 27) / 44)
if val[1] == white_color:
mp[x][y] = 2 # 表示白子
else:
mp[x][y] = 1 # 表示黑子
for i in range(15):
pos1 = []
pos2 = []
for j in range(15):
if mp[i][j] == 1:
pos1.append([i, j])
else:
pos1 = []
if mp[i][j] == 2:
pos2.append([i, j])
else:
pos2 = []
if len(pos1) >= 5: # 五子连心
return [1, pos1]
if len(pos2) >= 5:
return [2, pos2]
for j in range(15):
pos1 = []
pos2 = []
for i in range(15):
if mp[i][j] == 1:
pos1.append([i, j])
else:
pos1 = []
if mp[i][j] == 2:
pos2.append([i, j])
else:
pos2 = []
if len(pos1) >= 5:
return [1, pos1]
if len(pos2) >= 5:
return [2, pos2]
for i in range(15):
for j in range(15):
pos1 = []
pos2 = []
for k in range(15):
if i + k >= 15 or j + k >= 15:
break
if mp[i + k][j + k] == 1:
pos1.append([i + k, j + k])
else:
pos1 = []
if mp[i + k][j + k] == 2:
pos2.append([i + k, j + k])
else:
pos2 = []
if len(pos1) >= 5:
return [1, pos1]
if len(pos2) >= 5:
return [2, pos2]
for i in range(15):
for j in range(15):
pos1 = []
pos2 = []
for k in range(15):
if i + k >= 15 or j - k < 0:
break
if mp[i + k][j - k] == 1:
pos1.append([i + k, j - k])
else:
pos1 = []
if mp[i + k][j - k] == 2:
pos2.append([i + k, j - k])
else:
pos2 = []
if len(pos1) >= 5:
return [1, pos1]
if len(pos2) >= 5:
return [2, pos2]
return [0, []]
代码解析:
- 初始化棋盘: 代码首先使用
np.zeros创建一个15×15的二维数组mp,并将其元素初始化为0,表示棋盘上的所有位置都为空。 - 落子信息处理: 代码遍历'over_pos'列表,将每个落子的位置信息转换为在'mp'数组中的坐标,并根据颜色值将对应位置的元素设置为1或2,分别代表黑子或白子。
- 检查胜利条件: 代码分别检查棋盘上的每行、每列、每条斜线上是否存在五个连续的同色棋子。
- 判断胜利: 如果存在五个连续的同色棋子,函数返回胜利方的颜色值和连成五子的位置列表;否则,返回[0, []]表示无人胜利。
代码中用到的变量:
- 'over_pos': 表示已经落子的位置,是一个列表,每个元素是一个包含落子坐标和颜色的二元组。
- 'white_color': 表示白子的颜色值。
- 'black_color': 表示黑子的颜色值。
- 'mp': 表示棋盘,是一个15×15的二维数组,元素值为0表示空位,1表示黑子,2表示白子。
- 'pos1': 表示黑子连成五子的位置列表。
- 'pos2': 表示白子连成五子的位置列表。
代码逻辑清晰,易于理解,适合学习五子棋游戏开发或Python编程的初学者参考。
原文地址: https://www.cveoy.top/t/topic/oer7 著作权归作者所有。请勿转载和采集!