使用vb.net实现五子棋的人工智能五子棋的AI构想

2023-11-18

                    五子棋的人工智能

                                                          ———— 利用策略类AIvb.net实现五子棋

                                                                                    作者:张宇

                                                        引言

              人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术,AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。

              策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。下面我们先介绍一下五子棋的AI构想。

                                                 第一部分       五子棋的AI构想

              有句话叫“当局者迷,旁观者清。”,但这句话在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率,也就是说,一个完整的五子棋的AI构想必须:1,能够知道所有的获胜组合,2,建立和使用获胜表,3,设定获胜的分数,4,使电脑具有攻击和防守的能力。

一,求五子棋的获胜组合

在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得

获胜组合的总数。我们假定当前的棋盘为10*10

              1),计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60

              2),计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60

              3),计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+5+4+3+2+1*2=36

              4),计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+5+4+3+2+1*2=36

              这样所有的获胜组合数为:60+60+36+36=192

二,建立和使用获胜表

              我们已经计算出了一个10*10

第二部分       使用vb.net编写五子棋

一,编写前的准备:

1,  用计算机的思想描述整个下棋的过程。

考虑步骤:

1)为了简便我们可以先让电脑先走第一步棋,电脑每走一步就会封掉许多玩家的获胜可能情况。

2)当玩家走棋的时候我们首先应该考虑玩家走棋的合法性。

3)如果合法,那么玩家也会封掉许多电脑的获胜的可能情况。

4)电脑的思考路径:首先判断当前玩家和电脑的所有获胜组合是否需要进行加强赋值,

是进行加强赋值,否则进行普通的赋值。

5)比较当前玩家和电脑谁的分值最大。将分值最大的点作为电脑的下一步走法。

2,  利用vb.net窗体和图形工具建立五子棋的棋盘界面。

1)添加一个picturebox控件。

              作用:使用picturebox控件绘制棋子和棋盘

2)添加一个label控件。

              作用:显示当前的获胜标志,也就是当某一方获胜或和棋时显示此标签。

3)添加一个mainmenu控件。

              作用:控制游戏的开始或结束。

4)添加一个mediaplay组件。

              作用:使程序可以播放音乐。

3,设置整体框价

       我们采取10*10的棋盘,为主要的平台。利用数组定义整个棋盘桌面,利用数组定义获胜组合以及获胜标志等。

二,声明全局数组和变量

定义虚拟桌面:

Dim table(9, 9) As Integer

定义当前玩家桌面空格的分数:

Dim pscore(9, 9) As Integer

定义当前电脑桌面空格的分数:

Dim cscore(9, 9) As Integer

定义玩家的获胜组合:

Dim pwin( 9, 9, 19 1) As Boolean

定义电脑的获胜组合:

Dim cwin( 9, 9, 19 1) As Boolean

定义玩家的获胜组合标志:

Dim pflag(191) As Boolean

定义电脑的获胜组合标志:

Dim cflag(191) As Boolean

定义游戏有效标志:

Dim theplayflag As Boolean

三,初始化游戏

    '*****************************************************************************

    '** 模块名称:  initplayenvironment

    '**

    '** 描述:        此函数主要功能如下:

    '**                 1. 设置背景音乐。

    '**                 2. 设置游戏状态有效。

    '**                 3. 初始化游戏状态标签。

    '**                 4. 直接指定电脑的第一步走法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用vb.net实现五子棋的人工智能五子棋的AI构想 的相关文章

