智能五子棋1

*一、项目需求*

五子棋是一种简单的黑白棋,历史悠久,起源于中国,后传入日本,在日本被称为“连珠”,是一种老少皆宜的益智游戏。

人工智能五子棋系统的目标用户是一切想致力于研究人机对弈算法理论的相关研究者和一切想通过此系统进行五子棋人机对弈游戏的人群。目标用户特点:范围广泛,知识储备门槛低,年龄跨度大,具备操作简单的人机交互界面即可。

我们计划实现人人对弈,人机对战以及机机对弈等三种模式以及一些基本游戏功能。

*二、设备要求*

编译语言:C语言
操作系统:windows 操作系统
开发工具:Microsoft Visual Studio 2019
本次实验是运用Microsoft Visual Studio 软件来进行一次智能五子棋游戏的设计, Microsoft Visual StudioVS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具。Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本。

人工智能五子棋属于人工智能中人机博弈的一种,人工智能应用广泛,人工智能是促进未来人类科技和生活重大改变的一门学科。

*三、项目设计*

本项目主要设计如下:

游戏用户接口:主界面以及基本框架:一共有四个页面,一个主菜单,两个副菜单以及一个棋盘界面。若是选择人人对弈,则调用棋盘,直接进行对弈,若是机器与机器对弈,则根据不同的难度调用不同难度的机器算发进行博弈。若是选择了机器与人的博弈,则会跳转去难度选择的页面,选择了困难之后,会跳转到选择先后手的页面,最后根据人选择的数据调用相应的函数与人进行博弈。
游戏操作规则:左键白子右键黑子。
设计能悔棋操作:即玩家在下棋子后能回到上一步。
提示鼠标的合法点击范围:若点击的位置不是棋盘或者功能键,则会有弹窗提示玩家,玩家需要点击关闭弹窗才能继续游戏。
限制每个棋子落下的规范:不能重复落子,仅能黑白子交替下子,若玩家点错,可触发弹窗提示玩家,玩家必须先关闭弹窗才能继续游戏。
游戏裁判算法:判断各个方向是否有五颗连起来的棋子,只要有一方先走成在在横、竖、斜方向上的五颗同色棋子就能赢得游戏,赢得游戏后,会有弹窗提示哪一方的棋子胜利并重新刷新一次棋盘,使玩家再次进行游戏。
实现算法对战模式:人机对战、人人对战、机机对战。
机器算法:利用估值函数,每下一颗棋子则在其周围加10,活二在其前后各加100,死二则在其为被堵住的地方的另一边加50,活三在其前后加1000,死三则在其为被堵住的地方的另一边加500,活四则在其前后分别加10000,死四则在其为被堵住的地方的另一边加上2000,找出棋盘上价值最大的点,并判断是进攻还是防守,从而使自身的每一步棋子的价值最大化。
*3.1、人机交互界面*

通过鼠标点击调用不同的函数,进而刷新屏幕使之进入不同的界面,让玩家选择自己想要的游戏模式,游戏难度以及先后手,让玩家有更好的游戏体验,为此,我特地添加了悔棋,重新开始,退出游戏等功能,让玩家在玩的过程中拥有更多机会。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yXXzU5bQ-1636549459002)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

图3.1.1 人机交互界面关系流程图

*3.2、系统结构设计*

*3.3、数据结构设计*

人工智能五子棋系统的每一个下棋格点用二维数组a[17][17]表示,数组内容分别为0,1,2代表未落子,黑子,白子。
初始化黑棋与白棋的估值函数表如下。
int Value_black / Value_white[ 17] [ 17] ={

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0},

{0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0},

{0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0},

