Python实现五子棋

这篇具有很好参考价值的文章主要介绍了Python实现五子棋。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图

Python实现五子棋

核心

我认为这个五子棋核心还是在于二维数组,将实际当中鼠标点击的物理位置转换到棋盘中的逻辑地址,之后便用数组的方法进行操作,例如检测是否获胜,电脑下棋策略等。

class Checkerboard:
    def __init__(self, line_points):
        self._line_points = line_points
        # _ 仅仅是一个循环标志,相当i,j
        # _checkerboard 19*19的二维数组
        self._checkerboard = [[0] * line_points for _ in range(line_points)]

检测

  1. 是否可落子
    def can_drop(self, point):# 判断是否可落子,看这个地方有没有被标记过
        return self._checkerboard[point.Y][point.X] == 0
  1. 是否有输赢
    def _get_count_on_direction(self, point, value, x_offset, y_offset):   #数步数
        count = 1
        ls = []
        for step in range(1, 5):#前进数
            x = point.X + step * x_offset
            y = point.Y + step * y_offset
            if 0 <= x < self._line_points and 0 <= y < self._line_points and self._checkerboard[y][x] == value:
                ls.append((x,y))
                count += 1
            else:
                break
        for step in range(1, 5):#后退数
            x = point.X - step * x_offset
            y = point.Y - step * y_offset
            if 0 <= x < self._line_points and 0 <= y < self._line_points and self._checkerboard[y][x] == value:
                ls.append((x, y))
                count += 1
            else:
                break
        if count==5:
            ls.append((point.X,point.Y))
            # print(ls)
            a =sorted(ls)
            return a  #好像放这里有点多余,但是只是想得到划线的xy
        return count >= 5 #0,1

标记位

每次标记最新下棋的位置即可

    def draw_all(self,checkerboard, AI_x, AI_y):  # 每次都要重新画一次
        for i, row in enumerate(checkerboard.checkerboard):  # 画棋盘上已有的棋子  因为下一次刷新一次,
            for j, cell in enumerate(row):
                if cell == BLACK_CHESSMAN.Value:
                    if j == AI_x and i == AI_y:  # 增加标记位
                        flag = 1
                    else:
                        flag = 0
                    self._draw_chessman(screen, Point(j, i), BLACK_CHESSMAN.Color, flag)
                elif cell == WHITE_CHESSMAN.Value:
                    if j == AI_x and i == AI_y:  # 增加标记位
                        flag = 1
                    else:
                        flag = 0
                    self._draw_chessman(screen, Point(j, i), WHITE_CHESSMAN.Color, flag)

人机对战

电脑下棋

  1. 策略:主要根据一个网上的经验评分表 (效果还挺不错)
  2. 电脑先手,就只需要让电脑随机选取一个位置,并标记二维数组对应的位置。
    def randDrop(self): #随机落子
        x = random.randint(5,13) #选取中间位置
        y = random.randint(5,13)
        point = Point(x,y)
        self._checkerboard[point.Y][point.X] = self._my.Value
        return point

总结

五子棋这个我一开始也是找的别人的代码(毕竟知识学得没有那么牢固),最开始的实现人机对战部分,我在此基础上加入了人人对战,同时加入进入界面(这个界面完全就是ps,没有一点技术),也就是我的人工智能大作业——五子棋,之后便很长一段时间没有再管,直到我发现有评论,还有人收藏,所以决定再优化(对当前所下的棋子做一个标记。(主要针对人机对战部分,电脑下得实在太快了))Python实现五子棋续,主要也是为了回顾之前所学的知识。至于这篇文章主要是加入了可以选择是电脑先手还是人先手(默认白子先手)这个功能。
ps:学海无涯,学无止境。

源码自取,下面是文件目录

Python实现五子棋
自此,五子棋应该暂时告一段落了。Python实现五子棋文章来源地址https://www.toymoban.com/news/detail-456358.html

