[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
字符替换已经这么做了,除了判断胜负的没改,其它地方已经没有findstr了..

上面那个特征库已经不适合了,必须重新制作大量精准的特征库..
现在这种模糊特征库,可能会导致棋盘原数据匹配到较低分值的特征,导致评分跟预想的差距很多..

嗯,一次echo棋盘确实可以加快.. 现在的棋盘也还没做好....
或许用替换的方式,将012替换为。".@#", ","替换为"&echo,"的办法来输出。

只是这个for /f %%i 怎么带出变量还是没明白,..

TOP

楼主,针对比题,我再提点高效的方法:用if判断字符串经替换后与原来的是否相同,来代替finstr的查找,把要显示的内容全存到一个变量,一次echo,代替多个set /p,用for /f %%i中的%%i可实现endlocal把值回传,效率是call几倍

[ 本帖最后由 netbenton 于 2011-1-10 11:07 编辑 ]

TOP

听从楼上建议
嗯...主要资源都耗在特征字串匹配这上面..
我试试用字符串替换来检测匹配...
时间减少了一半 =.=,跑一步2-3分钟,72个循环的速度比一个findstr还快一倍..
IF里的CALL 使用跳过代码的办法减少了好几秒。。


在想是不是合并72个字符串到一个字符串上,然后使用按优先级顺序匹配的办法..
这样效率将大大提升,预计<30秒,但是智能大打折扣。

[ 本帖最后由 caruko 于 2011-1-9 15:28 编辑 ]

TOP

效率跟代码设计很有关系,先不说楼主的代码设计如何,单就语法上提几个建议
1、尽量不要反复使用 findstr 或 find 命令,这是狂耗效率的,最好不用。
2、call 命令最好也别使用,由其是在循环中
3、所有的 call set 。。。。 都改用for中转变量
技术问题请到论坛发帖求助!

TOP

原本还想解决人机问题后,通过ipc$共享,使用at命令交换数据,做一个网络版五子棋的,还能支持聊天...

TOP

在这样的代码中,算法优化远比代码优化更重要
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

我是把棋盘上的数据用012来做成字符串,分为横15列15左斜21右斜21,一共72条字符串。
形式如: 001110220100

通过setlocal-endlocal的继承环境,但不改变变量的特性,做到假设在某个位置走了一步棋后,通过判断库中的特征字串,findstr 查出符合的,给予相应分数。包括 横列斜 多种方式匹配,分数相加,最后得出分数最高的坐标。


因此,只要判断库的“匹配字串”跟“分数”设置合理,完全可以做到很智能..
但是下一步棋可以泡几杯茶..

[ 本帖最后由 caruko 于 2011-1-8 22:05 编辑 ]

TOP

回复 3楼 的帖子

终于又有人对人机对战五子棋感兴趣了,希望楼主搞出比我的更高智能的,呵呵

TOP

尝试了一下,打开15个进程来计算评分,每个进程最多处理15个坐标,仍然花了4分钟,单进程也才5分多钟..

cmd的效率,看来是没办法了...

TOP

写这个东西的时候有一个发现..
可以使用 endlocal&exit /b %var% 后来又发现 endlocal &set var=%var%的方式,将LOCAL内的变量带出来.
但是不支持需要扩展的变量!var!

setlocal  endlocal 以及这个小东西,帮我解决了很大的麻烦..
虚拟走棋变的方便多了..

TOP

返回列表