这段代码实现了一个五子棋游戏的胜利判断函数。其中,'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, []]

代码解析:

  1. 初始化棋盘: 代码首先使用np.zeros创建一个15×15的二维数组mp,并将其元素初始化为0,表示棋盘上的所有位置都为空。
  2. 落子信息处理: 代码遍历'over_pos'列表,将每个落子的位置信息转换为在'mp'数组中的坐标,并根据颜色值将对应位置的元素设置为1或2,分别代表黑子或白子。
  3. 检查胜利条件: 代码分别检查棋盘上的每行、每列、每条斜线上是否存在五个连续的同色棋子。
  4. 判断胜利: 如果存在五个连续的同色棋子,函数返回胜利方的颜色值和连成五子的位置列表;否则,返回[0, []]表示无人胜利。

代码中用到的变量:

  • 'over_pos': 表示已经落子的位置,是一个列表,每个元素是一个包含落子坐标和颜色的二元组。
  • 'white_color': 表示白子的颜色值。
  • 'black_color': 表示黑子的颜色值。
  • 'mp': 表示棋盘,是一个15×15的二维数组,元素值为0表示空位,1表示黑子,2表示白子。
  • 'pos1': 表示黑子连成五子的位置列表。
  • 'pos2': 表示白子连成五子的位置列表。

代码逻辑清晰,易于理解,适合学习五子棋游戏开发或Python编程的初学者参考。

Python五子棋游戏胜利判断函数代码解析

原文地址: https://www.cveoy.top/t/topic/oer7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录