- 浏览: 5173086 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
这一部分内容基本与React没有关系。判断棋子的死活,比较容易,用种子填充算法来处理。我跟种子填充算法还有些故交,记得上学时,编写挖雷的程序,就用过。
对于围棋死活的判断,要分清块(同色相连的棋),判断整块棋的气,大致的流程如下:
a) 遍历棋子,如果不是空,则记录颜色,作为种子压入栈中(并记录到Map中),如果遍历完成,转g);
b) 如果栈为空,则转e) ;否则转c) ;
c) 从栈弹出一个棋子,找周围四个棋子,如果同色、且未检查过则入栈(并记录到Map中,相连的空记到另一个Map中);
d) 转b) ;
e) 结束种子算法;
f) 转a) ;
g) 结束。
最后得到两个Map,一个是待判断死活的一块棋,一个是这块棋对应的气。如果气等于零,则为死棋。
会下围棋的人都知道,有一种比较特殊的情况,就是一个子放入棋盘后,如果产生两块或更多死棋,那么包含当前步的棋子的棋块,不是死棋,杀了另一方的棋。如果没有看明白,看下面图。编号为1的子放到棋盘上后,会产生两块死棋,此时实际上为黑杀白。
简单试了一下,似乎没有问题。如有问题,欢迎反馈。
2016-12-08:发现两个小问题:气数量为零才为死棋、返回数组中未去掉当前子所在的棋块(如果多块死棋)。
对于围棋死活的判断,要分清块(同色相连的棋),判断整块棋的气,大致的流程如下:
a) 遍历棋子,如果不是空,则记录颜色,作为种子压入栈中(并记录到Map中),如果遍历完成,转g);
b) 如果栈为空,则转e) ;否则转c) ;
c) 从栈弹出一个棋子,找周围四个棋子,如果同色、且未检查过则入栈(并记录到Map中,相连的空记到另一个Map中);
d) 转b) ;
e) 结束种子算法;
f) 转a) ;
g) 结束。
最后得到两个Map,一个是待判断死活的一块棋,一个是这块棋对应的气。如果气等于零,则为死棋。
会下围棋的人都知道,有一种比较特殊的情况,就是一个子放入棋盘后,如果产生两块或更多死棋,那么包含当前步的棋子的棋块,不是死棋,杀了另一方的棋。如果没有看明白,看下面图。编号为1的子放到棋盘上后,会产生两块死棋,此时实际上为黑杀白。
简单试了一下,似乎没有问题。如有问题,欢迎反馈。
2016-12-08:发现两个小问题:气数量为零才为死棋、返回数组中未去掉当前子所在的棋块(如果多块死棋)。
/** * Created by Administrator on 2016-12-08. * http://wallimn.iteye.com */ "use strick" class JudgeDie{ constructor(){ //线数,根据传入的数组长度计算 this.LINE_COUNT=19; } //取相关棋子的下标 //当前棋子 //dir:上右下左,对应于1234,写成数字,便于循环处理 getRelativePiece(index,dir){ var x = index % this.LINE_COUNT; var y = Math.floor( index / this.LINE_COUNT); if (dir===1){//上 if (y-1<0) return null; else return x+(y-1)*this.LINE_COUNT; } else if (dir===2){//右 if (x+1>=this.LINE_COUNT) return null; else return (x+1)+y*this.LINE_COUNT; } else if (dir===3){//下 if (y+1>=this.LINE_COUNT) return null; else return x+(y+1)*this.LINE_COUNT; } else if (dir===4){//左 if (x-1<0) return null; else return (x-1)+y*this.LINE_COUNT; } else{ return null; } } //计算map中key的数量 getKeyCount(map){ var count = 0; for(var k in map){ if(map.hasOwnProperty(k)) count++; } return count; } //取出所有key,仅用于调试 getKeyString(map){ var result = ""; for(var k in map){ if(map.hasOwnProperty(k)) result = result + k+", "; } return result; } //计算死活 //pieces:棋子数组,0:空;1:黑;2:白 //lastId:最后棋子的下标 calc(pieces,lastId){ var stack=[];//种子填充算法的栈 var result = [];//结果 var len = pieces.length;//棋子长度 this.LINE_COUNT = Math.sqrt(len); var checkedMap = {};//检测过棋子的Map var blockMap = null;//保存一块棋的Map var airMap = null;//气Map var color;//当前检测棋子的颜色 var index,relate; for(var i=0; i<len; i++){ //如果当前子为空、或者已检测,则跳过 if (pieces[i]==0 || i.toString() in checkedMap)continue; color = pieces[i]; stack = []; stack.push(i); airMap = {}; checkedMap[i.toString()]=true; //true为随便放入的值,没有任何意义,下同 blockMap = {}; blockMap[i.toString()]=true; while(stack.length!=0){ index = stack.pop(); for (var dir=1; dir<=4; dir++){ relate = this.getRelativePiece(index,dir); if(relate!=null) { //如果相关子的颜色相同、且未检测过 if (pieces[relate] == color && (!(relate.toString() in checkedMap))) { stack.push(relate); checkedMap[relate.toString()] = true; blockMap[relate.toString()] = true; } else if (pieces[relate] == 0) {//如果为空,则为当前检测棋块的气 airMap[relate.toString()] = true; } } } } //console.log("气数量:%d,棋块:%s",this.getKeyCount(airMap),this.getKeyString(blockMap)); //如果当前检测棋块的气=0,则为死棋,加入结果数组 if(this.getKeyCount(airMap)==9) result.push(blockMap); } //有个复杂的情况,就是有时同时会出现两块以上的死棋, //那么如果其中一块包含当前棋子,则不为死棋 var len = result.length; if(len>1 && lastId>=0){ var delidx=-1; for(var i=0; i<len; i++){ if(lastId.toString() in result[i]) { delidx = i; break; } } if (delidx!=-1){//如果死棋块中包含当前子,则该棋块不为死棋 result.splice(delidx,1); } } return result; } } module.exports = new JudgeDie();
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18619编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2455部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3445两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 18111.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7677一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1273我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3267做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1174写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3991大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2376一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7524我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2757@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2087转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3084用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1768element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9798示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6631申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5328最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5295springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10416微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
在本篇“React学习之围棋记谱本制作(七)总结”中,我们将深入探讨如何利用React技术栈创建一个功能完善的围棋记谱本应用。React是Facebook开发的一个用于构建用户界面的JavaScript库,尤其适用于构建单页应用。在...
在本文中,我们将探讨如何利用React技术来创建一个围棋记谱本应用。React是Facebook推出的一个用于构建用户界面的JavaScript库,尤其适用于构建组件化的、交互式的Web应用。在这个项目的第一部分,我们将专注于环境...
在本项目中,“React学习之围棋记谱本制作(四)前端开发初步完成”是一个教程,旨在教授如何使用React框架构建一个围棋记谱本的前端应用。从给出的标签“源码”和“工具”来看,我们可以推断这个教程会涉及实际的...
本React学习手册将深入探讨React的核心概念和实战技巧,帮助你从入门到精通。 首先,React的核心概念包括组件化开发。组件是React的基础单元,可以理解为可复用的代码块,它们像乐高积木一样组合起来构建整个应用。...
React 学习之道 ==================================================
"React学习手册完整版带目录.zip"包含了深入学习React所需的所有资料,包括基本概念、核心原理以及高级技巧。 首先,手册的目录可能会涵盖以下关键知识点: 1. **React基础知识**:介绍React的基本概念,如JSX语法...
这个"react学习课件.rar"文件包含的"react学习课件.docx"文档,很可能是从哔哩哔哩上的一个React教程课程中提取出的学习资料。在React的世界里,有很多关键概念和技术值得深入探讨。 首先,React的核心理念是组件化...
React学习资源汇总.pdf
React学习路线脑图
在深入探讨React技术栈之前,我们首先需要理解什么是React。React是Facebook开发的一款用于构建用户界面的JavaScript库,尤其擅长于构建单页应用程序(SPA)。它主要关注视图层,但也可以与各种库和框架(如Redux、...
React 学习思维脑图,有助于更好的学习react
React入门学习文档 React 是一个用于构建用户界面的 JavaScript 库,是一个数据驱动的 MVVM 模式的框架。学习 React 需要了解其主要特点、JSX 元素渲染、生命周期、组件事件等知识点。 React 介绍 React 是一个...
React中文学习资料提供了丰富的信息和教程,帮助开发者理解React的基本概念、核心原理和编程方法。 在React的学习过程中,首先需要了解的基本要求包括Node.js环境以及npm(Node Package Manager)。Node.js是一个...
元宇宙初探React+Three.js制作3D全景漫游.zip元宇宙初探React+Three.js制作3D全景漫游.zip元宇宙初探React+Three.js制作3D全景漫游.zip元宇宙初探React+Three.js制作3D全景漫游.zip元宇宙初探React+Three.js制作3D...
在React的世界里,进阶之路意味着深入理解其核心概念、最佳实践以及高级技巧。React作为一个流行的JavaScript库,用于构建用户界面,尤其适用于单页应用程序(SPA)。本篇将围绕React的多个关键知识点展开,帮助...
"React 官方学习模板"是ReactJs官方提供的一套教程项目,旨在帮助开发者系统地学习和理解React的基本概念、API以及最佳实践。 这个模板项目,"react-tutorial-master",包含了从基础到进阶的所有教程内容,可以帮助...
react学习资料,react入门到实战,帮助你快速掌握react。
本节笔记将记录 React 学习过程中的关键知识点。 一、React 组件生命周期 React 组件生命周期是指组件从创建到销毁的整个过程。生命周期方法是指在组件生命周期的不同阶段执行的函数。了解生命周期方法可以帮助...
【标题】"weiqi-react"是一个以React技术为核心的网页围棋应用项目,旨在提供一个用户友好的在线围棋对弈平台。React是Facebook开发的JavaScript库,用于构建用户界面,特别是单页应用程序。它采用组件化的方式,...
资源名称:React 学习之道资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。