python实现井字棋实例

编译环境:PyCharm Community Edition 2022.3.2

代码实现:

import random

# 初始化井字棋棋盘,用列表嵌套列表,row列表表示一行,row列表中(一行中)有三个空格元素,共循环三次(三行)
board = []
for _ in range(3):
    row = []
    for _ in range(3):
        row.append(" ")
    board.append(row)

# 打印井字棋棋盘,row表示一行(一个含三个元素的列表),cell表示一行中的每个元素,在每个元素后面加|,表示井字棋中的竖线,遍历完一行输出------表示横线

def print_board():
    for row in board:
        for cell in row:
            print(cell, end=" | ")
        print("\n---------")

# 判断游戏是否结束
def gameover():
    # 检查横向、纵向和斜线是否有一方胜利
    for i in range(3):
        if board[i][0] == board[i][1] == board[i][2] != " ":   # 检查第i行的元素是否都相同,且不是空格
            return True
        if board[0][i] == board[1][i] == board[2][i] != " ":   # 检查第i列的元素是否都相同且不是空格
            return True
    if board[0][0] == board[1][1] == board[2][2] != " ":  # 检查正对角线
        return True
    if board[0][2] == board[1][1] == board[2][0] != " ":  # 检查反对角线
        return True

    # 检查是否平局
    if all(board[i][j] != " " for i in range(3) for j in range(3)):
        return True
    # 以上都不成立时返回false
    return False

# 用户下棋
def user_move():
    hang = "上中下"
    lie = "一二三"     # 输入两个方位表示用户要下棋的位置,利用字符串的检索来定位
    while True:
        move = input("请输入您的下棋位置(例如:中二):")
        if len(move) == 2 and move[0] in hang and move[1] in lie:   # 合法性检查
            row = hang.index(move[0])   # 将 move【0】(第一个字符)在hang这个字符串中的序列号作为行号在棋盘列表board中定位
            col = lie.index(move[1])    # 将 move【1】(第二个字符)在lie这个字符串中的序列号作为列号在棋盘列表board中定位
            if board[row][col] == " ":  # 当前位置为空时,将此处元素改为0
                board[row][col] = "O"
                break   # break的位置,只有成功移动,才会终止无限循环
            else:
                print("该位置已经有棋子了,请重新输入。")
        else:
            print("请输入合法的位置。")

# 电脑下棋(随机位置)
def computer_move():
    while True:
        row = random.randint(0, 2)
        col = random.randint(0, 2)
        if board[row][col] == " ":
            board[row][col] = "X"
            break

