美文网首页自学编程Python日更成长营
自学Python:黑白子交换游戏

自学Python:黑白子交换游戏

作者: 小强聊成长 | 来源:发表于2022-01-16 10:30 被阅读0次

    有3个白子和3个黑子如下图所示布置

    如何用最少的步数将上图中白子和黑子的位置进行交换,得到下图的结果

    游戏的规则如下:

    1)一次只能移动一个棋子。

    2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格。

    3)白色棋子只能向右移动,黑色棋子只能向左移动,不能跳过两个棋子。

    那么问题来了,用程序来实现游戏过程。

    下面直接上代码:

    ########################

    def guocheng(a):

        global number

        print("No. %2d:######################" % number)

        number += 1

        print(" ", end='')

        for i in range(7):

            if a[i] == 1:

                print('| * ', end='')

            else:

                if a[i] == 2:

                    print('| @ ', end='')

                else:

                    print('|  ', end='')

        print(" |\n ————————————————\n")

    def change(t, i, j):# 交换

        term = t[i]

        t[i] = t[j]

        t[j] = term

        return t

    if __name__ == '__main__':

        t = [1, 1, 1, 0, 2, 2, 2] # 初始化数组:1代表白子,2代表黑子,0代表空格

        number = 0

        guocheng(t)

        # 若还没有完成棋子的交换则继续进行循环

        # 判断游戏是否结束

        while t[0] + t[1] + t[2] != 6 or t[4] + t[5] + t[6] != 3:

            # flag为棋子移动一步的标记,flag=True表示尚未移动棋子,flag=False表示已经移动棋子

            flag = True

            i = 0

            while flag and i < 5:  # 若白子可以向右跳过黑子,则白子向右跳

                if t[i] == 1 and t[i + 1] == 2 and t[i + 2] == 0:

                    t = change(t, i, i + 2)    # 调用交换

                    guocheng(t)

                    flag = False

                i += 1

            i = 0

            while flag and i < 5:  # 若黑子可以向左跳过白子,则黑子向左跳

                if t[i] == 0 and t[i + 1] == 1 and t[i + 2] == 2:

                    t = change(t, i, i + 2)

                    guocheng(t)

                    flag = False

                i += 1

            i = 0

            while flag and i < 6: # 若向右移动白子不会产生阻塞,则白子向右移动

                f = True

                if i < 5:

                    f = t[i - 1] != t[i + 2]

                if t[i] == 1 and t[i + 1] == 0 and (i == 0 or f):

                    t = change(t, i, i + 1)

                    guocheng(t)

                    flag = False

                i += 1

            i = 0

            while flag and i < 6:  # 若向左移动黑子不会产生阻塞,则黑子向左移动

                f = True

                if i < 5:

                    f = t[i - 1] != t[i + 2]

                if t[i] == 0 and t[i + 1] == 2 and (i == 5 or f):

                    t = change(t, i, i + 1)

                    guocheng(t)

                    flag = False

                i += 1

    ########################

    执行结果如下:

    No. 0:######################

    | * | * | * |  | @ | @ | @  |

    ————————————————

    No.  1:######################

    | * | * |  | * | @ | @ | @  |

    ————————————————

    No.  2:######################

    | * | * | @ | * |  | @ | @  |

    ————————————————

    No.  3:######################

    | * | * | @ | * | @ |  | @  |

    ————————————————

    No.  4:######################

    | * | * | @ |  | @ | * | @  |

    ————————————————

    No.  5:######################

    | * |  | @ | * | @ | * | @  |

    ————————————————

    No.  6:######################

    |  | * | @ | * | @ | * | @  |

    ————————————————

    No.  7:######################

    | @ | * |  | * | @ | * | @  |

    ————————————————

    No.  8:######################

    | @ | * | @ | * |  | * | @  |

    ————————————————

    No.  9:######################

    | @ | * | @ | * | @ | * |  |

    ————————————————

    No. 10:######################

    | @ | * | @ | * | @ |  | *  |

    ————————————————

    No. 11:######################

    | @ | * | @ |  | @ | * | *  |

    ————————————————

    No. 12:######################

    | @ |  | @ | * | @ | * | *  |

    ————————————————

    No. 13:######################

    | @ | @ |  | * | @ | * | *  |

    ————————————————

    No. 14:######################

    | @ | @ | @ | * |  | * | *  |

    ————————————————

    No. 15:######################

    | @ | @ | @ |  | * | * | *  |

    ————————————————

    ________________END______________

    相关文章

      网友评论

        本文标题:自学Python:黑白子交换游戏

        本文链接:https://www.haomeiwen.com/subject/rcmgqrtx.html