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实现五子棋游戏

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

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

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

    python项目分享 - 五子棋小游戏设计与实现 (源码)

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

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

    基于python五子棋的设计与实现(论文+源码)_kaic

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

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

    Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版

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

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

    python实现五子棋-人机对战/人人对战(动图演示+源码分享)

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

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

    python五子棋代码最简单的,python五子棋代码能复制

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

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

    python五子棋代码最简单的,python五子棋代码手机版

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

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

    python五子棋(附代码)

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

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

    python 五子棋 pygame

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

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

    Python小游戏:五子棋

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

    2024年02月09日
    浏览(12)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包