随机推荐

  • linux下libpcap抓包分析

    linux下libpcap抓包分析 一 首先下载libpcap包http www tcpdump org latest release 然后安装 安装完成后进入安装根目录的tests文件夹 编译运行findalldevstest c 编译时
  • 实现mnist手写数字识别(第一周)

    本文为 365天深度学习训练营 中的学习记录博客 参考文章 365天深度学习训练营 第P1周 实现mnist手写数字识别 Pytorch实战 第P1周 实现mnist手写数字识别 qq com 原作者 K同学啊 接辅导 项目定制 我的环境
  • 使用codestriker搭建代码评审平台

    codestriker是用perl语言开发的 可以使用apache cgi进行访问的代码评审web站点 搭建过程如下 1 yum install perl 2 yum install highlight 3 配置codestriker co
  • k8s部署minio

    安装krew插件 官网地址 https krew sigs k8s io docs user guide setup install set x cd mktemp d OS uname tr upper lower
  • 图论算法<三>:判断有向图中是否有存在循环 ,以及环的个数和各个环中的元素

    1 目的 判断有向图中是否有存在循环 以及环的个数和各个环中的元素 2 示例效果 2 1 原始数据 路线起终点整理如下 共计12个顶点 19条边 起点 终点 1 最后的1代表起点终点是连通的 起点 终点 1 2 4 1 起点 终点 1 9
  • 深度学习理论及运用(三)Deep feedforward network

    转化成非线性 1 RBF径向基函数 2 利用sift特征以及K means 3 用数据去训练 举例 异或门 使用非线性运算 用图来表示实现线性可分的过程 目的 优化目标函数 Cost Functions 目标函数 交叉熵 公式前加负号转化为
  • Mybatis-Plus&&Druid多数据源配置

    多数据源配置思路 yml中配置多个数据源 通过AOP自动切换不同的数据源 配合Mybatis plus使用 yml配置 spring datasource druid db1 url jdbc mysql 10 168 1 118 3306
  • JPA对象的四种状态

    JPA对象的四种状态 1 瞬时状态 Transient 与数据库没有对应 跟Session没有关联 一般是新new出的对象 2 持久化状态 Persist 对象再Session的管理之中 最终会有对应的数据记录 特点 a 有OID 唯一标示
  • keyshot环境素材文件_做设计,用keyshot简单6步渲染出满意效果图,上手容易你也学得会...

    点击上方 机械设计一点通 关注我们 每天学习一个机械设计相关知识点 KeyShot是一个完全基于CPU为三维数据进行渲染和动画操作的独立渲染器 广泛用于高精度图像的实时呈现 为设计师 工程师和CG专业人士轻松地创建逼真的图像和三维模型动画提
  • python学习笔记---高级特性【廖雪峰】

    高级特性 切片 Slice 对应上面的问题 取前3个元素 用一行代码就可以完成切片 gt gt gt L 0 3 Michael Sarah Tracy L 0 3 表示 从索引0开始取 直到索引3为止 但不包括索引3 即索引0 1 2 正
  • 用c++编写网络爬虫

    include
  • el-date-picker时间选择器设置可选范围当前时间的六个月内

    el date picker时间选择器
  • Vue3快速上手

    Vue3快速上手 1 Vue3简介 2020年9月18日 Vue js发布3 0版本 代号 One Piece 海贼王 耗时2年多 2600 次提交 30 个RFC 600 次PR 99位贡献者 github上的tags地址 https g
  • 三分钟看懂神经网络机器翻译

    神经网络机器翻译 NMT 已成为本地化行业中最热门的话题之一 与以往基于统计的机器翻译 SMT 相比 可以使翻译质量提升 30 同时解决了远距离语言对的复杂性问题 如中文到英语 日语到英语等 SDL 的一项近期调查显示 61 的受访者认为机
  • Dex文件加载以及类加载流程

    Dex文件加载以及类加载流程 安卓源码连接 http androidxref com 4 4 4 r1 app在启动的过程中创建了PathClassLoader加载dex文件 那么我们跟进PathClassLoader libcore da
  • 2022-2027年中国金融市场规模现状及投资规划建议报告

    报告类型 产业研究 报告格式 电子 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院重磅推出 对中国金融行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及
  • Springboot配置双数据源

    Springboot配置双数据源 数据库相关信息 yml相关配置 单数据源与双数据源进行对比 数据源配置 Mysql spring datasource 单数据源 需要删除双数据源相关配置文件 注意是url url jdbc mysql l
  • 面试官问 Vue 性能优化,我该怎么回答

    前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术 帮我们处理了前端开发中最脏最累的 DOM 操作部分 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM 但 Vue 项目中仍然存在项目首屏优化 Webpack 编译配置优
  • DPC_WATCHDOG_VIOLATION蓝屏分析

    https blog csdn net xiangbaohui article details 104849967 DPC WATCHDOG VIOLATION蓝屏分析 1 背景 今天在我们客户的电脑上面出现了一个蓝屏 并且反馈蓝屏码很奇怪
  • 使用vb.net实现五子棋的人工智能五子棋的AI构想

    五子棋的人工智能 利用策略类AI和vb net实现五子棋 作者 张宇 引言 人工智能也就是所谓的AI Artificial Intelligence 它是一门很抽象的技术 AI程序的编写不需要依