python模拟井字棋

一组井字棋游戏的python实现。

创建一个三横三竖的棋盘,以小键盘数字1-9代表棋盘中的位置,玩家分别执#和0棋子。以连城一条线为胜利。

运行代码显示结果如下:

代码如下: 

import copy

def creatBoard():
    """创建一个三纵三列的空白棋盘"""
    board = {1: ' ', 2: ' ', 3: ' ',
            4: ' ', 5: ' ', 6: ' ',
            7: ' ', 8: ' ', 9: ' '}
    return board

def printBoard(board):
    """显示棋盘"""
    print(board[7] + '|' + board[8] + '|' + board[9])
    print('-+-+-')
    print(board[4] + '|' + board[5] + '|' + board[6])
    print('-+-+-')
    print(board[1] + '|' + board[2] + '|' + board[3])

def nextBoard(board):
    """响应用户输入,并输出新的棋盘"""
    new_board = copy.copy(board)
    work = False #用户是否成功输入下一步棋子的标志
    while not work:
        print('下一个' + turn + '棋子走在哪个位置?')
        move = input()
        if move == '1' and new_board[1] == ' ':
            new_board[1] = turn
            work = True
        elif move == '2' and new_board[2] == ' ':
            new_board[2] = turn
            work = True
        elif move == '3' and new_board[3] == ' ':
            new_board[3] = turn
            work = True
        elif move == '4' and new_board[4] == ' ':
            new_board[4] = turn
            work = True
        elif move == '5' and new_board[5] == ' ':
            new_board[5] = turn
            work = True
        elif move == '6' and new_board[6] == ' ':
            new_board[6] = turn
            work = True
        elif move == '7' and new_board[7] == ' ':
            new_board[7] = turn
            work = True
        elif move == '8' and new_board[8] == ' ':
            new_board[8] = turn
            work = True
        elif move == '9' and new_board[9] == ' ':
            new_board[9] = turn
            work = True
        else:
            print('请输入正确的位置')
    return new_board

def check_win(board):
    """检查程序是否需要关闭"""
    global active #游戏活动状态标志是全局变量
    global winner #胜利玩家的标志是全局变量
    number = 0 #记录被占用的格子
    for v in board.values():
        if v != ' ':
            number += 1
    if board[7] != ' ' and board[7] == board[8] == board[9]:
        active = False
        winner = turn
    if board[4] != ' ' and board[4] == board[5] == board[6]:
        active = False
        winner = turn
    if board[1] != ' ' and board[1] == board[2] == board[3]:
        active = False
        winner = turn
    if board[7] != ' ' and board[7] == board[4] == board[1]:
        active = False
        winner = turn
    if board[8] != ' ' and board[8] == board[5] == board[2]:
        active = False
        winner = turn
    if board[9] != ' ' and board[9] == board[6] == board[3]:
        active = False
        winner = turn
    if board[7] != ' ' and board[7] == board[5] == board[3]:
        active = False
        winner = turn
    if board[9] != ' ' and board[9] == board[5] == board[1]:
        active = False
        winner = turn
    elif number == 9:
        active = False

def turn_player(piece):
    """更换玩家,改变输入棋子格式"""
    if piece == 'x':
        piece = '0'
    else:
        piece = 'x'
    return piece

"""
下面是程序主控制部分
"""

#创建棋盘,并设置程序活动状态以及默认参数
theBoard = creatBoard()
active = True #游戏初始活动状态
turn = 'x' #执x子的玩家先行
winner = '' #存储胜利玩家的变量

while active:
    printBoard(theBoard) #显示当前的棋盘
    theBoard = nextBoard(theBoard) #用户输入下一步棋子,并生成相应的棋盘
    check_win(theBoard) #检查是否有玩家获胜,或者是否棋盘被占满
    turn = turn_player(turn) #轮换玩家

#下面的代码,显示游戏结束后的棋盘状态。再显示获胜方,或者是平局。
printBoard(theBoard)
if winner != '':
    print(str(winner) + '方获取了胜利')
else:
    print('平局')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值