Python 五子棋游戏(人人对战人机对战)【含Python源码 MX_006期】

news/2024/7/3 16:40:16

系统简介:

        五子棋是一种双人对弈的策略棋类游戏,玩家轮流在棋盘上落子,目标是通过在水平、垂直或对角线上连成一条直线的方式,最先在棋盘上形成连续的五颗棋子。五子棋的规则相对简单,但是需要玩家在落子过程中进行深思熟虑,以避免对手形成连线,同时寻找机会自己形成连线,在游戏中,玩家轮流选择黑色或白色的棋子,然后在棋盘上落子。通过合理的布局和防守,以及对对手的进攻进行及时的应对,玩家可以在游戏中取得胜利。

在五子棋游戏中,通常有两种主要的对战模式:人人对战和人机对战。

  1. 人人对战:这种模式是最经典的五子棋游戏方式,两名玩家轮流在同一台设备上进行对弈。他们可以坐在一起,或者通过远程连接进行游戏。每位玩家都是根据自己的策略和技巧来下棋,互相竞争,直到其中一方获胜或棋局以和局结束。

  2. 人机对战:在这种模式下,玩家与计算机程序进行对战。计算机程序会模拟人类玩家的行为,具有一定的智能和策略。玩家可以选择不同难度级别的程序来挑战自己,从简单的程序到复杂的深度学习模型,以及其他先进的人工智能算法。

界面图:

人机界面(PVE)

人人界面(PVP)

部分代码:

def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('五子棋')

    font1 = pygame.font.SysFont('SimHei', 36)
    font2 = pygame.font.SysFont('SimHei', 72)
    fwidth, fheight = font2.size('黑方获胜')

    checkerboard = Checkerboard(Line_Points)
    cur_runner = BLACK_CHESSMAN
    winner = None

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_RETURN:
                    if winner is not None:
                        winner = None
                        cur_runner = BLACK_CHESSMAN
                        checkerboard = Checkerboard(Line_Points)
            elif event.type == MOUSEBUTTONDOWN:
                if winner is None:
                    pressed_array = pygame.mouse.get_pressed()
                    if pressed_array[0]:
                        mouse_pos = pygame.mouse.get_pos()
                        click_point = _get_clickpoint(mouse_pos)
                        if click_point is not None:
                            if checkerboard.can_drop(click_point):
                                winner = checkerboard.drop(cur_runner, click_point)
                                if cur_runner == BLACK_CHESSMAN:
                                    cur_runner = WHITE_CHESSMAN
                                else:
                                    cur_runner = BLACK_CHESSMAN
                        else:
                            print('超出棋盘区域')

        # 画棋盘
        _draw_checkerboard(screen)

        # 画棋盘上已有的棋子
        for i, row in enumerate(checkerboard.checkerboard):
            for j, cell in enumerate(row):
                if cell == BLACK_CHESSMAN.Value:
                    _draw_chessman(screen, Point(j, i), BLACK_CHESSMAN.Color)
                elif cell == WHITE_CHESSMAN.Value:
                    _draw_chessman(screen, Point(j, i), WHITE_CHESSMAN.Color)

        _draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20), BLACK_STONE_COLOR)
        _draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20 + Stone_Radius2 * 3), WHITE_STONE_COLOR)

        if winner:
            print_text(screen, font2, (SCREEN_WIDTH - fwidth)//2, (SCREEN_HEIGHT - fheight)//2, winner.Name + '获胜', RED_COLOR)

        if cur_runner == BLACK_CHESSMAN:
            print_text(screen, font1, RIGHT_INFO_POS_X, Start_X, '获胜' if winner else '落子中', BLUE_COLOR)
        else:
            print_text(screen, font1, RIGHT_INFO_POS_X, Start_X + Stone_Radius2 * 3, '获胜' if winner else '落子中', BLUE_COLOR)

        pygame.display.flip()

完整代码:Python 五子棋游戏(人人对战&&人机对战)


http://lihuaxi.xjx100.cn/news/2218132.html

相关文章

高频谐振功放

目录 基本电路原理 高频谐振功放vs.高频谐振小放 高频谐振功放vs.低频功放 功率与效率 计算 基本电路原理 由于加了VBB,基极反偏,拉低了输入信号的直流偏量(如下图中-VBB),加上三极管截至电压VBE的存在,只有一部分…

Sermant标签路由能力在同城双活场景的应用

作者:聂子雄 华为云高级软件工程师 摘要:目前应用上云已成为趋势,用户也对应用在云上的高可靠方案有更高追求,目前同城双活场景作为应用高可靠方案中的一种常见实践方案,对微服务流量提出了数据中心亲和性的要求&…

C语言socket TCP/IP通讯Server/Client程序(Ubuntu Linux 24.04环境)

继上篇文章介绍了Ubuntu Linux 24.04 C语言TCP/IP socket编程基础知识,本文将用C语言在Ubuntu Linux 24.04环境下开发一对使用socket进行TCP/IP通讯的Server/Client程序,实现的功能是: 1. 当client连上server时,显示连接成功的信…

Python 数据持久化:使用 SQLite3 进行简单而强大的数据存储

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 SQLite3是一种轻量级嵌入式数据库引擎,它在Python中被广泛使用。SQLite3通常已经包含在Python标准库中,无需额外安装。你只需导入 s…

522. 最长特殊序列 II

题目 给定字符串列表 strs ,返回其中最长的特殊序列的长度。如果最长特殊序列不存在,返回 -1。 特殊序列定义如下:该序列为某字符串独有的子序列(即不能是其他字符串的子序列)。 字符串 s 的子序列可以通过删去字符…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态,并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势,包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

文档项目:攻坚克难

鉴于交流离心机存在的缺点:转速相对偏差、稳定精度不够高;带负载能力受外界扰动后,波动较大;寿命短,研究所各相关部门成立组成技术攻关团队,齐心协力,攻坚克难,在摸索中突破创新&…

【热】大数据信用报告查询平台哪个比较好?这个平台值得一试!

在当今数字化时代,大数据技术的发展为个人和企业提供了更便捷、精准的信用报告查询服务。选择一个优秀的大数据信用报告查询平台至关重要,它直接影响到您获取信用信息的准确性和全面性。 首先,选择大数据信用报告查询平台时,您可以…