智能五子棋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 };        //白棋的价值表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于《企业数字化平台》

大家好,开始我们《企业数字化平台》系列栏目,首先做一个简短的自我介绍,Duster是本人现在的笔名,曾用笔名尘埃,写了本书《生活新视界》,如果有缘的话,希望您读到他,如果您能读懂&…

Android Stuido报错处理

仅用作报错记录。防止以后出项问题不知如何解决。 报错1 Dependency‘androidx.annotation:xx requires libraries and applications … 需要修改CompileSDKVersion更改为报错中提示的版本 打开项目build.gradle文件,将compileSdk和targetSdk修改为报错中提示的版…

2020 年网络安全应急响应分析报告

2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起,事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…

防篡改、控权限,一键搞定!迅软DLP助您轻松应对企业外发风险

由于电子文档传播性强,政企单位在与客户或合作伙伴分享重要资料时,存在非法篡改和无序传播的风险。因此,为了保护自身利益并确保与外界的安全交流,对外发文件的有效安全管控变得至关重要。 迅软DLP提供了针对外发文件的严格安全管…

OAuth 2.0进阶指南:解锁高级功能的秘密

欢迎来到我的博客,代码的世界里,每一行都是一个故事 OAuth 2.0进阶指南:解锁高级功能的秘密 前言令牌管理与刷新令牌的生命周期:刷新机制:有效管理访问令牌,防止令牌泄漏的方法: 客户端凭证客户…

宝塔Linux:部署His医疗项目通过jar包的方式

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有…

OpenAI发布官方提示工程指南和示例

OpenAI提供了一系列策略和技巧,以帮助用户更有效地使用ChatGPT。这些方法可以单独使用也可以组合使用,以获得更好的效果。官方给出了6 个大提示策略(并给出了具体教程和示例) 主要策略: 1、清晰的指令: 告…

微信小程序校园跑腿系统怎么做,如何做,要做多久

​ 在这个互联网快速发展、信息爆炸的时代,人人都离不开手机,每个人都忙于各种各样的事情,大学生也一样,有忙于学习,忙于考研,忙着赚学分,忙于参加社团,当然也有忙于打游戏的&#x…

快速排序(一)

目录 快速排序(hoare版本) 初级实现 问题改进 中级实现 时空复杂度 高级实现 三数取中 快速排序(hoare版本) 历史背景:快速排序是Hoare于1962年提出的一种基于二叉树思想的交换排序方法 基本思想&#xff1a…

软件测试技术分享| Appium用例录制

下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…

QT作业3

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&#xf…

对Arthas-Trace命令的一次深度剖析,竟发现...

前言:此文仅为笔者学习Arthas源码的一次尝试,不对本文结论负全部责任。 一、背景 笔者在学习arthas这个十分方便的小工具的过程中,发现: 目前据arthas官方解释:因为trace多层是十分消耗资源的,因此trace命…

【期刊出版征稿】2024年艺术、教育和管理国际学术会议(ICAEM2024)

2024年艺术、教育和管理国际学术会议 2024 International Conference on Arts, Education and Management(ICAEM2024) 2024年艺术、教育和管理国际学术会议(ICAEM2024)将于2024年2月02-04日在马来西亚-吉隆坡召开。会议主题主要…

跨境助手:提升跨境电商卖家运营效率的利器

在如今全球化的商业环境中,跨境电商成为越来越多卖家追逐的商机。然而,对于新手卖家来说,跨境电商的复杂性和竞争激烈的市场环境可能会成为入坑的风险。如何降低风险、提高运营效率成为卖家们关注的焦点。而跨境助手作为一款专为跨境电商卖家…

Python Pandas 如何增加/插入一列数据(第5讲)

Python Pandas 如何增加/插入一列数据(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

Python实现冰墩墩

目录 一、运行效果 图片效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.导入需要的库。 2.完成剩余部分代码。 五、项目总结 六、源码获取 一、运行效果 图片效果 二、项目概述 这个项目使用了turtle库绘制了一个编程乐学的Logo。Logo中包含了一个笑脸&#xf…

SpringBoot接入轻量级分布式日志框架GrayLog

1.前言 日志在我们日常开发定位错误,链路错误排查时必不可少,如果我们只有一个服务,我们可以只简单的通过打印的日志文件进行排查定位就可以,但是在分布式服务环境下,多个环境的日志统一收集、展示则成为一个问题。目…

基于CNN+数据增强+残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)+数据集+模型(一)

系列文章目录 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型(一) 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型&#xf…

1U、2U、4U和42U服务器,看完秒懂!

晚上好,我的网工朋友。 服务器是一个很广泛的概念,涵盖了各种类型和规格的计算机,用于提供各种网络和数据服务。 而机架服务器是当前数据中心和专业计算环境中,使用最为广泛的服务器类型之一。 机架式服务器的外形看来不像计算…

C++面试宝典第7题:重载自增自减运算符

题目 编程实现一个自定义类CMyInteger,它重载了前缀和后缀形式的++和--操作符。同时,CMyInteger类还有一个Print成员函数,用于输出内部成员变量的值。完成该类后,下面使用CMyInteger的代码应能够编译通过,并得到与内置整形int相同的效果。 int main() {CMyInteger mi1(10…