Page 1 of 3

插入棋谱模块测试

Posted: 2019-09-28 1:53
by wind23
本功能由xsir317同学提供技术支持,在此进行感谢!

目前处于测试阶段,发现有bug欢迎随时提出!

Re: 插入棋谱模块测试

Posted: 2019-09-28 1:53
by wind23
1. 棋谱插入
示例代码:

Code: Select all

[board]h8i9j9k8k7j6i6h7[/board]
2. 带标记的棋谱插入(标记可用大写字母或数字)
示例代码:

Code: Select all

[board]h8h9h6i10i6i9g9g8j11i7i8/k71h102k8Ag6B[/board]

Re: 插入棋谱模块测试

Posted: 2019-09-28 1:55
by TuDou
这个功能好。

Re: 插入棋谱模块测试

Posted: 2019-09-28 6:00
by heihei
没找到这个功能呢,还是说只有发帖可以插入

Re: 插入棋谱模块测试

Posted: 2019-09-28 7:36
by TuDou

Re: 插入棋谱模块测试

Posted: 2019-09-28 7:47
by sun
小写标注

Re: 插入棋谱模块测试

Posted: 2019-09-28 8:33
by xsir317
heihei wrote:
2019-09-28 6:00
没找到这个功能呢,还是说只有发帖可以插入
发帖的时候代码写在 board 方括号标签里面就可以了。 应该会自动解析展示的。

Re: 插入棋谱模块测试

Posted: 2019-09-28 8:53
by xsir317
代码方面的一点小问题:

Code: Select all

function convertsinglepos(pos) {
  if(pos.length < 2 || pos.length > 3) {
    return null;
  }
  var n1 , n2;
  n1 = pos[0].charCodeAt() - 'a'.charCodeAt() + 1;
  n2 = parseInt(pos.substring(1));
  //TODO 这里可以添加对n1 ,n2 取值范围的检查
  return n2.toString(16) + n1.toString(16);
}
convertsinglepos 这个函数没必要去一位一位的截取

第一位是字母,按字母来处理, pos[0].charCodeAt() - 'a'.charCodeAt() + 1 很好没问题

第二位是1到2个数字,截取字符串之后转int 即可。 parseInt(pos.substring(1))

这样代码逻辑更清晰。

Re: 插入棋谱模块测试

Posted: 2019-09-28 9:04
by xsir317

Code: Select all

function convertpos(pos) {
  var ret = '';
  var tmp_str = '';//临时变量,这个也可以改为坐标记录
  for (i = 0; i < pos.length; i ++) {
    //这里检查每个字符的合法性,然后去做转换
	if(pos[i] >= 'a' && pos[i] <= 'o') //是字母
	{
		if(tmp_str)
		{
			ret += convertsinglepos(tmp_str);
		}
		tmp_str = pos[i];
	}
	else //是数字
	{
		tmp_str += pos[i];
	}
  }
  ret += convertsinglepos(tmp_str);
  return ret;
}


convertpos 其实就是负责做个切割。
切割就是遍历一遍字符串,如果遇到字母,就把前面那段扔去转换;
如果遇到数字,就往后拼。

一遍遍历足够了,不用正则一遍,再遍历3次。

Re: 插入棋谱模块测试

Posted: 2019-09-28 9:10
by 李一
如何区分要在h1写11和在h11写1的问题