{0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
以下是我定义的各种函数。

void menu();              //主菜单背景

void Difficulty();           //选择人机难度

void choseFrist();         //选择先后手

void ChessBoard();            //棋盘

void DropChess(MOUSEMSG m);            //下棋

bool Rules(int i, int j, int x);   // 规则(落棋的合法性以及判断输赢)

void Newa();                //重新开始后进行初始化

void Regret(int x, int y);            //悔棋

void DropChess_People();     //人下棋

void Low();           //初级难度

void Medium();         //中级难度

void Low_J();

void Medium_J();

void Judge_ML(int i,int j,int x);            //判断棋盘模型

void Renew_Value_shu(int i,int j,int x,int n);  //更新价值表:竖直方向

void Renew_Value_leftup(int i, int j, int x, int n);   //更新价值表:左上往右下

void Renew_Value_heng(int i, int j, int x, int n);    //更新价值表:水平方向

void Renew_Value_rightup(int i, int j, int x, int n);   //更新价值表:右上到左下

HWND chunchun = GetHWnd();            //窗口弹出;

int flag = 0;                  //限制落棋的顺序以及赢棋之后无法再次落棋

int a[20][20] = { 0 };             //存储数组的二维数组

int level;                    //难度等级

int order = 0;               //顺序——先后手

int close = 0;               //使退出人机的程序。

int e,f,c,d;             //记录悔棋下标。

int level1 = 0;           //机器的

int value_black[17][17] = { 0 };      //黑棋的价值表

int value_white[17][17] = { 0 };        //白棋的价值表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/253568.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】【12.17】746.使用最小花费爬楼梯

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 746. 使用最小花费爬楼梯https://leetcode.cn/problems/min-cost-climbing-stairs/ 2.题目详情 今天的每日一题又…

04_Web框架之Django一

Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…

ASP.NET MVC实战之权限拦截Authorize使用

1&#xff0c;具体的实现方法代码如下 public class CustomAuthorizeAttribute : FilterAttribute, IAuthorizationFilter{/// <summary>/// 如果需要验证权限的时候&#xff0c;就执行进来/// </summary>/// <param name"filterContext"></par…

饥荒Mod 开发(十):制作一把AOE武器

饥荒Mod 开发(九)&#xff1a;物品栏排列 饥荒Mod 开发(十一)&#xff1a;修改物品堆叠 前面的文章介绍了很多基础知识以及如何制作一个物品&#xff0c;这次制作一把武器&#xff0c;装备之后可以用来攻击怪物。 制作武器贴图和动画 1.1 制作贴图。 先准备一张武器的贴图&a…

【23-24 秋学期】NNDL 作业11 LSTM

目录 习题6-4 推导LSTM网络中参数的梯度&#xff0c; 并分析其避免梯度消失的效果 习题6-3P 编程实现下图LSTM运行过程 &#xff08;一&#xff09;numpy实现 &#xff08;二&#xff09;使用nn.LSTMCell实现 &#xff08;三&#xff09; 使用nn.LSTM实现 总结 &#x…

神经网络可以计算任何函数的可视化证明

神经网络可以计算任何函数的可视化证明 对于神经网络&#xff0c;一个显著的事实就是它可以计算任何函数。 如下&#xff1a;不管该函数如何&#xff0c;总有神经网络能够对任何可能的输入x&#xff0c;输出值f&#xff08;x&#xff09; 即使函数有很多输入和输出&#xff0…

vue2入门

vue2官方文档&#xff1a;安装 — Vue.js 1、安装 新建"vue"文件夹——>新建vue1.html 直接用<script>标签引入vue&#xff1a; <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> tips: CDN:一个网络…

uniapp中uni-data-select下拉框组件如何去除边框?

在目录中找到文件夹。 找到下拉框组件文件夹 注释该文件夹以下代码就能实现下拉框不带边框。

前端对接 —— 周末

1.点击校验 点击校验 宇哥 记得过滤 不能校验的数据&#xff08;我后端还要检验吗&#xff1f;&#xff09; 2.前端数据对接 这个可以吗&#xff1f; 这种的可以吗&#xff1f;

uniapp实现地图电子围栏功能

该功能使用uniapp中内置组件map实现 效果图预览&#xff1a; 实现过程&#xff1a; 1.文档&#xff1a; 2.代码&#xff1a; <template><view><map :style"width: 100%; height:screenHeight" :latitude"latitude" :longitude"longit…

免费在线markdown语法编辑器

本地用习惯了Typora&#xff0c;但是上传的图片保存在本地&#xff0c;其他电脑想查看必须连本地的图片也拷贝过去。虽然Typora可以用PicGo保存远程的图片&#xff0c;但电脑离线之后看不到图片&#xff0c;不能接受。所以想找一款在线版的编辑器&#xff0c;方便记笔记。 我之…

二叉树前,中序推后续_中,后续推前序

文章目录 介绍思路例子 介绍 二叉树是由根、左子树、右子树三部分组成。 二叉树的遍历方式又可以分为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历。 前序遍历&#xff1a;根&#xff0c;左子树&#xff0c;右子树 中序遍历&#xff1a;左子树&#xff0c;根&#xff0…

【JVM】4.运行时数据区(程序计数器、虚拟机栈)

文章目录 4.JVM的运行时数据区4.1 程序计数器4.2 Java虚拟机栈4.3 虚拟机栈内存溢出 4.JVM的运行时数据区 4.1 程序计数器 程序计数器&#xff08;PC&#xff09;会记录着下一行字节码指令的地址。执行完当前指令后&#xff0c;PC刷新&#xff0c;JVM的执行引擎根据程序计数器…

饥荒Mod 开发(十一):修改物品堆叠

饥荒Mod 开发(十)&#xff1a;制作一把AOE武器 饥荒Mod 开发(十二)&#xff1a;一键制作 饥荒中物品栏有限&#xff0c;要拾取的物品有很多&#xff0c;经常装不下要忍痛丢掉各种东西&#xff0c;即使可以将物品放在仓库但是使用不方便&#xff0c;所以可以将物品的堆叠个数设…

GitHub入门介绍:从小白到大佬的旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【MySQL】MySQL表的操作-创建查看删除和修改

文章目录 1.创建表2.查看表结构3.修改表4.删除表 1.创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名datatype 表示列的类型…

第7章 排序

前言 在这一章&#xff0c;我们讨论数组元素的排序问题。为简单起见&#xff0c;假设在我们的例子中数组只包含整数&#xff0c;虽然更复杂的结构显然也是可能的。对于本章的大部分内容&#xff0c;我们还假设整个排序工作能够在主存中完成&#xff0c;因此&#xff0c;元素的个…

【TB作品】51单片机,语音出租车计价器

西交大题目 1.语音出租车计价器 一、功能要求: 1.具有可模拟出租车车轮转速传感器的硬件设计,可计量出租车所走的公 里数。 2.显示和语音播报里程、价格和等待红灯或堵车的计时价格: 3.具有等待计时功能 4.具有实时年月日显示和切换功能。 5.操作简单、界面友好。 二、设计建议…

机器学习算法---异常检测

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

计算机网络:自顶向下第八版学习指南笔记和课后实验--运输层

记录一些学习计算机网络:自顶向下的学习笔记和心得 Github地址&#xff0c;欢迎star ⭐️⭐️⭐️⭐️⭐️ 运输层 TCP&#xff1a; 传输控制协议 报文段 UDP&#xff1a; 用户数据包协议 数据报 将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解 将运输层…