# 游戏主循环
while True:
    print_board()
    user_move()
    if gameover():
        print_board()
        print("游戏结束,您获胜!")
        break

    print_board()
    print("电脑正在思考...")
    computer_move()
    if gameover():
        print_board()
        print("游戏结束,电脑获胜!")
        break
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的井字棋游戏的Python实现: ```python # 定义一个空棋盘 board = [' ' for x in range(10)] # 定义绘制棋盘的函数 def draw_board(board): print(' | |') print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3]) print(' | |') print('-----------') print(' | |') print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6]) print(' | |') print('-----------') print(' | |') print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9]) print(' | |') # 定义玩家选择位置的函数 def player_move(board, player): move = input("请玩家 " + player + " 选择位置(1-9):") move = int(move) if board[move] == ' ': board[move] = player else: print("该位置已经被占用。请重新选择。") player_move(board, player) # 定义判断胜负的函数 def check_win(board, player): if (board[1] == player and board[2] == player and board[3] == player) or \ (board[4] == player and board[5] == player and board[6] == player) or \ (board[7] == player and board[8] == player and board[9] == player) or \ (board[1] == player and board[4] == player and board[7] == player) or \ (board[2] == player and board[5] == player and board[8] == player) or \ (board[3] == player and board[6] == player and board[9] == player) or \ (board[1] == player and board[5] == player and board[9] == player) or \ (board[3] == player and board[5] == player and board[7] == player): return True else: return False # 定义主函数 def main(): draw_board(board) while True: player_move(board, 'X') draw_board(board) if check_win(board, 'X'): print("玩家 X 获胜!") break if ' ' not in board: print("平局!") break player_move(board, 'O') draw_board(board) if check_win(board, 'O'): print("玩家 O 获胜!") break if ' ' not in board: print("平局!") break if __name__ == "__main__": main() ``` 运行完毕后,您可以按照提示选择位置,然后根据游戏规则进行比赛。 ### 回答2: 井字棋是一种双人对弈游戏,游戏盘面是一个3x3的方格,玩家轮流将自己的棋子(通常分为"X"和"O")放置在空方格中。首先连成一条直线的一方获胜,若所有方格都被放置满而没有玩家获胜,则为平局。 以下是用Python实现井字棋游戏的基本过程: 1. 创建一个3x3的矩阵来表示井字棋的棋盘。 2. 设定两个玩家,分别用符号"X"和"O"来表示。 3. 设定一个变量来记录当前玩家。 4. 使用循环来交替让玩家进行移动,直到有一方获胜或者出现平局。 5. 在每个回合开始时,首先打印当前棋盘的状态给玩家。 6. 玩家进行移动,可使用input函数来获取玩家输入的位置。判断该位置是否为空,若为空则在该位置放置当前玩家的棋子。 7. 检查当前棋盘状态,判断是否有玩家获胜或者是否出现平局。 8. 若有玩家获胜或者出现平局,则结束游戏并打印结果。 9. 若无玩家获胜或者平局,交换当前玩家,继续下一回合。 下面是一个简单的代码实现: ```python def print_board(board): for row in board: print(" ".join(row)) def check_win(board): # 检查行 for row in board: if row.count(row[0]) == len(row) and row[0] != ' ': return True # 检查列 for col in range(len(board[0])): if all(board[row][col] == board[0][col] and board[0][col] != ' ' for row in range(len(board))): return True # 检查对角线 if board[0][0] == board[1][1] == board[2][2] != ' ' or board[0][2] == board[1][1] == board[2][0] != ' ': return True return False def is_board_full(board): for row in board: if ' ' in row: return False return True def tictactoe(): board = [[' ' for _ in range(3)] for _ in range(3)] players = ['X', 'O'] current_player = players[0] print("欢迎来到井字棋游戏!") while True: print_board(board) move = input("玩家 {},请输入您的下棋位置(行 列):".format(current_player)) row, col = move.split(' ') row, col = int(row), int(col) if board[row][col] == ' ': board[row][col] = current_player else: print("无效的位置,请重新输入。") continue if check_win(board): print("恭喜玩家 {} 获胜!".format(current_player)) print_board(board) break if is_board_full(board): print("平局!") print_board(board) break current_player = players[(players.index(current_player) + 1) % len(players)] tictactoe() ``` 这是一个简单的井字棋游戏实现,运行后会依次让两个玩家进行移动,直到有玩家获胜或者平局。玩家输入下棋位置时,以空格分隔行和列,比如“0 1”表示在第1行第2列放置棋子。游戏结束后会显示最终的棋盘状态和结果。 ### 回答3: 井字棋是一种经典的策略棋盘游戏,需要两个玩家轮流放置棋子,在3×3的棋盘上以连成一条直线的方式取得胜利。以下是用Python实现井字棋游戏的基本思路: 1. 创建棋盘:首先,我们需要创建一个3×3的二维列表,用来代表棋盘。可以用0表示空,1表示玩家1的棋子,2表示玩家2的棋子。 2. 打印棋盘:编写一个函数,用来打印当前的棋盘状态。可以用"+"表示交叉点,"-"表示水平线,"|"表示竖直线。 3. 玩家落子:编写一个函数,用来接收玩家输入的坐标,并在棋盘上落子。根据轮到玩家1还是玩家2落子,将相应的坐标值更新为1或2。 4. 判断胜负:编写一个函数,用来判断当前棋局是否已经有玩家获胜。我们需要检查所有可能的连线情况,即横向、纵向、对角线共8种情况。如果任意一种情况中出现连续的三个1或2,即可判断该玩家获胜。 5. 游戏循环:在一个while循环中,交替执行玩家落子和判断胜负的操作,直到有玩家获胜或者平局。 6. 补充防守:如果对手已经满足胜利条件接近状态,则采取相应防守措施,尽自己可能阻止对手获胜。 以上是一个基本的井字棋游戏实现的思路,你可以在此基础上进行具体的代码编写和完善。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值