打印棋盘:通过每次列表的改变刷新打印棋盘。
# 棋盘号
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