随笔分类 -  C. 中国象棋

高中时喜爱上了象棋游戏,大学时有所提高,以后的水平一直就没什么变化了
摘要:总结一下本次比赛,11轮实际下了8轮,只得了9分,没有保本。家事和单位的事对心态造成了一定影响,再有就是1年多没有下过几盘棋,棋感非常差,惨败也是理所当然,以后看来只能用我写的象棋引擎来打败他们了。 阅读全文
posted @ 2012-10-27 00:02 申龙斌的程序人生 阅读(1243) 评论(0) 推荐(0) 编辑
摘要:关于AlphaBeta剪枝的文章太多,这个方法是所有其它搜索方法的基础,得多花些时间认真地理解。先把基本概念再回顾一遍:节点:在中国象棋中就是一个棋盘的当前局面Board,当然该轮到谁走棋也是确定的。这里的圆形节点表示终止节点,在中国象棋里就是一方被将死的情况(或者到达了搜索的最大深度),后续不会再有着法产生,游戏如果走到这里就会结束。在引擎里通常给红方一个很大的评估值,如+30000,给黑方一个很小的评估值,如-30000,来方便地判断这种结束局面。(胜利局面有稍微不同的表示法,用-30000+层数ply来表示)连线:表示一步着法Move,通过这步着法后,局面发生变化,先后手也要交换。层:通 阅读全文
posted @ 2012-09-20 14:26 申龙斌的程序人生 阅读(68956) 评论(7) 推荐(1) 编辑
摘要:在人工智能的机器博弈中首先学习的就是极小极大值搜索Minimax,有人翻译成Minmax,少写了中间的字母i,感觉意思不够准确。Minimax的含义就是极小化对手的最大利益。维基百科中给出的伪代码如下:http://www.cnblogs.com/pangxiaodong/archive/2011/05/26/2058864.html 加上了中文翻译。function minimax(node, depth) // 指定当前节点和搜索深度 // 如果能得到确定的结果或者深度为零,使用评估函数返回局面得分 if node is a terminal node or depth = 0... 阅读全文
posted @ 2012-09-17 20:14 申龙斌的程序人生 阅读(1678) 评论(0) 推荐(0) 编辑
摘要:这里没有采用Magic Bitboard技术,采用了4个方向扫描最高1位或最低1位的办法,效率虽然比magic bitboard低一点,但代码还是比较容易理解的。occupiedattacks = PRESET_RAY_NORTH[fromPos];blockers = attacks & occupied;9876543210000000000001000000001100100000000000001001000000000000000000000010010110000000000001000000ABCDEFGHI00100000000100000000100000000100 阅读全文
posted @ 2012-09-14 17:19 申龙斌的程序人生 阅读(1302) 评论(0) 推荐(0) 编辑
摘要:国际象棋引擎中有一个著名的perft程序,可以根据某一个盘面,递归分析可生成的着法个数,统计出其中吃子、将军、将死的个数,用这些数据来验证着法生成的正确性。perft的代码很简单,就是一个递归调用:U64 Perft(int depth) { Move move_list[256]; int n_moves, i; U64 nodes = 0; if (depth == 0) return 1; n_moves = MoveGenerator::GenerateAllMoveList(*this, move_list); for (i = 0; ... 阅读全文
posted @ 2012-09-03 09:34 申龙斌的程序人生 阅读(1697) 评论(4) 推荐(0) 编辑
摘要:2012年8月18日至20日,2012年全国大学生计算机博弈大赛暨全国锦标赛在东北大学召开,棋种增加为13种,100多人参加。 阅读全文
posted @ 2012-08-23 17:02 申龙斌的程序人生 阅读(1798) 评论(1) 推荐(0) 编辑
摘要:我自己写的苹果应用程序终于上架了,朋友们多多支持啊!(2012年12月,由于苹果开发账号已经过期了,产品下架了)http://itunes.apple.com/cn/app/xqviewer/id533672399?mt=8&ls=1XQViewer在 iTunes 中查看 用iPhone或iPad扫描该二维码可直接安装XQViewer应用。一款中国象棋棋谱浏览程序,当前只支持PGN格式文件的播放,系统内置了2012和2011年全国象棋甲级联赛的棋谱文件,以后再陆续更新更多的棋谱文件。 版本V1.0功能说明: 1)识别PGN格式的棋谱,当前还不支持注释 ... 阅读全文
posted @ 2012-07-15 11:01 申龙斌的程序人生 阅读(3331) 评论(2) 推荐(0) 编辑
摘要:最后一轮如果赢了,将进入前八名,但我却完全不在状态。 由于对仙人指路布局不熟,第9回合竟然连一马踩双的棋也没看到,丢一子后很快败下阵来。 最后排名十三。 阅读全文
posted @ 2009-09-24 22:52 申龙斌的程序人生 阅读(791) 评论(0) 推荐(0) 编辑
摘要:我执红,第10回合,感觉黑走炮8进1有问题,如走马3进4我不知如何控制局面。 阅读全文
posted @ 2009-09-12 21:59 申龙斌的程序人生 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 我执黑,误算丢一马,最后艰难守和 阅读全文
posted @ 2009-09-12 21:57 申龙斌的程序人生 阅读(560) 评论(0) 推荐(0) 编辑
摘要:我执黑,斗顺炮 第8回合,红进车捉炮是软手,让黑支士后,白白损失2步棋。 后来整个局面除一车能动外,其余全部受控。 阅读全文
posted @ 2009-09-12 21:54 申龙斌的程序人生 阅读(581) 评论(0) 推荐(0) 编辑
摘要:第七轮,我执红,用五七炮开局对屏风马,黑选择右炮过河封车变化,第10回合卒3进1有问题。 第25回合,黑车7退1失误,白丢一马。 阅读全文
posted @ 2009-09-07 22:38 申龙斌的程序人生 阅读(554) 评论(0) 推荐(0) 编辑
摘要:这局我后手走顺炮,红方着法并不紧凑,我把形势弄得比较复杂,第13回合时,随手吃炮酿成大错,使自己的左翼受到猛烈的攻击。 阅读全文
posted @ 2009-09-06 22:59 申龙斌的程序人生 阅读(537) 评论(0) 推荐(0) 编辑
摘要:这盘我执红,中炮开局,对方走右三步虎,我以前还没有遇到过,也没有多想,后来我主动缷掉中炮后,形势落后。 不过兑掉双车后,对方竟然不会走残棋,在一阵混战中,他失误被我抽掉了马。 阅读全文
posted @ 2009-09-06 22:53 申龙斌的程序人生 阅读(699) 评论(1) 推荐(0) 编辑
摘要:这盘棋我执黑,对方对顺炮不熟,为了吃子,但左侧门户大开,很快我就得回失子,拿下此局。 阅读全文
posted @ 2009-09-06 22:46 申龙斌的程序人生 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 这盘棋状态极差,感觉对方的反宫马有弱点,想强攻,反而被踩双,心理上彻底崩溃。 实际上踩双后,还是有机会守和的。 阅读全文
posted @ 2009-09-06 22:43 申龙斌的程序人生 阅读(431) 评论(0) 推荐(0) 编辑
摘要:第二轮,我执红,中炮对单提马,第7回合走兵三进一应该也不错。 第10回合,补士稍缓点,应直接马三进四,或兵一进一也不错。 第16回合,黑走卒5进1也随手,不然此时已经反先。 第27回合,我当时感觉是优势,但找不到进攻路线,为了防止闷宫,先下了士,缓着。应走车六平八,还有先手。 第28回合,走兵七进一时机不成熟。 第30回合,随手马三进五,败着,弃马不成杀。 阅读全文
posted @ 2009-09-03 22:33 申龙斌的程序人生 阅读(481) 评论(0) 推荐(0) 编辑
摘要:许久没有参加比较正式的象棋比赛了,在网上下棋养成了随手棋的坏毛病。2009年6月10日第一轮还是蛮幸运的,我执黑,用顺炮开局。红方第4回合用稳健的士角炮,我在第6回合走过河车感觉有点急,此时可能走车1平2出动大子为好。第7回合进炮与前面的进车有点矛盾,并使已方的双马受到攻击,此时卒7进1可能更好。第10回合走窝心马也是无奈,但后来想跳出来时,就落了很大的后手。第16回合时,黑方窝心马出不来,3卒也... 阅读全文
posted @ 2009-08-29 14:12 申龙斌的程序人生 阅读(679) 评论(6) 推荐(0) 编辑