Stubborn 发表于 2024-1-2 16:35:38

用python实现一个五子棋

嗨,AI助理,帮我用python实现一份井字棋游戏的代码

FishC 发表于 2024-1-2 16:35:58

当然可以!下面是一个简单的五子棋游戏的实现示例:

# 初始化棋盘
board = [[' ']*15 for _ in range(15)]

# 定义棋盘打印函数
def print_board(board):
    for i in range(len(board)):
      print(' '.join(board))

# 判断是否连成五子
def check_win(board, row, col, player):
    # 判断水平方向
    count = 0
    i = col - 4 if col >= 4 else 0
    while i <= col:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1
    i = col + 1
    while i < len(board) and i <= col + 4:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1

    # 判断垂直方向
    count = 0
    i = row - 4 if row >= 4 else 0
    while i <= row:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1
    i = row + 1
    while i < len(board) and i <= row + 4:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1

    # 判断左上到右下方向
    count = 0
    i, j = row - 4 if row >= 4 else 0, col - 4 if col >= 4 else 0
    while i <= row and j <= col:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1
      j += 1
    i, j = row + 1, col + 1
    while i < len(board) and i <= row + 4 and j < len(board) and j <= col + 4:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i += 1
      j += 1

    # 判断右上到左下方向
    count = 0
    i, j = row + 4 if row + 4 < len(board) else len(board) - 1, col - 4 if col >= 4 else 0
    while i >= row and j <= col:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i -= 1
      j += 1
    i, j = row - 1, col + 1
    while i >= 0 and i >= row - 4 and j < len(board) and j <= col + 4:
      if board == player:
            count += 1
            if count == 5:
                return True
      else:
            count = 0
      i -= 1
      j += 1

    return False

# 游戏主循环
player = 'X'
print_board(board)
while True:
    move = input("请玩家 %s 输入落子位置,格式为 行,列:" % player).split(',')
    row, col = int(move), int(move)
   
    if board == ' ':
      board = player
      if check_win(board, row, col, player):
            print("玩家 %s 获胜!" % player)
            break
      player = 'O' if player == 'X' else 'X'
    else:
      print("该位置已有棋子,请重新输入!")
   
    print_board(board)

这个游戏使用命令行进行交互,每次轮到一个玩家输入棋子的坐标。游戏会根据输入的坐标在棋盘上放置对应的棋子,并判断是否有玩家获胜。如果某个玩家连成了五子,游戏结束并宣布获胜者。

希望这可以帮助到你!祝玩得愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

Stubborn 发表于 2024-1-2 16:39:43

FishC 发表于 2024-1-2 16:35
当然可以!下面是一个简单的五子棋游戏的实现示例:




非常抱歉,我需要的是井字棋游戏的代码,帮我实现人机可以吗

FishC 发表于 2024-1-2 16:40:03

Stubborn 发表于 2024-01-02 16:39
非常抱歉,我需要的是井字棋游戏的代码,帮我实现人机 ...

没问题!下面是一个简单的人机对战的井字棋游戏代码:

import random

# 初始化棋盘
board = [' ' for _ in range(9)]

# 定义棋盘打印函数
def print_board(board):
    for i in range(3):
      print(board, '|', board, '|', board)
      print('-' * 9)

# 判断是否获胜
def check_win(board, player):
    # 水平方向判断
    for i in range(0, 9, 3):
      if board == board == board == player:
            return True
   
    # 垂直方向判断
    for i in range(3):
      if board == board == board == player:
            return True
   
    # 对角线判断
    if board == board == board == player or \
       board == board == board == player:
      return True
   
    return False

# 判断是否平局
def check_tie(board):
    return ' ' not in board

# 人类玩家走棋
def player_move(board):
    while True:
      move = input("请输入要下棋的位置(1-9):")
      move = int(move) - 1
      if move >= 0 and move < 9 and board == ' ':
            board = 'X'
            break
      else:
            print("无效的输入,请重新输入!")

# 电脑玩家走棋
def computer_move(board):
    # 随机选择可用的位置
    available_moves =
    move = random.choice(available_moves)
    board = 'O'

# 游戏主循环
def main():
    print("欢迎来到井字棋游戏!")
    print_board(board)

    while True:
      player_move(board)
      print_board(board)

      if check_win(board, 'X'):
            print("你赢了!恭喜!")
            break

      if check_tie(board):
            print("平局!")
            break

      computer_move(board)
      print_board(board)

      if check_win(board, 'O'):
            print("电脑赢了,再接再厉!")
            break

      if check_tie(board):
            print("平局!")
            break

# 运行游戏
main()

在这个游戏中,玩家使用数字1-9来指定棋盘上的位置进行下棋,电脑会随机选择一个可用的位置进行落子。请注意,代码中的电脑策略非常简单,没有太强的智能。你可以根据自己的需求进一步优化策略。祝你玩得开心!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

