智能棋盤(pán)的研究與設計
作者 王天睿(遼寧軌道交通職業(yè)學(xué)院,遼寧 沈陽(yáng) 110023)
本文引用地址:http://dyxdggzs.com/article/201901/397272.htm摘要:本文主要介紹了在不改變棋手弈棋習慣的前提下,將我國傳統智力娛樂(lè )項目中國象棋與電子技術(shù)、單片機應用技術(shù)、軟件編程技術(shù)等相結合,實(shí)現信息記錄、規則裁決的智能化和自動(dòng)化。智能棋盤(pán)是以單片機技術(shù)為依托,合理配備選型,將多個(gè)模塊整合到一起,運用高科技手段實(shí)現棋手弈棋的完全智能化。
智能棋盤(pán)系統將改變老式象棋諸多弊端,提高比賽的品味和檔次,同時(shí)減輕棋手負擔,提高對局質(zhì)量,實(shí)現自動(dòng)采集對局信息發(fā)送到采集服務(wù)器進(jìn)行處理的功能。具體包括自動(dòng)計時(shí)、計著(zhù)子數、語(yǔ)音提示、判斷行棋是否符合規則等功能。
該系統是以單片機為核心,利用光電檢測技術(shù),具有性能可靠、價(jià)格低廉、易于功能擴展等功能,可用于競技比賽,家庭娛樂(lè )。
關(guān)鍵詞:中國象棋;單片機;智能系統;光電傳感技術(shù)
0 引言
此文以現代傳統的中國象棋為背景,為實(shí)現中國象棋弈棋的智能化、自動(dòng)化,主要研究了一種以中國象棋為依托來(lái)實(shí)現智能棋盤(pán)的軟硬件設計。
在行棋的過(guò)程中,利用光電管進(jìn)行持續的掃描,根據每個(gè)棋子種類(lèi)碼進(jìn)行判斷,根據每個(gè)棋子位置碼進(jìn)行定位,并且了解棋手按照交替的方式進(jìn)行行棋,從而確定棋子的移動(dòng)方式的。為了確定棋子的移動(dòng)是否違規,筆者為每一類(lèi)棋子專(zhuān)門(mén)設定了程序。在比賽尚未開(kāi)始時(shí),就要設置好雙方的行棋規定用時(shí),如果在行棋的過(guò)程中起手規定時(shí)間到,就會(huì )被判定為違規,本棋盤(pán)規定當棋手落子后,對方必須在100 s內完成行棋(總步數不超過(guò)99步)。這樣就不用棋手每次走完棋進(jìn)行人工按壓計時(shí)(計時(shí)器),采用自動(dòng)化的技術(shù)來(lái)計算子數,替換到人工崗位,具有全自動(dòng)功能,極大的節約了比賽時(shí)的人工成本。
軟件設計主要為行棋程序設計,行棋程序主要由計著(zhù)子數程序、計時(shí)器程序、吃棋程序、走棋程序、各棋子行棋規則判斷程序等組成。
軟件設計部分要在棋局開(kāi)始前完成初始化設置,以及棋盤(pán)各類(lèi)棋子的編碼設置。開(kāi)始按鍵按下后,由主程序不斷檢測8255所得到的棋盤(pán)各位置的變化,根據不同的棋子的變化,轉去執行相應的棋子走子或吃子等相關(guān)子程序。
行棋程序中包含行棋規則是:①紅先黑后;②棋子落定后,不得悔棋;③吃棋拿棋后,不得悔棋。
吃棋時(shí),棋手應該先拿起己方棋子,然后再拿起想要吃的棋子,再將自己的棋子放在被吃棋子的位置上。如“炮”吃“卒”,應該先拿起自己的“炮”,然后去拿起對方的“卒”,最后將自己的“炮”放在對方原來(lái)的“卒”的位置上。
在三條規則之中,第三條規則可以進(jìn)行二選一,為了滿(mǎn)足用戶(hù)使用的需要本程序設定為先拿起自己的棋子去覆蓋敵方棋子。
當一方拿起自己的棋子,落在無(wú)棋子的位置上時(shí),即為走棋;調用走棋程序,同時(shí)要調用棋子行棋規則判斷程序,判斷是否違規;如違規即報警;如無(wú)違規則記錄該棋子的位置編碼。當一方拿起自己的棋子,再拿起對方的棋子,并將自己的棋子落在該新位置上時(shí),即為吃棋;調用吃棋程序,同時(shí)要調用棋子行棋規則判斷程序,判斷是否違規;如違規即報警;如無(wú)違規則記錄該棋子的新位置編碼。
棋子的類(lèi)型編碼是始終不變的,位置編碼是隨著(zhù)行棋的進(jìn)行而變化的。在開(kāi)始鍵按下后,不斷檢測棋盤(pán)數據并與初始值進(jìn)行比較,直至有變化,即表示有棋子移動(dòng)。由移動(dòng)的位置碼可知是什么棋子在移動(dòng)。
軟件設計流程圖如圖1所示。
1 棋盤(pán)各點(diǎn)的檢測掃描程序
此程序的功能是對棋盤(pán)初始值的檢測,以及對各棋子位置變化的記錄是整個(gè)軟件設計部分的核心,本部分程序如能順利完成,其他的軟件部分也能迎刃而解。棋子的類(lèi)型編碼是實(shí)現設定好的,而位置編碼是隨著(zhù)行棋的進(jìn)行而不斷刷新的。在開(kāi)始鍵按下后,不斷檢測棋盤(pán)數據并與初始值進(jìn)行比較,當棋子位置編碼發(fā)生變化時(shí),即說(shuō)明有棋手行棋。由移動(dòng)的位置碼可知是什么棋子在移動(dòng)。
2 8279鍵盤(pán)顯示驅動(dòng)程序
在鍵盤(pán)顯示模塊中,共有8個(gè)數碼管,前四個(gè)與后四個(gè)各分為一組,前兩位顯示紅方棋手的每步行棋剩余時(shí)間,三、四位顯示紅方棋手的著(zhù)子數,五、六位顯示黑方棋手每步行棋剩余時(shí)間,七、八位顯示黑方棋手的著(zhù)子數。這樣就減輕了裁判員的負擔,實(shí)現自動(dòng)判斷、計時(shí)的功能。該部分程序主要完成對走棋剩余時(shí)間的顯示,以及走子數的顯示。
3 下棋子程序設計
當棋手開(kāi)始下棋時(shí),下棋使用的程序共分為:走棋程序、吃棋程序、行棋規則。三種程序同時(shí)調用。下面以我方走馬和走車(chē)分別為例進(jìn)行說(shuō)明。
3.1 馬行棋設計
例如,馬的行棋規則為可走日,行走范圍為全棋盤(pán)。如圖2,可以向23456789中八個(gè)方向走,落地位置有對方子時(shí)可以直接吃掉,而不可向1處走,為蹩馬腿。
當棋手走馬時(shí),流程圖如圖3所示。具體地,需要考慮如下情況:
?、俑鶕欠駜H有一個(gè)子動(dòng)作判斷調用走棋程序還是吃棋程序;
?、谌魞H有一個(gè)子動(dòng)作則調用走棋程序;
?、墼俑鶕衅逡巹t判斷是否符合馬的行棋規則,判斷方法為橫縱坐標中有一項移動(dòng)兩格另一個(gè)移動(dòng)一格,如不符合則報警;
?、苋绻麤](méi)有犯規記錄則自動(dòng)將馬的程序編碼及移動(dòng)位置進(jìn)行儲存;
?、萑粲袃蓚€(gè)棋子位置發(fā)生改變,則判定調用吃棋程序,當棋手吃完棋后,再根據行棋規則判斷是否符合,如若不符合則自動(dòng)報警;
?、奕绻麤](méi)有犯規記錄則自動(dòng)將馬的程序編碼及移動(dòng)位置進(jìn)行儲存;
?、咄瑫r(shí)要注意根據事先設定的程序,吃棋時(shí)需要先拿起自己的子再去拿對方的子。
具體判定過(guò)程為,先根據馬的位置編碼判定動(dòng)作的子為馬。然后根據行棋規則調用馬的行棋規則,只能走日,即縱坐標移動(dòng)2,橫坐標移動(dòng)1;或橫坐標移動(dòng)2縱坐標移動(dòng)為1,如果不符合馬的行棋規則則報警,如果符合則判定是否存在蹩馬腿現象,存在則報警,如果不存在則繼續;最后判定此步為吃棋還是行棋,結束。
3.2 車(chē)行棋規則
車(chē)走棋時(shí)設計程序同理:車(chē)的行棋規則較為簡(jiǎn)單,只能直走,可以橫向直走也可以縱向直走前后左右均可走,中間遇到對方子可以直接吃掉,前后左右為對方子可以直接吃掉。
?、偈紫扰卸ㄜ?chē)為縱向行走還是橫向行走,如果為縱向行走則記錄下縱向行走的位置編碼進(jìn)行儲存;
?、谌缓笤龠M(jìn)行判定是行棋還是吃棋,若僅有車(chē)一子進(jìn)行移動(dòng)則為行棋,調用行棋程序;
?、廴粜衅褰Y束位置還有其他子被替代則為吃棋,調用吃棋程序;
?、苋绻霈F橫縱坐標都變化、或者都不變化、或其他位置子消失等不符合行棋規則情況出現時(shí)則報警。
3.3 炮行棋規則
炮的行棋規則較為特殊,走棋時(shí)可以直行,縱橫方向皆可。吃棋時(shí)中間必須隔一個(gè)子;炮可向四個(gè)方向移動(dòng),也可以吃隔子吃子。這樣程序設計時(shí)需考慮以下步驟:
?、傧扰袛嗍亲咂暹€是吃棋,判斷橫縱坐標是否只有其中一個(gè)有變化;
?、谌缓笈袛嗄繕宋恢檬欠裼凶?,如果有子則調用吃棋程序,如果沒(méi)有子則調用走棋程序;
?、蹖⒆咂宓呐谧鴺撕湍繕宋恢玫淖右源a形式儲存;
?、懿环闲衅逡巹t的報警。
4 結論
本次智能棋盤(pán)設計,在硬件選用上較為合理,各個(gè)芯片均選用市面上經(jīng)常見(jiàn)到的常用芯片,并且性能穩定,操作簡(jiǎn)單,方便,整體電路搭配較為完善。
本次設計題目已經(jīng)實(shí)現的功能有:
?、傩衅暹`規自動(dòng)報警。
?、谧詣?dòng)記憶著(zhù)子數。
?、埏@示走棋剩余時(shí)間等。
由于篇幅的限制筆者刪除了棋盤(pán)與棋子編碼,僅列出了車(chē)馬炮三種棋子的行棋程序,本課題作為一項智能系統的研究的理論與嘗試,與實(shí)際應用還有一段差距。隨著(zhù)微電子技術(shù),軟件設計技術(shù)和傳感器技術(shù)的發(fā)展。此項目也將會(huì )有更大的發(fā)展空間,和更多的功能完善。
參考文獻
[1]徐愛(ài)鈞.智能化測量控制儀表原理與設計[M].北京:北京航空航天大學(xué)出版社.
[2]孫傳友,等.感測技術(shù)與系統設計.北京:科學(xué)出版社, 2004.
[3]戴梅萼,史嘉權.微型計算機技術(shù)及應用(4版).北京:清華大學(xué)出版社,2001.
[4]馬群生,溫冬嬋,等.微型計算機技術(shù).北京:清華大學(xué)出版社,2006.
[5]秦維佳,侯春光,等.C/C++程序設計教程.北京:機械工業(yè)出版社,2007.
[6]浦昭邦.光電測試技術(shù).北京:機械工業(yè)出版,2004.
[7]馬忠梅,等.單片機的C語(yǔ)言應用程序設計.北京:北京航空航天大學(xué)出版社,2007.
[8]向紅.51系列單片機應用與實(shí)踐教程.北京:北京航空航天大學(xué)出版社,2008.
[9]PCI Special Interest Group. PCI Local Bus Specification,1999.
[10]Barry B B.The Intel Microprocessors: 6th ed,2005.
本文來(lái)源于科技期刊《電子產(chǎn)品世界》2019年第2期第52頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處
評論