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("=================")

Python:井字棋游戏_第1张图片

 

选择个人图标:由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('输入不合规,重试!')

Python:井字棋游戏_第2张图片

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

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

Python:井字棋游戏_第3张图片

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

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

 整体运行:

Python:井字棋游戏_第4张图片

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

# 棋盘号
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

你可能感兴趣的:(python,游戏,开发语言)