C++
文章平均质量分 71
Luis
简单最好
展开
-
中国象棋软件-引擎实现(一)概述
2005年6月我系第二批科技小组的项目正式确定为实现一款中国象棋对弈软件。基本功能包括人机对战、网络对战。我负责开发人机对战的引擎部分,也就是让计算机下棋。经过了暑假整整两个月的学习与实践,我终于初步完成了程序,虽然电脑的下棋水平实在不敢恭维,但好歹也是我心血所成,所以就苟且将其命名为scCChess1.0版本,整理一下发到blog上来。(本程序在8月底就完工了,之所以现在才贴上来是因为转载 2009-05-12 22:20:00 · 4291 阅读 · 0 评论 -
中国象棋软件-引擎实现(二)棋局表示
对于棋盘的表示当前比较先进的思想是“位棋盘”。“位棋盘”用于国际象棋非常便捷,因为国际象棋的棋盘正好有64个格子,可以将一个棋盘的信息用一个64位的变量来表示。其基本思想就是用位上的值是1或0来表示棋子在棋盘相应位置上的存在与否,这样做的好处是可以通过位操作运算来加快局面评估和着法生成的速度。当用于中国象棋时需要进行拼凑以表示中国象棋棋盘的90个格子……由于考虑到本人目前水平精力均着转载 2009-05-12 22:34:00 · 2526 阅读 · 0 评论 -
中国象棋软件-引擎实现(三)着法生成
我们的程序需要让电脑能够在轮到它走子的时候执行一个它认为对它最有利的着法,那前提就是它要有诸多(也可能是唯一)可供选择的着法,提供所有可选着法的“清单”就是我们的着法生成器所要完成的。之后用搜索函数来搜索“清单”,并用局面评估函数来逐一打分,最后就可以选择“最佳”着法并实施了。在着法生成器中,我采用的基本思想就是遍历整个棋盘(一个接一个地看棋盘上的每个位置点),当发现有当前下棋方的棋转载 2009-05-12 22:37:00 · 3224 阅读 · 0 评论 -
中国象棋软件-引擎实现(五)历史启发及着法排序
既然Alpha-Beta搜索算法是在“最大-最小”的基础上引入“树的裁剪”的思想以期提高效率,那么它的效率就取决于树的结构——如果搜索了没多久就发现可以“裁剪”了,那么需要分析的工作量将大大减少,效率自然也就大大提高;而如果直到分析了所有的可能性之后才能作出“裁剪”判断,那此时“裁剪”也已经失去它原有的价值(因为你已经分析了所有情况)。因而,要想保证Alpha-Beta搜索算法的效率就需转载 2009-05-12 22:40:00 · 3307 阅读 · 0 评论 -
中国象棋软件-引擎实现(七)测试程序
之前我们已经讲了实现一个中国象棋软件的所有要素,本篇我们只是粗略地建一个工程再添加一点文件使得我们能看到程序的运行情况如何。在界面完成之前,我先建了一个Win32控制台项目(学生朋友们对这个最熟悉也最容易理解)。根据前面所讲的我们已经有了CChessDef.h CChessMove.h CChessSearch.h HistoryHeuristic.h SortMove.h CChess转载 2009-05-12 22:43:00 · 2328 阅读 · 0 评论 -
中国象棋软件-引擎实现(四)搜索算法
对于棋类软件的搜索算法经前人的努力已形成了较为成熟的Alpha-Beta搜索算法以及其它一些辅助增强算法。所以小生在自己的程序中直接借鉴了Alpha-Beta搜索算法并辅以了历史启发。对此两者王小春的《PC 游戏编程(人机博弈)》和ElephantBoard的主页 http://www.elephantbase.net/上都有非常详细的介绍,所以这里我只简单介绍一下算法的主体思想:首转载 2009-05-12 22:39:00 · 6995 阅读 · 1 评论 -
File Header文件头,通过检查文件头来判断文件类型
<br />各种类型文件头<br />由这些文件头即使文件后缀被乱改也可以通过查看二进制文件查出文件的匹配格式,当然这就是一些播放器识别文件的方法<br />1、从Ultra-edit-32中提取出来的<br /><br />JPEG (jpg),文件头:FFD8FF <br />PNG (png),文件头:89504E47 <br />GIF (gif),文件头:47494638 <br />TIFF (tif),文件头:49492A00 <br />Windows Bitmap (bmp),文件头:42转载 2010-07-12 19:03:00 · 2500 阅读 · 0 评论 -
TCallBack
<br /><br />class TCallBack<br />{<br />public:<br />inline TCallBack();<br />inline TCallBack(TInt (*aFunction)(TAny* aPtr));<br />inline TCallBack(TInt (*aFunction)(TAny* aPtr),TAny* aPtr);<br />inline TInt CallBack() const;<br />public:<br />TInt (*iFun原创 2010-06-18 19:07:00 · 447 阅读 · 0 评论 -
C++类对应的内存结构
提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。 提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClassA objA,s转载 2012-03-09 16:00:29 · 142 阅读 · 0 评论