此文以現(xiàn)代傳統(tǒng)的中國象棋為背景,,為實現(xiàn)中國象棋弈棋的智能化,、自動化,主要研究了一種以中國象棋為依托來實現(xiàn)智能棋盤的軟硬件設(shè)計,。 在行棋的過程中,,利用光電管進(jìn)行持續(xù)的掃描,根據(jù)每個棋子種類碼進(jìn)行判斷,,根據(jù)每個棋子位置碼進(jìn)行定位,,并且了解棋手按照交替的方式進(jìn)行行棋,從而確定棋子的移動方式的,。為了確定棋子的移動是否違規(guī),,筆者為每一類棋子專門設(shè)定了程序。在比賽尚未開始時,,就要設(shè)置好雙方的行棋規(guī)定用時,,如果在行棋的過程中起手規(guī)定時間到,就會被判定為違規(guī),,本棋盤規(guī)定當(dāng)棋手落子后,,對方必須在100 s內(nèi)完成行棋(總步數(shù)不超過99步)。這樣就不用棋手每次走完棋進(jìn)行人工按壓計時(計時器),,采用自動化的技術(shù)來計算子數(shù),,替換到人工崗位,具有全自動功能,,極大的節(jié)約了比賽時的人工成本,。 軟件設(shè)計主要為行棋程序設(shè)計,,行棋程序主要由計著子數(shù)程序、計時器程序,、吃棋程序,、走棋程序、各棋子行棋規(guī)則判斷程序等組成,。 軟件設(shè)計部分要在棋局開始前完成初始化設(shè)置,,以及棋盤各類棋子的編碼設(shè)置。開始按鍵按下后,,由主程序不斷檢測8255所得到的棋盤各位置的變化,,根據(jù)不同的棋子的變化,轉(zhuǎn)去執(zhí)行相應(yīng)的棋子走子或吃子等相關(guān)子程序,。 行棋程序中包含行棋規(guī)則是:①紅先黑后;②棋子落定后,,不得悔棋;③吃棋拿棋后,不得悔棋,。 吃棋時,,棋手應(yīng)該先拿起己方棋子,然后再拿起想要吃的棋子,,再將自己的棋子放在被吃棋子的位置上,。如“炮”吃“卒”,應(yīng)該先拿起自己的“炮”,,然后去拿起對方的“卒”,,最后將自己的“炮”放在對方原來的“卒”的位置上。 在三條規(guī)則之中,,第三條規(guī)則可以進(jìn)行二選一,,為了滿足用戶使用的需要本程序設(shè)定為先拿起自己的棋子去覆蓋敵方棋子,。 當(dāng)一方拿起自己的棋子,,落在無棋子的位置上時,即為走棋;調(diào)用走棋程序,,同時要調(diào)用棋子行棋規(guī)則判斷程序,,判斷是否違規(guī);如違規(guī)即報警;如無違規(guī)則記錄該棋子的位置編碼。當(dāng)一方拿起自己的棋子,,再拿起對方的棋子,,并將自己的棋子落在該新位置上時,即為吃棋;調(diào)用吃棋程序,,同時要調(diào)用棋子行棋規(guī)則判斷程序,,判斷是否違規(guī);如違規(guī)即報警;如無違規(guī)則記錄該棋子的新位置編碼。 棋子的類型編碼是始終不變的,,位置編碼是隨著行棋的進(jìn)行而變化的,。在開始鍵按下后,,不斷檢測棋盤數(shù)據(jù)并與初始值進(jìn)行比較,直至有變化,,即表示有棋子移動,。由移動的位置碼可知是什么棋子在移動。 軟件設(shè)計流程圖如圖1所示,。 棋盤各點的檢測掃描程序 此程序的功能是對棋盤初始值的檢測,,以及對各棋子位置變化的記錄是整個軟件設(shè)計部分的核心,本部分程序如能順利完成,,其他的軟件部分也能迎刃而解,。棋子的類型編碼是實現(xiàn)設(shè)定好的,而位置編碼是隨著行棋的進(jìn)行而不斷刷新的,。在開始鍵按下后,,不斷檢測棋盤數(shù)據(jù)并與初始值進(jìn)行比較,當(dāng)棋子位置編碼發(fā)生變化時,,即說明有棋手行棋,。由移動的位置碼可知是什么棋子在移動。 8279鍵盤顯示驅(qū)動程序 在鍵盤顯示模塊中,,共有8個數(shù)碼管,,前四個與后四個各分為一組,前兩位顯示紅方棋手的每步行棋剩余時間,,三,、四位顯示紅方棋手的著子數(shù),五,、六位顯示黑方棋手每步行棋剩余時間,,七、八位顯示黑方棋手的著子數(shù),。這樣就減輕了裁判員的負(fù)擔(dān),,實現(xiàn)自動判斷、計時的功能,。該部分程序主要完成對走棋剩余時間的顯示,,以及走子數(shù)的顯示。 下棋子程序設(shè)計 當(dāng)棋手開始下棋時,,下棋使用的程序共分為:走棋程序,、吃棋程序、行棋規(guī)則,。三種程序同時調(diào)用,。下面以我方走馬和走車分別為例進(jìn)行說明。 1馬行棋設(shè)計 例如,馬的行棋規(guī)則為可走日,,行走范圍為全棋盤,。如圖2,可以向23456789中八個方向走,,落地位置有對方子時可以直接吃掉,,而不可向1處走,為蹩馬腿,。 當(dāng)棋手走馬時,,流程圖如圖3所示。具體地,,需要考慮如下情況:
具體判定過程為,,先根據(jù)馬的位置編碼判定動作的子為馬,。然后根據(jù)行棋規(guī)則調(diào)用馬的行棋規(guī)則,只能走日,,即縱坐標(biāo)移動2,,橫坐標(biāo)移動1;或橫坐標(biāo)移動2縱坐標(biāo)移動為1,如果不符合馬的行棋規(guī)則則報警,,如果符合則判定是否存在蹩馬腿現(xiàn)象,,存在則報警,如果不存在則繼續(xù);最后判定此步為吃棋還是行棋,,結(jié)束,。 2車行棋規(guī)則 車走棋時設(shè)計程序同理:車的行棋規(guī)則較為簡單,只能直走,,可以橫向直走也可以縱向直走前后左右均可走,,中間遇到對方子可以直接吃掉,前后左右為對方子可以直接吃掉,。
3炮行棋規(guī)則 炮的行棋規(guī)則較為特殊,走棋時可以直行,,縱橫方向皆可,。吃棋時中間必須隔一個子;炮可向四個方向移動,也可以吃隔子吃子,。這樣程序設(shè)計時需考慮以下步驟:
|
|