基于VC++的五子棋人机对战游戏设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85706416
资源下载地址:https://download.csdn.net/download/sheziqiong/85706416
一、实验环境和工具:
- Windows7、 VC6.0
二、实验目的和实现:
2.1 禁手判断算法:
注:
基础知识:
对于专业下五子棋的人来说,有禁手才是规则。所以,这里先对“有禁手”进行一下简单介绍: 五子棋中“先手必胜”已经得到了论证,类似“花月定式”和“浦月定式”,很多先手必胜下法虽然需要大量的记忆,但高手确能做到必胜。所以五子棋的规则进行了优化,得到了 “有禁手”五子棋。
长连:在棋盘上的阳线和阴线任意一条线上,形成的 5 个以上同色棋子不间隔的相连。
活四:有两个点可以成五的四
冲四:只有一个点可以成五的四
活三:再走一着可以形成活四的三
活三
长连禁手:
先手下子后,沿其所下棋子坐标点向其八个方向进行搜索,若发现先手所下棋子形成六子或更多相连,即可判为长连禁手。
禁手:
要判断先手所下棋子是否构成三三、四四禁手,只需判断下这一子后是否产生两个或两个以上的活三、冲四或活四即可。
所以归结起来,要正确判断三三、四四禁手就是要正确判断冲四、活四和活三。
活四:
形成活四的只有一种棋型:
此棋型构成活四的条件:左右两空(a,b 点)必须是先手可下的点,也就是在 a,b 点先手下子后都不会构成禁手。
冲四:
形成冲四有两种棋型:
两种棋型构成冲四的条件:中间的空位(即 a 点)必须是黑棋可下的点,也就是在 a 点下子后不会构成禁手
活三:
形成活三的两种棋型:
a 点是关键点,b,c 点可以是边界、无子或非先手棋子,但不能是先手棋子。两种棋型构成活三的条件:a 点必须是先手可下的点,也就是在 a 点下子后不会构成禁手,m,n 两点不用管是否构成禁手,因为当 a 点放入先手子后,不管在 m 点还是 n 点放先手子,就会形成五连,即获胜,不构成禁手。
综上:
要判断一种棋型是否构成冲四、活四或活三,需要在已判断它是可能的冲四、活四或活三的棋型的基础上判断它的关键点是否可落先手棋子,也就是判断关键点是否不会构成新的禁手点,这一步在程序中可以用递归实现
先判断先手所下点是否是冲四、活四或活三,则在此过程中需判断关键点是否也是冲四、活四或活三,故沿先手所下棋子坐标点的八个方向(向上,右上,右,右下,向下,左下,左,左上),进行判断。当发现所记录形成冲四、活四或活三的值大于 1 时,则可推知:禁手;否则可下此点。
2.2 AI 算法实现:
数据结构设计:
int qiju[2][15][15][8][2]={0}; /* 棋型数组*/
注:
:区分白棋和黑棋
:空格位置 Y 轴坐标;[15]:空格位置 X 轴坐标
:区分八个方向
:用于判断边界问题
算法策略分析:
其实策略的分析实际上是对人下棋思路方法的模拟,在不考虑空间和时间的消耗上(虽然现实中需要不断优化它),如果采用相同思维方法上,计算机所计算的步数无疑是超出人所计算的范围,故而提供给计算机的思路和方法是极其重要的。
此程序中 AI 算法的思想实际上是源于极大极小搜索:
先利用 int qiju[2][15][15][8][2]来记录所有空格沿八个方向, 白棋和黑棋所连续相连的个数,并记录边界点的情况。
根据个数多少和边界情况进行评分(即预测下此点对己方获取胜利的概率大小)。
先后找出白棋和黑棋评分最高的点,对于己方来说,若发现对方有所下点比己方评分最高点高时,即下对方评分高的那点;反之,下己方评分最高达点。(因为在下棋时,以进攻为主,故评分机制是当面对己方和对方棋盘型一样是,将己方的评分相对设的高一些,以免错失机会。)
对于有些更容易胜的棋型,单独处理,使之评分相对提高。
实验结果:
判断长连:
判断三三禁手:
判断四四禁手:
人机对战:
资源下载地址:https://download.csdn.net/download/sheziqiong/85706416
资源下载地址:https://download.csdn.net/download/sheziqiong/85706416
基于VC++的五子棋人机对战游戏设计相关推荐
- 完全自制的五子棋人机对战游戏(VC++实现)
五子棋工作文档 1说明: 这个程序在创建初期的时候是有一个写的比较乱的文档的,但是很可惜回学校的时候没有带回来--所以现在赶紧整理一下,不然再过一段时间就忘干净了. 最初这个程序是受老同学所托做的,一 ...
- 基于Python的五子棋人机对战
文章目录 人机对战 计算机算法 源码 运行结果 引用 人机对战 在之前的博文基于tkinter的五子棋游戏中使用tkinter做了一个简单的五子棋游戏,只能实现人人对战,后来想着加上人机对战的功能. ...
- c语言五子棋开题报告,基于VC的五子棋游戏的设计与实现(附答辩记录)
基于VC的五子棋游戏的设计与实现(附答辩记录)(包含选题审批表,任务书,开题报告,中期检查报告,毕业论文12300字,程序) 摘 要:以计算机技术和网络技术为核心的现代网络技术已在现实生活和生产中得以 ...
- C#实现五子棋人机对战的思路与源码分享
前言 业余闲暇时,基于.netframework使用C#语言开发了一个五子棋人机对战的游戏,在此做些整理和分享,先上图. winform版 UI虽然很简洁,却花了些功夫,图形元素全动态生成,毕竟不是美 ...
- java五子棋人机对战_实现简单的人机对战五子棋(实践)
五子棋人机对战实践项目 总的任务和目标 完成一个人机对战的五子棋项目,基本效果如下: 第一部分 Java绘图原理 1. 基本概念 像素,坐标 2. 组件自定义绘图原理 3. Graphic ...
- 五子棋人机对战_10.带人机对战的五子棋程序
今天我们带来一个带人机对战功能的五子棋程序.程序基于前面文章中的框架搭建,新增人机对战的策略.程序基于规则进行决策,不考虑禁手,玩家执黑子先行.棋盘规模采用15乘15,棋盘规模容易扩展,程序棋力中等, ...
- 人工智能 - 五子棋人机对战
人工智能 - 五子棋人机对战 作者: jig 阅读人次: 6635 文章来源:本站原创 发布时间:2007-7-12 网友评论(8)条 原帖及讨论:http://bbs.bc ...
- C语言 AI智能,五子棋 人机对战,人人对战
C语言五子棋,人机对战,人人对战 chunli@Linux:~$ cat main.c # include<stdio.h> # include<string.h> # inc ...
- JAVA1V1人机对战游戏
GameTest public class GameTest {public static void main(String[] args) {//初始化Game youxi = new Game() ...
最新文章
- 深入解析:TRUNCATE TABLE 的内部原理解析与恢复思路
- OSSEC配置文件ossec.conf中添加mysql服务
- 卷积神经网络 卷积的概念
- android html邮件 messagecompose,android email 转发附件丢失问题
- FCKeditor 上传图片和浏览服务器时提示请先登陆的解决办法
- 怎样在电脑上面简单的记账,了解账户收支
- arma模型预测 matlab,MATLAB中ARMA模型预测差分问题
- 《Adobe Flash CS6中文版经典教程》——第1课 Flash CS6快速入门1.1 启动Flash并打开文件...
- 《硅谷钢铁侠》读后感
- 教你如何写初/高级前端简历
- 【原创游戏】迷踪失路——恐怖风格的第一人称迷宫游戏
- HTML点击图片播放音乐
- 做好演讲者的必备条件
- 1.1快速创建spring boot
- 发表论文介绍(计算机类)
- Linux管道到底能有多快?
- 【Python】数理统计理论:常用统计量、经验分布函数
- 2022Java面试心得,35岁的程序员被裁
- 2021年上半年软件设计师下午真题试题(案例分析)及答案
- table属于html标记吗,table标签是什么意思
热门文章
- 《ASV-Subtools 声纹识别实战》课程
- 小结:PCB板材品质,适用范围
- android java 经纬度(国标WGS84/gps84/硬件/谷歌地球卫星,Gcj02/腾讯地图/高德地图,Bd09/百度地图)之间互换
- Mysql rk3399_RK3399 友善NanoPC-T4开发板使用sysfs方法控制status LED状态灯-【申嵌视频-RK3399篇】...
- 商超食品安全溯源系统设计与实现
- 华测GPS使用的一些视屏
- 自动驾驶三大难题:技术成熟度、法规容忍度、成本接受度
- 1075:药房管理(C C++)
- 写给小白的Construct2入门级开发指南
- 星舆科技高精度“定位+地图”,赋能智能网联汽车发展