





























1、该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读。
2、有的文档阅读时显示本站(www.woc88.com)水印的,下载后是没有本站水印的(仅在线阅读显示),请放心下载。
3、除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑、修改、打印。
4、有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载。
5、该文档为会员上传,下载所得收益全部归上传者所有,若您对文档版权有异议,可联系客服认领,既往收入全部归您。
点未被访问过,那么就访问。
所以整个过程的遍历结果为。
的的遍历过程为。
剪枝方法在上面中提到当预测的深度达到的时候,最坏情况下个,这在目前的些常规平均的机器性能下也需要多秒的时间,这是不能够容忍的。
那么是否有很好的改进技术,去除哪些不必要的节点,并且在剪去了这些点后不影响结果呢答案是肯定的,这种方法就是剪枝。
下面通过图来说明,矩形代表极大层,椭圆代表极小层。
图剪枝从上图可以看出,由于节点的值肯定不大于而节点的值为大于节点,那么目前为止可以很肯定的说节点值定不小于。
所以点的其他子节点无须去访试了几个点,发现时间上大大的减缩了,已经感觉不到时间了,远小于秒时间,取得了我们预期的效果。
后来又尝试了将搜索深度变为时,动态变化的增量放缓惊讶发现大部分情况下,明显的感觉不到延缓但是些点时间有点慢。
同样简单得测试了下,些点大概都不超过秒。
属于正常容忍的范围。
可以很容易的知道,当我们越早的获取到和的值剪的枝就越多基于这样的考虑,我们应该从下的棋子旁边开始搜索这样就有可能达到我们要的效果所以这里我们采用了由中心向外的方向去搜索运行测试下面对系统集成后进行了初步的测试。
网络部分分别运行两个程序实例,当作客服端,当作服务器。
连接成功后提示如下图图端提示和端提示图联机对战图发出悔棋请求图对方同意图在线聊天图输赢判定以上的只是进行了集成的初步测试,各个模块的单元测试都在编写好代码后测试通过的。
严格来说这样的测试很不严谨,不过从图中可以看出本程序网络部分实现了基本功能。
人机部分选择游戏菜单下的人机对战的初级选项,以下中白棋为电脑方。
图具备防守图具备进攻选择中级选项图具备防守图具备进攻选择高级选项图具备防守图具备进攻这个部分主要测试了人机部分,可以很明显的看出每个级别都拥有了基本的攻防功能。
限于篇幅,不能够从大量的实例中提取出可以说明各个等级之间的差别的例子。
不过有点无庸质疑的是,算法的搜索深度加深预测的步数也就越多,也就越智能,理想的状态就是完整搜索全部的步数。
这里将搜索深度分为对应于初级,中级,高级。
从上面的测试中,可以看出两个主要模块基本符合了要求。
其他的没有列出细节部分也通过了测试,第四章总结部分系统总结在第三章节的测试部分,系统已经通过基本的测试。
基本上完成了本次设计的预期目的。
特别是单机部分实现的不同的等级功能,将深度达到的搜索通过优化,使得其响应的时间基本符合了要求网络部分通过派生两个类和。
用于实现客服端和服务端的网络通信,并且程序中均加入了这两个对象,这样这个程序实现了通过不同菜单选项既可作为服务端又可以作为客服端。
整个设计的过程按照软件工程思想进行开发尝试用了面向对象的编程思路,将各个部分进行了抽象。
如类,抽取出了棋盘拥有的属性和操作,在如类,将电脑方抽象成个类,向外部提供人机接口。
不足说明界面设计不够完善美观,常用的些功能应该要放在界面上而不是在菜单里,这样更符合设计。
可能的话增加些背景音乐功能可以增加保存棋局,以便于调用观看。
类定义了过多的信息,把全部细见节不足说明,所以需要进行必要的修补这个函数遵循的原则是己五必填,活四看对方,若对方不可能形成连五,同样必填不是活四也不是死四的话,若对方可形成连五,必堵,这组函数是用于计算,点的各个方向上连续的类型的棋子数,并且将每个方向上的被阻碍的类型,这几个函数是分别用于计算,个棋子在四个方向上的值。
就是对应水平上,度,度,度调用计算。
人机对战中算法人工智能,英文缩写为。
它是研究开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的门新的技术科学。
人工智能是计算机科学的个分支,它企图了解智能的实质,并生产出种新的能以人类智能相似的方式作出反应的智能机器,该领域的研究包括机器人语言识别图像识别自然语言处理和专家系统等。
在该部分我们尽量去模拟人类在下棋中思考的方式,找出种合乎逻辑的规则。
根据我们平常下棋的经验,当放入个棋子时总是尽量的往利于己方的位置也既是攻同时要提防对方使其不能得逞也既是防我们可以用计算机模拟这个过程。
假设我们在棋盘中放入个己方棋子,然后考虑对方最可能下的棋子位置,也就是最有利于对方的点。
我们假设只进行两次的探索,再逐个的比较每个可下棋的点,最后得出最有利于我方的点。
这就是本个系统中所采用的个思路。
对于人说用手工去比较计算是不现实的。
当考虑的深度加深的话甚至无法在有效的时间内实现的。
我们正是利用计算机快速的计算机能力进行这样的笨重检索,就能够在很短的时间内计算完。
下面对算法中所涉及的几个重要概念作下介绍。
极大极小树目前绝大部分的博弈类游戏中的人工算法都采用这种方法。
假设己方为点,对方则为点。
如果当层的节点为奇数时那么就为层,同样为偶数时就为层。
当在层时,该层的值就应该为下个层中的最大个的值。
当在层是,该层的值就应该为它子层的最小的个。
通俗的说就是当轮到我方时,我们就应该选择个最有利于我们的点,预测对方可能下的最有利他方的点相对我方来说就是最坏的点。
这样反复计算下去就能够得到根节点的最大值,这个点也就是我们最佳下棋点。
在计算这个点时可以很明显的看出这是个不断递归的过程,到达叶子节点时根据相关的计算规则算出该值然后向上层不断的返回。
下图中矩形代表极大层,椭圆代表极小层。
图极大极小树深度优先搜索在图论中有两个很重要的遍历的方法,个是深度优先搜索,另外个是广度优先搜索这两个方法的主要区别在于下个节点的选择。
首先选择它的连接节点,若它的下个节点已经全部被遍历过或者不存在的话。
则向上返回到上个节点,在遍其他的未被访问过的点。
很容易想到这要用到堆栈结构,使用个递归来实现。
而则是逐个的遍历它的联接接点,将已经访问过的点放入队列中。
然后再依次取出继续这个过程。
图遍历过程如下首先从点出发访问它的领接点,因为的领接点,均未被访问过,所以点选择当然也可以选择点作为下个要访问的点,点的领接点是,选择下个节点,而的邻接点只有个且未被访问过,就将作为了它下个节点。
这时因为已经没有可访问的邻点,所以向上层返回到,发现也已经没有可访问的点了,继续向上层返回到,由于的邻节的通而提高自无效,需要重新输入如果用户输入密码的时间超过秒般情况下,用户不会超过秒,若用户觉得不便,还可以修改电路将报警秒,若电路连续报警三次,电路将锁定键盘分钟,防止他人的非法操作。
电路由两大部分组成密码锁电路和备用电源,其中设置电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含键盘输入密码修改密码检测开锁电路执行电路报警电路键盘输入次数锁定电路。
方案二采用种是用以为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储声光提示甚至添加遥控控制功能。
其原理如图所示。
单片机矩阵键盘控制输入锁定键盘图单片机控制方案通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后种方案。
本方案采用种是用以为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的端口,及其控制的准确性,实现基本的密码锁功能。
初步设计思路如下输入密码用矩形键盘,包括数字键和功能键。
数码管显示输入密码,用驱动数码管发光显示数码,用控制各位显示器分时进行显示。
用发光二极管代替开锁的电路,发光表示开锁。
输入密码次数超过次,系统报警。
打开电源后,显示器显示,设原始密码为,只要输入此密码便了开门。
这样可预防停电后再来电时无密码可用。
按键,清除显示器为。
欲重新设定密码,先输入密码在案。
输入密码,再按键。
若密码与设定密码相同,则开门。
否则显示器清为。
软件的设计主要包括键盘键值的读取,显示程序,密码比较程序和报警程序。
开锁控制电路掉电存储串口显示电路指示电路延时报警控制电路第章硬件电路设计键盘电路设计使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图。
图矩阵键盘每条水平行线与垂直线列线的交叉处不相通,而是通过个按键来连通,利用这种行列式矩阵结构只需要条行线和条列线,即可组成具有个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下步就要识别哪个按键按下。
对键的识别通常有两种方法种是常用的逐行扫描查询法另种是速度较快的线反转法。
对照图所示的键盘,说明线反转个工作原理。
首先辨别键盘中有无键按下,有单片机口向键盘送全扫描字,然后读入行线状态来判断。
方法是向行线输出全扫描字,把全部列线置为低电平,然后将列线的电平状态读入累加器中。
如果有按键按下,总会有根行线电平被拉至低电平从而使行线不全为。
判断键盘中哪个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是依次给列线送低电平,然后查所有行线状态,如果全为,则所按下的键不在此列如果不全为,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
具体的功能设计如表表按键功能按键键名功能说明键数字点未被访问过,那么就访问。
所以整个过程的遍历结果为。
的的遍历过程为。
剪枝方法在上面中提到当预测的深度达到的时候,最坏情况下个,这在目前的些常规平均的机器性能下也需要多秒的时间,这是不能够容忍的。
那么是否有很好的改进技术,去除哪些不必要的节点,并且在剪去了这些点后不影响结果呢答案是肯定的,这种方法就是剪枝。
下面通过图来说明,矩形代表极大层,椭圆代表极小层。
图剪枝从上图可以看出,由于节点的值肯定不大于而节点的值为大于节点,那么目前为止可以很肯定的说节点值定不小于。
所以点的其他子节点无须去访试了几个点,发现时间上大大的减缩了,已经感觉不到时间了,远小于秒时间,取得了我们预期的效果。
后来又尝试了将搜索深度变为时,动态变化的增量放缓惊讶发现大部分情况下,明显的感觉不到延缓但是些点时间有点慢。
同样简单得测试了下,些点大概都不超过秒。
属于正常容忍的范围。
可以很容易的知道,当我们越早的获取到和的值剪的枝就越多基于这样的考虑,我们应该从下的棋子旁边开始搜索这样就有可能达到我们要的效果所以这里我们采用了由中心向外的方向去搜索运行测试下面对系统集成后进行了初步的测试。
网络部分分别运行两个程序实例,当作客服端,当作服务器。
连接成功后提示如下图图端提示和端提示图联机对战图发出悔棋请求图对方同意图在线聊天图输赢判定以上的只是进行了集成的初步测试,各个模块的单元测试都在编写好代码后测试通过的。
严格来说这样的测试很不严谨,不过从图中可以看出本程序网络部分实现了基本功能。
人机部分选择游戏菜单下的人机对战的初级选项,以下中白棋为电脑方。
图具备防守图具备进攻选择中级选项图具备防守图具备进攻选择高级选项图具备防守图具备进攻这个部分主要测试了人机部分,可以很明显的看出每个级别都拥有了基本的攻防功能。
限于篇幅,不能够从大量的实例中提取出可以说明各个等级之间的差别的例子。
不过有点无庸质疑的是,算法的搜索深度加深预测的步数也就越多,也就越智能,理想的状态就是完整搜索全部的步数。
这里将搜索深度分为对应于初级,中级,高级。
从上面的测试中,可以看出两个主要模块基本符合了要求。
其他的没有列出细节部分也通过了测试,第四章总结部分系统总结在第三章节的测试部分,系统已经通过基本的测试。
基本上完成了本次设计的预期目的。
特别是单机部分实现的不同的等级功能,将深度达到的搜索通过优化,使得其响应的时间基本符合了要求网络部分通过派生两个类和。
用于实现客服端和服务端的网络通信,并且程序中均加入了这两个对象,这样这个程序实现了通过不同菜单选项既可作为服务端又可以作为客服端。
整个设计的过程按照软件工程思想进行开发尝试用了面向对象的编程思路,将各个部分进行了抽象。
如类,抽取出了棋盘拥有的属性和操作,在如类,将电脑方抽象成个类,向外部提供人机接口。
不足说明界面设计不够完善美观,常用的些功能应该要放在界面上而不是在菜单里,这样更符合设计。
可能的话增加些背景音乐功能可以增加保存棋局,以便于调用观看。
类定义了过多的信息,把
