鱼C论坛

 找回密码
 立即注册
查看: 297|回复: 9

[已解决]求一份五子棋源码,有AI对战的那种

[复制链接]
发表于 2024-8-8 17:04:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求一份五子棋源码,有AI对战的那种
最佳答案
2024-8-8 17:09:14
你先看看这个大神的?
https://github.com/sgsx11/Gobang
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-8 17:06:33 | 显示全部楼层
你可以在论坛搜一搜,不知道有没有你想要的。

好比 支持联机对战的五子棋小游戏
https://fishc.com.cn/thread-156157-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 17:09:14 | 显示全部楼层    本楼为最佳答案   
你先看看这个大神的?
https://github.com/sgsx11/Gobang
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 17:10:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-8 17:16:17 | 显示全部楼层
某一个“天” 发表于 2024-8-8 17:09
你先看看这个大神的?
https://github.com/sgsx11/Gobang

阔以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 17:19:53 | 显示全部楼层
好的,既然你想要一份可以和AI对战的五子棋源码,我就来给你一个简单的实现思路和代码示例。

先说一下,五子棋其实就是在一个棋盘上,两个玩家轮流下棋。谁先在横、竖或斜方向上连成五个棋子,谁就赢了!我们可以使用简单的算法让计算机“思考”,比如最基本的Minimax算法。

下面是一个用Python写的简单五子棋AI对战的示例:
import numpy as np

# 棋盘大小
BOARD_SIZE = 15

class Gobang:
    def __init__(self):
        self.board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=int)  # 0: 空,1: 黑子,2: 白子
        self.current_player = 1  # 1: 黑子先行

    def print_board(self):
        for row in self.board:
            print(' '.join(['X' if x == 1 else 'O' if x == 2 else '.' for x in row]))
        print()

    def is_winner(self, player):
        # 检查横向、纵向和两个斜向
        for x in range(BOARD_SIZE):
            for y in range(BOARD_SIZE):
                if self.board[x][y] == player:
                    if self.check_line(x, y, player, 1, 0) or \
                       self.check_line(x, y, player, 0, 1) or \
                       self.check_line(x, y, player, 1, 1) or \
                       self.check_line(x, y, player, 1, -1):
                        return True
        return False

    def check_line(self, x, y, player, dx, dy):
        count = 0
        for _ in range(5):
            if 0 <= x < BOARD_SIZE and 0 <= y < BOARD_SIZE and self.board[x][y] == player:
                count += 1
            else:
                break
            x += dx
            y += dy
        return count >= 5

    def place_piece(self, x, y):
        if self.board[x][y] == 0:
            self.board[x][y] = self.current_player
            if self.is_winner(self.current_player):
                print(f'玩家 {self.current_player} 赢了!')
            self.current_player = 2 if self.current_player == 1 else 1  # 切换玩家

    def ai_move(self):
        # 简单的AI,只在第一个空位落子
        for x in range(BOARD_SIZE):
            for y in range(BOARD_SIZE):
                if self.board[x][y] == 0:
                    self.place_piece(x, y)
                    return

def main():
    game = Gobang()
    while True:
        game.print_board()
        if game.current_player == 1:
            x, y = map(int, input("请输入你的坐标 (x y): ").split())
            game.place_piece(x, y)
        else:
            print("AI 在下棋...")
            game.ai_move()

if __name__ == "__main__":
    main()

### 简单解释:
- 这个代码定义了一个`Gobang`类来管理棋盘和游戏逻辑。
- `print_board`方法用于打印当前的棋盘状态。
- `is_winner`方法检查是否有玩家胜利。
- `place_piece`方法用于放置棋子并切换玩家。
- AI策略非常简单,它只是找第一个空的位置下棋。

你可以运行这个脚本,在命令行输入棋子的坐标(例如 "7 7",代表在第7行第7列),然后AI会在空位置落子。虽然这个AI不太聪明,但至少可以帮你打发时间!

希望这个代码对你有帮助,让你在五子棋的世界中驰骋!如果需要更复杂的AI逻辑,可以尝试minimax算法结合剪枝技术,但这已经是另一个故事啦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 17:27:17 | 显示全部楼层
楼主不回人是什么鬼

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-8 17:30:18 | 显示全部楼层
sfqxx 发表于 2024-8-8 17:27
楼主不回人是什么鬼

那个有看过了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 17:33:03 | 显示全部楼层
Stubborn 发表于 2024-8-8 17:30
那个有看过了,谢谢

O
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 19:08:32 | 显示全部楼层

我这几天有事,过一周左右再给你源码,你先参考一下我发那个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表