Stubborn 发表于 2024-1-2 16:41:37

FishC 发表于 2024-1-2 16:40
没问题!下面是一个简单的人机对战的井字棋游戏代码:




我想要井字棋人机厉害一些,可以帮我实现吗

FishC 发表于 2024-1-2 16:43:33

Stubborn 发表于 2024-01-02 16:41
我想要井字棋人机厉害一些,可以帮我实现吗

当然可以!下面是一个稍微智能一些的井字棋人机代码:import random# 初始化棋盘board = # 定义棋盘打印函数def print_board(board):    for i in range(3):      print(board, '|', board, '|', board)      print('-' * 9)# 判断是否获胜def check_win(board, player):    # 水平方向判断    for i in range(0, 9, 3):      if board == board == board == player:            return True      # 垂直方向判断    for i in range(3):      if board == board == board == player:            return True      # 对角线判断    if board == board == board == player or \       board == board == board == player:      return True      return False# 判断是否平局def check_tie(board):    return ' ' not in board# 人类玩家走棋def player_move(board):    while True:      move = input("请输入要下棋的位置(1-9):")      move = int(move) - 1      if move >= 0 and move < 9 and board == ' ':            board = 'X'            break      else:            print("无效的输入,请重新输入!")# 电脑玩家走棋def computer_move(board):    # 尝试赢棋    for move in range(9):      if board == ' ':            board = 'O'            return    # 阻止人类玩家赢棋    for move in range(9):      if board == ' ':            board = 'O'            return    # 随机选择可用的位置    available_moves =   move = random.choice(available_moves)    board = 'O'# 游戏主循环def main():    print("欢迎来到井字棋游戏!")    print_board(board)    while True:      player_move(board)      print_board(board)      if check_win(board, 'X'):            print("你赢了!恭喜!")            break      if check_tie(board):            print("平局!")            break      computer_move(board)      print_board(board)      if check_win(board, 'O'):            print("电脑赢了,再接再厉!")            break      if check_tie(board):            print("平局!")            break# 运行游戏main()这个代码中,电脑会尝试优先赢棋,然后阻止人类玩家赢棋,最后才是随机选择可用位置。这样的策略会使得电脑玩家比较强大一些。祝你玩得愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

Stubborn 发表于 2024-1-2 16:45:46

FishC 发表于 2024-1-2 16:43
当然可以!下面是一个稍微智能一些的井字棋人机代码:import random# 初始化棋盘board = # 定义棋盘打 ...

代码帮我格式化一下谢谢

FishC 发表于 2024-1-2 16:47:08

Stubborn 发表于 2024-01-02 16:45
代码帮我格式化一下谢谢

当然,这里是格式化后的代码:

import random

# 初始化棋盘
board = [' ' for _ in range(9)]

# 定义棋盘打印函数
def print_board():
    for i in range(0, 9, 3):
      print(board, '|', board, '|', board)
      print('-' * 9)

# 判断是否获胜
def check_win(player):
    # 水平方向判断
    for i in range(0, 9, 3):
      if board == board == board == player:
            return True
      
    # 垂直方向判断
    for i in range(3):
      if board == board == board == player:
            return True
   
    # 对角线判断
    if board == board == board == player or \
       board == board == board == player:
      return True
   
    return False

# 判断是否平局
def check_tie():
    return ' ' not in board

# 人类玩家走棋
def player_move():
    while True:
      move = input("请输入要下棋的位置(1-9):")
      move = int(move) - 1
      if move >= 0 and move < 9 and board == ' ':
            board = 'X'
            break
      else:
            print("无效的输入,请重新输入!")

# 电脑玩家走棋
def computer_move():
    # 尝试赢棋
    for move in range(9):
      if board == ' ':
            board = 'O'
            if check_win('O'):
                return
   
    # 阻止人类玩家赢棋
    for move in range(9):
      if board == ' ':
            board = 'O'
            if check_win('X'):
                board = ' '
                return
   
    # 随机选择可用的位置
    available_moves = == ' ']
    move = random.choice(available_moves)
    board = 'O'

# 游戏主循环
def main():
    print("欢迎来到井字棋游戏!")
    print_board()
   
    while True:
      player_move()
      print_board()
      if check_win('X'):
            print("你赢了!恭喜!")
            break
      
      if check_tie():
            print("平局!")
            break
      
      computer_move()
      print_board()
      if check_win('O'):
            print("电脑赢了,再接再厉!")
            break
      
      if check_tie():
            print("平局!")
            break

# 运行游戏
main()

这样应该更加清晰易读。祝你玩得开心!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 用python实现一个五子棋