python实现井字棋

python实现井字棋


一、代码展示

import random
import numpy


def draw():
    print('\t'*15, back_ground[0][0], back_ground[0][1], back_ground[0][2])
    print('\t'*15, back_ground[1][0], back_ground[1][1], back_ground[1][2])
    print('\t'*15, back_ground[2][0], back_ground[2][1], back_ground[2][2]) 
# 绘制棋盘

def play_turn(i, j):
    print('你的回合')
    i = int(input('请输入行数\n'))
    j = int(input('请输入列数\n'))
    if i < 0 or i > 2 or j < 0 or j > 2:
        print('越界啦!')
        draw()
        play_turn(i, j)
    elif back_ground[i][j] == 'x':
        print('请不要占用ai的棋位,谢谢')
        draw()
        play_turn(i, j)
    elif back_ground[i][j] == 'o':
        print('你已经在这里下过棋了')
        draw()
        play_turn(i, j)

    else:
        print('落子无悔')
        back_ground[i][j] = 'o'
# 玩家下棋

def ai_turn():
    print('ai回合')
    i, j = random.randint(0, 2), random.randint(0, 2)
    while back_ground[i][j] == 'x' or back_ground[i][j] == 'o':
        i, j = random.randint(0, 2), random.randint(0, 2)
    back_ground[i][j] = 'x'
    draw()
# ai下棋

def win_conduct():
    for i in range(3):
        if (back_ground[i:i + 1, :] == 'o').all():
            print('你赢了!')
            return 0
        elif (back_ground[i:i + 1, :] == 'x').all():
            print('ai赢了!')
            return 0
        elif (back_ground[:, i:i + 1] == 'o').all():
            print('你赢了!')
            return 0
        elif (back_ground[:, i:i + 1] == 'x').all():
            print('ai赢了!')
            return 0

    if back_ground[0][0] == back_ground[1][1] == back_ground[2][2] == 'o':
        print('你赢了!')
        return 0
    elif back_ground[0][0] == back_ground[1][1] == back_ground[2][2] == 'x':
        print('ai赢了!')
        return 0
    elif back_ground[0][2] == back_ground[1][1] == back_ground[2][0] == 'o':
        print('你赢了!')
        return 0
    elif back_ground[0][2] == back_ground[1][1] == back_ground[2][0] == 'x':
        print('ai赢了!')
        return 0

    if '_' not in back_ground:
        print('和棋!')
        return 0

    return 1
# 胜利判断

if __name__ == '__main__':
    back_ground = numpy.empty((3, 3), dtype=str)
    for i in range(3):
        for j in range(3):
            back_ground[i][j] = '_'
    draw()

    while win_conduct():
        if win_conduct():
            ai_turn()
        if win_conduct():
            play_turn(i, j)

二、效果展示

1.ai胜利

在这里插入图片描述

2.玩家胜利

在这里插入图片描述

3.和棋

在这里插入图片描述

具体效果请自行运行代码查看.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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. 补充防守:如果对手已经满足胜利条件接近状态,则采取相应防守措施,尽自己可能阻止对手获胜。 以上是一个基本的井字棋游戏实现的思路,你可以在此基础上进行具体的代码编写和完善。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值