美文网首页自学编程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