智能棋盘的研究与设计
作者 王天睿(辽宁轨道交通职业学院,辽宁 沈阳 110023)
本文引用地址:http://www.amcfsurvey.com/article/201901/397272.htm摘要:本文主要介绍了在不改变棋手弈棋习惯的前提下,将我国传统智力娱乐项目中国象棋与电子技术、单片机应用技术、软件编程技术等相结合,实现信息记录、规则裁决的智能化和自动化。智能棋盘是以单片机技术为依托,合理配备选型,将多个模块整合到一起,运用高科技手段实现棋手弈棋的完全智能化。
智能棋盘系统将改变老式象棋诸多弊端,提高比赛的品味和档次,同时减轻棋手负担,提高对局质量,实现自动采集对局信息发送到采集服务器进行处理的功能。具体包括自动计时、计着子数、语音提示、判断行棋是否符合规则等功能。
该系统是以单片机为核心,利用光电检测技术,具有性能可靠、价格低廉、易于功能扩展等功能,可用于竞技比赛,家庭娱乐。
0 引言
此文以现代传统的中国象棋为背景,为实现中国象棋弈棋的智能化、自动化,主要研究了一种以中国象棋为依托来实现智能棋盘的软硬件设计。
在行棋的过程中,利用光电管进行持续的扫描,根据每个棋子种类码进行判断,根据每个棋子位置码进行定位,并且了解棋手按照交替的方式进行行棋,从而确定棋子的移动方式的。为了确定棋子的移动是否违规,笔者为每一类棋子专门设定了程序。在比赛尚未开始时,就要设置好双方的行棋规定用时,如果在行棋的过程中起手规定时间到,就会被判定为违规,本棋盘规定当棋手落子后,对方必须在100 s内完成行棋(总步数不超过99步)。这样就不用棋手每次走完棋进行人工按压计时(计时器),采用自动化的技术来计算子数,替换到人工岗位,具有全自动功能,极大的节约了比赛时的人工成本。
软件设计主要为行棋程序设计,行棋程序主要由计着子数程序、计时器程序、吃棋程序、走棋程序、各棋子行棋规则判断程序等组成。
软件设计部分要在棋局开始前完成初始化设置,以及棋盘各类棋子的编码设置。开始按键按下后,由主程序不断检测8255所得到的棋盘各位置的变化,根据不同的棋子的变化,转去执行相应的棋子走子或吃子等相关子程序。
行棋程序中包含行棋规则是:①红先黑后;②棋子落定后,不得悔棋;③吃棋拿棋后,不得悔棋。
吃棋时,棋手应该先拿起己方棋子,然后再拿起想要吃的棋子,再将自己的棋子放在被吃棋子的位置上。如“炮”吃“卒”,应该先拿起自己的“炮”,然后去拿起对方的“卒”,最后将自己的“炮”放在对方原来的“卒”的位置上。
在三条规则之中,第三条规则可以进行二选一,为了满足用户使用的需要本程序设定为先拿起自己的棋子去覆盖敌方棋子。
当一方拿起自己的棋子,落在无棋子的位置上时,即为走棋;调用走棋程序,同时要调用棋子行棋规则判断程序,判断是否违规;如违规即报警;如无违规则记录该棋子的位置编码。当一方拿起自己的棋子,再拿起对方的棋子,并将自己的棋子落在该新位置上时,即为吃棋;调用吃棋程序,同时要调用棋子行棋规则判断程序,判断是否违规;如违规即报警;如无违规则记录该棋子的新位置编码。
棋子的类型编码是始终不变的,位置编码是随着行棋的进行而变化的。在开始键按下后,不断检测棋盘数据并与初始值进行比较,直至有变化,即表示有棋子移动。由移动的位置码可知是什么棋子在移动。
软件设计流程图如图1所示。
1 棋盘各点的检测扫描程序
此程序的功能是对棋盘初始值的检测,以及对各棋子位置变化的记录是整个软件设计部分的核心,本部分程序如能顺利完成,其他的软件部分也能迎刃而解。棋子的类型编码是实现设定好的,而位置编码是随着行棋的进行而不断刷新的。在开始键按下后,不断检测棋盘数据并与初始值进行比较,当棋子位置编码发生变化时,即说明有棋手行棋。由移动的位置码可知是什么棋子在移动。
2 8279键盘显示驱动程序
在键盘显示模块中,共有8个数码管,前四个与后四个各分为一组,前两位显示红方棋手的每步行棋剩余时间,三、四位显示红方棋手的着子数,五、六位显示黑方棋手每步行棋剩余时间,七、八位显示黑方棋手的着子数。这样就减轻了裁判员的负担,实现自动判断、计时的功能。该部分程序主要完成对走棋剩余时间的显示,以及走子数的显示。
3 下棋子程序设计
当棋手开始下棋时,下棋使用的程序共分为:走棋程序、吃棋程序、行棋规则。三种程序同时调用。下面以我方走马和走车分别为例进行说明。
3.1 马行棋设计
例如,马的行棋规则为可走日,行走范围为全棋盘。如图2,可以向23456789中八个方向走,落地位置有对方子时可以直接吃掉,而不可向1处走,为蹩马腿。
当棋手走马时,流程图如图3所示。具体地,需要考虑如下情况:
①根据是否仅有一个子动作判断调用走棋程序还是吃棋程序;
②若仅有一个子动作则调用走棋程序;
③再根据行棋规则判断是否符合马的行棋规则,判断方法为横纵坐标中有一项移动两格另一个移动一格,如不符合则报警;
④如果没有犯规记录则自动将马的程序编码及移动位置进行储存;
⑤若有两个棋子位置发生改变,则判定调用吃棋程序,当棋手吃完棋后,再根据行棋规则判断是否符合,如若不符合则自动报警;
⑥如果没有犯规记录则自动将马的程序编码及移动位置进行储存;
⑦同时要注意根据事先设定的程序,吃棋时需要先拿起自己的子再去拿对方的子。
具体判定过程为,先根据马的位置编码判定动作的子为马。然后根据行棋规则调用马的行棋规则,只能走日,即纵坐标移动2,横坐标移动1;或横坐标移动2纵坐标移动为1,如果不符合马的行棋规则则报警,如果符合则判定是否存在蹩马腿现象,存在则报警,如果不存在则继续;最后判定此步为吃棋还是行棋,结束。
3.2 车行棋规则
车走棋时设计程序同理:车的行棋规则较为简单,只能直走,可以横向直走也可以纵向直走前后左右均可走,中间遇到对方子可以直接吃掉,前后左右为对方子可以直接吃掉。
①首先判定车为纵向行走还是横向行走,如果为纵向行走则记录下纵向行走的位置编码进行储存;
②然后再进行判定是行棋还是吃棋,若仅有车一子进行移动则为行棋,调用行棋程序;
③若行棋结束位置还有其他子被替代则为吃棋,调用吃棋程序;
④如果出现横纵坐标都变化、或者都不变化、或其他位置子消失等不符合行棋规则情况出现时则报警。
3.3 炮行棋规则
炮的行棋规则较为特殊,走棋时可以直行,纵横方向皆可。吃棋时中间必须隔一个子;炮可向四个方向移动,也可以吃隔子吃子。这样程序设计时需考虑以下步骤:
①先判断是走棋还是吃棋,判断横纵坐标是否只有其中一个有变化;
②然后判断目标位置是否有子,如果有子则调用吃棋程序,如果没有子则调用走棋程序;
③将走棋的炮坐标和目标位置的子以代码形式储存;
④不符合行棋规则的报警。
4 结论
本次智能棋盘设计,在硬件选用上较为合理,各个芯片均选用市面上经常见到的常用芯片,并且性能稳定,操作简单,方便,整体电路搭配较为完善。
本次设计题目已经实现的功能有:
①行棋违规自动报警。
②自动记忆着子数。
③显示走棋剩余时间等。
由于篇幅的限制笔者删除了棋盘与棋子编码,仅列出了车马炮三种棋子的行棋程序,本课题作为一项智能系统的研究的理论与尝试,与实际应用还有一段差距。随着微电子技术,软件设计技术和传感器技术的发展。此项目也将会有更大的发展空间,和更多的功能完善。
参考文献
[1]徐爱钧.智能化测量控制仪表原理与设计[M].北京:北京航空航天大学出版社.
[2]孙传友,等.感测技术与系统设计.北京:科学出版社, 2004.
[3]戴梅萼,史嘉权.微型计算机技术及应用(4版).北京:清华大学出版社,2001.
[4]马群生,温冬婵,等.微型计算机技术.北京:清华大学出版社,2006.
[5]秦维佳,侯春光,等.C/C++程序设计教程.北京:机械工业出版社,2007.
[6]浦昭邦.光电测试技术.北京:机械工业出版,2004.
[7]马忠梅,等.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2007.
[8]向红.51系列单片机应用与实践教程.北京:北京航空航天大学出版社,2008.
[9]PCI Special Interest Group. PCI Local Bus Specification,1999.
[10]Barry B B.The Intel Microprocessors: 6th ed,2005.
本文来源于科技期刊《电子产品世界》2019年第2期第52页,欢迎您写论文时引用,并注明出处
评论