[Java五子棋小游戏 |
您所在的位置:网站首页 › bcm2711多少纳米 › [Java五子棋小游戏 |
五子棋智能下棋怎么实现的?来揭晓吧
源码连接:Java五子棋小游戏(控制台纯Ai算法) 基本权重计算现在说说五子棋胜算是怎样判定的 这里就说到权重 如果你下棋的位置的权重是 4 那么你就能获得游戏的胜利 这里说位置 1>2>3>4>O 的权重 O 的最大权重是4 如果他在这个位置下棋了 那么他就能获得游戏的胜利 这里的O代表着下棋的位置
像这种情况 其实可以反向查询权重 然后把它加起来 例如图中 1>5> O 的方向 假如后面还有两个棋子 那么下 O 的位置就会获得游戏胜利 我们可以反向取权重 前面权重是2 后面权重是2 加起来正好是4 所以获得游戏胜利 稍后在高级算法详解 权重实现代码这里我自己把之前发的 java代码扣过来了 /* x 和 y 代表坐标 * xx :x方向需要增加的值 * yy :y方向需要增加的值 * * 例如xx = -1 yy= -1 * 代表需要获取(x-1,y-1)的棋子 * * xx = 1 yy= 1 * 代表需要获取(x+1,y+1)的棋子 * * */ /** * 计算权重 * @param x x坐标 * @param y y坐标 * @param xx x方向 * @param yy y方向 * @param size 缓存变量如果当前检测是棋子是你的棋子 * 那么就会保存这个变量继续递归获取下一个位置的权重 * @param c 自己的棋子颜色 * @return 返回计算后的权重 */ private int ishas(int x,int y,int xx,int yy,int size ,char c){ //边缘检测防止超出棋盘位置 if((x==0&&xx==-1)|| (x==15&&xx==1) || (y==0&&yy==-1) || (y== 15&&yy==1)) return size; //如果 if(table[x+xx][y+yy] == c){ return ishas(x+xx,y+yy,xx,yy,size+1,c); } return size; } 计算权重伪代码–如果看着上面的费劲看这个 char table [16][16] ;//棋盘 /* * x 和 y 代表坐标 * xx :x方向需要增加的值 * yy :y方向需要增加的值 * * 例如xx = -1 yy= -1 * 代表需要获取(x-1,y-1)的棋子 * * xx = 1 yy= 1 * 代表需要获取(x+1,y+1)的棋子 * */ 计算权重( x, y, xx, yy ,初始权重 简称 -> 权重 , 你棋子的颜色 简称 -> 颜色){ //边缘检测防止超出棋盘位置 if((x==0&&xx==-1)|| (x==15&&xx==1) || (y==0&&yy==-1) || (y== 15&&yy==1)) return 权重; //不能计算墙以外的 所以直接返回权重 /*上面这句话的意思是 就拿 第一个 (x==0&&xx==-1) 来说: 如果他的横坐标为x 那么 就不能再进行x-1操作了 因为棋盘就这么大 */ //这里假设 xx 和 yy = 1 //如果棋盘里的指定的格子(x+1,y+1)的颜色和你的棋子颜色一样 那么就对那个棋子在进行一次计算权重 if(table[x+xx][y+yy] == 颜色){ return 计算权重( x+xx,y+yy , xx , yy , 权重+1, 颜色);//递归 // x坐标 y坐标 下一个棋子方向 本次计算权重+1 颜色不变 } //如果不等直接把权重的值返回 return 权重; } 游戏运算伪代码这里用伪代码写吧 char table [16][16]; //棋盘 Player p1 = new Player("P1","黑"); //这里就不弄类了 懂啥意思就行 Player.下棋(){ //里面定义的方法 控制台输入 Player p = 获取下棋玩家(轮到谁返回谁); p.下棋() 打印棋盘(); }一个十分简陋的程序就写出来了 ,这就是游戏运行过程 单拿这个代码创建两个玩家 ,可以人对人下棋 Ai是怎么下棋的人与人的PK方法已经知道了 下面就来说说Ai下棋算法思路 还是拿权重的图 源码连接:Java五子棋小游戏(控制台纯Ai算法) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |