Python:井字棋游戏

打印棋盘:通过每次列表的改变刷新打印棋盘。

# 棋盘号
board = list('123456789')
# 打印棋盤
def print_board():
    print("      井字棋      ")
    print("=================")
    print("\t{0} | {1} | {2}".format(board[0], board[1], board[2]))
    print("\t_ | _ | _")
    print("\t{0} | {1} | {2}".format(board[3], board[4], board[5]))
    print("\t_ | _ | _")
    print("\t{0} | {1} | {2}".format(board[6], board[7], board[8]))
    print("=================")

选择个人图标:由p1选择一个心仪图标,另一个为p2图标。

# 選p1個人圖標(p2则为另一个)
while True:
    select = input('请玩家1输入您想要的图标序号(1.*,2.X)\n')
    if select == '1':
        player1_icon = '*'
        player2_icon = 'X'
        break
    elif select == '2':
        player1_icon = 'X'
        player2_icon = '*'
        break
    else:
        print('输入不合规,重试!')

 判断输赢:定义了能赢的数的组合序列,判断棋盘在这些序列的位置上是否图标一样。

win_method = ['123', '456', '789', '147', '258', '369', '159', '357']
# 判斷輸贏
    for r in win_method:
        if board[int(r[0]) - 1] == board[int(r[1]) - 1] == board[int(r[2]) - 1]:
            winner += 'winner1'
            print('游戲結束勝者:\033[31m winner1 \033[0m')

判断是否平局:两玩家每次落子记录下子位置,如果位置总数超过9即定为平局。

# 判斷是否死局
    if len(p1_place) + len(p2_place) == 9:
        print('\033[31m平局\033[0m!游戲結束')
        break

醒目:将重要信息颜色改变。

p1 = int(input('请\033[31m玩家1\033[0m落子:'))

 整体运行:

 整体代码:轮流下子,判定输赢。

# 棋盘号
board = list('123456789')
# 打印棋盤
def print_board():
    print("      井字棋      ")
    print("=================")
    print("\t{0} | {1} | {2}".format(board[0], board[1], board[2]))
    print("\t_ | _ | _")
    print("\t{0} | {1} | {2}".format(board[3], board[4], board[5]))
    print("\t_ | _ | _")
    print("\t{0} | {1} | {2}".format(board[6], board[7], board[8]))
    print("=================")


print(' ' * 10 + '歡迎進入井字棋小游戲!' + ' ' * 10)

# 選p1個人圖標(p2则为另一个)
while True:
    select = input('请玩家1输入您想要的图标序号(1.*,2.X)\n')
    if select == '1':
        player1_icon = '*'
        player2_icon = 'X'
        break
    elif select == '2':
        player1_icon = 'X'
        player2_icon = '*'
        break
    else:
        print('输入不合规,重试!')

# 记录玩家1和玩家2所下的位置
p1_place = []
p2_place = []
# 赢棋所对应的位置
win_method = ['123', '456', '789', '147', '258', '369', '159', '357']
winner = ''
print('\n游戲開始!')
while True:
    # 打印棋盤
    print_board()

    '''玩家1'''
    try:
        p1 = int(input('请\033[31m玩家1\033[0m落子:'))
    except ValueError:  # 使用try-except判定输入是否合法;
        print('\n请输入一个数字而不是字母或空格(请由玩家1开始落子)\n')
        continue
    if p1 < 1 or p1 > 9:
        print('无此位置!重试')
        continue
    elif p1 in p2_place:
        print('此位置已被占用!请重试')
        continue
    else:
        # 落子成功 记录位置动作 并将此位置改为玩家所选图案
        p1_place.append(p1)
        board[p1 - 1] = player1_icon
    print_board()
    print()
    # 判斷輸贏
    for r in win_method:
        if board[int(r[0]) - 1] == board[int(r[1]) - 1] == board[int(r[2]) - 1]:
            winner += 'winner1'
            print('游戲結束勝者:\033[31m winner1 \033[0m')
    if winner == 'winner1':
        break
    # 判斷是否死局
    if len(p1_place) + len(p2_place) == 9:
        print('\033[31m平局\033[0m!游戲結束')
        break

    '''玩家2'''
    try:
        p2 = int(input('请\033[31m玩家2\033[0m落子:'))
    except ValueError:  # 使用try-except判定输入是否合法;
        print('\n请输入一个数字而不是字母或空格(请由\033[31m玩家1\033[0m开始落子)\n')
        continue

    if p2 < 1 or p2 > 9:
        board[p1 - 1] = p1
        print('无此位置!重试(请由\033[31m玩家1\033[0m开始落子)')
        continue
    elif p2 in p1_place:
        board[p1 - 1] = p1
        print('此位置已被占用(请由\033[31m玩家1\033[0m开始落子)')
        continue
    else:
        # 落子成功 记录位置动作 并将此位置改为玩家所选图案
        p2_place.append(p2)
        board[p2 - 1] = player2_icon
    print_board()
    print()
    # 判断赢输
    for r in win_method:
        if board[int(r[0]) - 1] == board[int(r[1]) - 1] == board[int(r[2]) - 1]:
            winner += 'winner2'
            print('游戲結束勝者:\033[31m winner2 \033[0m')
    if winner == 'winner2':
        break

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csaclw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值