到了这里,关于Python实现五子棋的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 让电脑变得更聪明——用python实现五子棋游戏

    作为经典的棋类游戏,五子棋深受大众喜爱,但如果仅实现人与人的博弈,那程序很简单,如果要实现人机对战,教会计算机如何战胜人类,那就不是十分容易的事了。本文我们先从简单入手,完成五子棋游戏的基本操作,然后再尝试引入一些实现人工智能的编程方法和技巧

    2024年02月05日
    浏览(33)
  • python项目分享 - 五子棋小游戏设计与实现 (源码)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 五子棋小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年02月03日
    浏览(29)
  • 基于python五子棋的设计与实现(论文+源码)_kaic

    目  录 摘  要 绪  论 一、游戏的需求分析 (一)游戏设计目标 (二)游戏的功能需求 1.可视化模块 2.玩家操作模块 3.胜负判定模块 (三)游戏的性能需求 (四)游戏其它需求 二、五子棋游戏开发的可行性研究 (一)经济可行性研究 (二)社会可行性研究 三、五子棋游

    2024年02月13日
    浏览(23)
  • Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版

    之前学python的时候 写了个游戏来练手 用的是 pygame 没有别的依赖 只用了一两百行的代码就实现了 整体来说功能并不算完整 这个项目是在大学的时候 偶然一个机遇交一个小朋友Python时 小朋友大概10多岁 正在打算上初一 小朋友分非常非常非常聪明!!! 当时给他讲东西 他很

    2024年02月12日
    浏览(26)
  • python实现五子棋-人机对战/人人对战(动图演示+源码分享)

    大家好,我是梦执,对梦执着。希望能和大家共同进步!   五子棋对战-所有文件文末自取 前言 人人对战 动态演示 源码分享 cheackboard.py 人人对战.py 导入模块 设置棋盘和棋子参数 局内字体设置 落子循坏体 画棋盘 画棋子 运行框返回落子坐标 执行文件 人机对战 动态演示

    2023年04月08日
    浏览(39)
  • python五子棋代码最简单的,python五子棋代码能复制

    本篇文章给大家谈谈python五子棋代码红方蓝方,以及python五子棋代码最简单的,希望对各位有所帮助,不要忘了收藏本站喔。 开端 画棋盘 首先肯定是要画出棋盘来,用  pygame  画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了

    2024年03月13日
    浏览(34)
  • python五子棋代码最简单的,python五子棋代码手机版

    大家好,本文将围绕python五子棋代码最简单的展开说明,python五子棋代码手机版是一个很多人都想弄明白的事情,想搞清楚python五子棋代码画棋盘需要先了解以下几个事情。 【实例简介】 【实例截图】 【核心代码】 \\\"\\\"\\\"五子棋之人机对战\\\"\\\"\\\" import sys import random import pygame from

    2024年01月19日
    浏览(30)
  • python五子棋(附代码)

    基于pygame实现五子棋 掌握核心算法,怎么判断是否连成五个以及落子位置的模糊判断 1.只需要判断最后一个棋子周围4个方向(上下,左右,左上右下,右下左上)这些方向棋子的颜色是否和最后一个落子颜色连续一致!(详情看代码) 2.落子位置的模糊判断对下棋的体验感

    2024年02月04日
    浏览(25)
  • python 五子棋 pygame

    自己用python写的五子棋 ,辛辛苦苦写的详细注释,等以后再回来看看自己的思路  用的函数式编程,面向对象不熟练,当时的想法是先通过函数式编程写出来,把思路整理一下, 理清楚过程事件了,再用面向对象重写,也算是再梳理一遍  用了第三方库pygame 有个问题,如果

    2023年04月23日
    浏览(33)
  • Python小游戏:五子棋

    今天主要介绍一下python实现五子棋小游戏,使用pygame模块编写一个五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 然后呢上面代码的运行结果如下: 背景是白色的,当然我们常见的棋盘应该是棕黄色的,于是我们查找颜

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包