<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的棋盤(pán)設(shè)計(jì)

          基于單片機(jī)的棋盤(pán)設(shè)計(jì)

          作者:王天睿(遼寧軌道交通職業(yè)學(xué)院,沈陽(yáng) 110023) 時(shí)間:2021-03-01 來(lái)源:電子產(chǎn)品世界 收藏
          編者按:本文主要探討了我國(guó)傳統(tǒng)的象棋對(duì)弈與單片機(jī)技術(shù)相結(jié)合的方法,通過(guò)軟件編程技術(shù)、電子技術(shù)與單片機(jī)應(yīng)用技術(shù)的結(jié)合,可以更加方便有效的提升象棋對(duì)弈的樂(lè)趣和效率。


          本文引用地址:http://www.ex-cimer.com/article/202103/423037.htm

          摘要:本文摒棄了諸多傳統(tǒng)象棋的弊端,減輕了下棋人員的負(fù)擔(dān),增加了下棋的趣味性,實(shí)現(xiàn)自動(dòng)采集對(duì)局信息發(fā)送到采集服務(wù)器進(jìn)行處理的功能,具體包括語(yǔ)音提示,計(jì)著子數(shù),自動(dòng)計(jì)時(shí),判斷行棋是否符合規(guī)則等功能。

          本系統(tǒng)是基于嵌入式技術(shù),利用相關(guān)光電檢測(cè)等技術(shù),自主實(shí)現(xiàn)棋盤(pán)的裁判功能,具有價(jià)格便宜,性價(jià)比高,制作簡(jiǎn)單,易于實(shí)現(xiàn)功能擴(kuò)展等優(yōu)點(diǎn)。文章重點(diǎn)對(duì)棋子編碼及程序邏輯控制方面進(jìn)行了探討。

          引言

          筆者進(jìn)行本文章研究的目的和意義體現(xiàn)在這些方面:將信息化技術(shù)引入到這項(xiàng)運(yùn)動(dòng)中來(lái),促進(jìn)其參與品味的提升,在一定程度上解放棋手和裁判,使得這項(xiàng)運(yùn)動(dòng)變得更加簡(jiǎn)單,進(jìn)一步拓寬運(yùn)動(dòng)的視野,吸引更多的人參與到此項(xiàng)運(yùn)動(dòng)中來(lái)。

          文章的主要工作是如何在保持棋手對(duì)壘慣性思維的基礎(chǔ)上,將先進(jìn)的軟硬件技術(shù)應(yīng)用到象棋這一項(xiàng)傳統(tǒng)運(yùn)動(dòng)及項(xiàng)目中來(lái),利用信息技術(shù)完成記錄、裁決等操作,充分發(fā)揮傳感器、等設(shè)備,以及C語(yǔ)言編程技術(shù)等電子信息專(zhuān)業(yè)的所學(xué)知識(shí)來(lái)完成計(jì)時(shí)、聲音提示、判斷行棋規(guī)則等重要功能。

          此課題將改變老式象棋諸多弊端,提高比賽的品味和檔次以及減輕棋手負(fù)擔(dān),提高對(duì)局質(zhì)量,實(shí)現(xiàn)自動(dòng)采集對(duì)局信息發(fā)送到采集服務(wù)器進(jìn)行處理的功能,能夠自動(dòng)判斷棋手下棋是否符合規(guī)則,做出判斷,并且自動(dòng)記錄棋手步數(shù)。具體包括自動(dòng)計(jì)時(shí),語(yǔ)音報(bào)警,自動(dòng)判斷規(guī)則等功能。

          中國(guó)象棋的每個(gè)棋子擺放的位置均為橫縱交叉點(diǎn)上,而本次論文設(shè)計(jì)引用了文件[1-2]中的傳感器技術(shù),為每個(gè)交叉點(diǎn)上均采用一個(gè)光電傳感器來(lái)接收棋子的移動(dòng)或者變更信號(hào),根據(jù)每個(gè)棋子的初始位置判斷棋子種類(lèi),根據(jù)棋子的運(yùn)動(dòng)軌跡判斷每個(gè)棋子是否符合行棋規(guī)則。弈棋交替進(jìn)行,直到某一方的將或者帥被對(duì)方吃掉為止。

          比賽時(shí),雙方輪流倒計(jì)時(shí),即一方棋子落地開(kāi)始為另一方倒計(jì)時(shí),另一方的思考時(shí)間不能超過(guò)倒計(jì)時(shí)的時(shí)長(zhǎng)。行棋前,智能棋盤(pán)會(huì)根據(jù)棋子所處的位置及其類(lèi)型,對(duì)所有的棋子展開(kāi)編碼處理,任何棋手完成一步行棋后,棋盤(pán)都會(huì)再次進(jìn)行掃描棋子的位置碼和種類(lèi)碼并及時(shí)更新,直到本局對(duì)壘結(jié)束。

          由于篇幅關(guān)系本文主要探討棋盤(pán)的軟件設(shè)計(jì)。

          1   棋盤(pán)棋子編碼

          為了使棋盤(pán)設(shè)計(jì)更加人性化,更加方便選手完成比賽,也為了使棋盤(pán)更加的人性化,將棋盤(pán)及棋子根據(jù)其位置進(jìn)行了編碼,中國(guó)的象棋棋盤(pán)如圖1所示,有橫9,縱10,共計(jì)90個(gè)格,交叉點(diǎn)為90個(gè)。紅黑雙方交替行棋,每人輪流走一步,可走棋、可吃棋,將帥吃掉為贏。

          image.png

          圖1 象棋初始棋盤(pán)

          1.1 棋盤(pán)坐標(biāo)編碼

          為了清楚知道下棋過(guò)程中,每個(gè)棋子行走的位置,先將棋盤(pán)的每個(gè)格進(jìn)行編碼,本著通俗易懂,易于理解的原則,將棋盤(pán)編碼。

          中國(guó)象棋中共有7種棋子,紅黑雙方棋子對(duì)稱,這樣將棋子按照種類(lèi)進(jìn)行編碼,如表1所示,這樣編碼的好處就是,因?yàn)榧t黑雙方棋子初始狀態(tài)完全一樣,只需判斷正負(fù)符號(hào)就可以判斷處棋子是哪一方的,0即為無(wú)棋子,空格。

          表1 棋子種類(lèi)編碼

          紅帥

          紅車(chē)

          紅馬

          紅炮

          紅相

          紅士

          紅兵

          無(wú)棋子

          1

          2

          3

          4

          5

          6

          7

          0

          黑將

          黑車(chē)

          黑馬

          黑炮

          黑象

          黑士

          黑卒


          -1

          -2

          -3

          -4

          -5

          -6

          -7


          1.2 棋子個(gè)體編碼

          編碼完棋盤(pán)、定義完棋子種類(lèi),則需要將棋盤(pán)坐標(biāo)與棋子個(gè)體進(jìn)行一一對(duì)應(yīng),先將棋子個(gè)體進(jìn)行編碼,如表2所示,注意“0”為無(wú)棋子,其中車(chē)、馬、炮、士、象雙方均為兩個(gè),故占用兩個(gè)編碼,兵雙方各占用五個(gè)。

          表2 棋子個(gè)體編碼

          0

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          15

          16

          無(wú)棋子

          黑將

          黑車(chē)

           

           

          黑馬

          黑炮

          黑士

          黑象

          黑兵


          17

          18

          19

          20

          21

          22

          23

          24

          25

          26

          27

          28

          29

          30

          31

          32


          紅帥

          紅車(chē)

          紅馬

          紅炮

          紅士

          紅象

          紅卒

          1.3 棋盤(pán)索引數(shù)組

          棋盤(pán)索引數(shù)組是將棋子種類(lèi)編碼與棋盤(pán)坐標(biāo)編碼有機(jī)的結(jié)合在一起,能夠完成根據(jù)棋手走的每步棋子進(jìn)行調(diào)用修改,并儲(chǔ)存到程序當(dāng)中去,這里的數(shù)組代表的是棋子的位置以及移動(dòng)的位置,數(shù)組的編碼即表示棋子的實(shí)際位置。

          這里引用的為一維數(shù)組,此數(shù)組簡(jiǎn)單方便,運(yùn)算較少、方便調(diào)用,并且比較直觀。中國(guó)象棋的初始局面下,棋盤(pán)索引數(shù)組如下所示:

          Boardlndex[90]={-2,-3,-6,-5,-1,-5,-6,-3,-2

          0, 0, 0, 0, 0, 0, 0, 0, 0,

          0,-4, 0, 0, 0, 0, 0, -4, 0,

          -7,0, -7, 0, -7,0, -7, 0, -7,

           0, 0, 0, 0, 0, 0, 0, 0, 0,

          0, 0, 0, 0, 0, 0, 0, 0, 0,

          7, 0, 7, 0, 7, 0, 7, 0, 7,

          0, 4, 0, 0, 0, 0, 0, 4, 0,

          0, 0, 0, 0, 0, 0, 0, 0, 0,

          2, 3 6, 5 1, 5 6, 3 2,}

          棋盤(pán)使用之前還要經(jīng)過(guò)下面三個(gè)步驟[3]。

          1)使用前先將所有棋子初始化:

          void Initchessman();//初始化所有棋子,以及坐標(biāo)

          2)然后定義象棋棋子的結(jié)構(gòu)體

          struct Chessman

          {

          char name[10];

          ID3DXMesh*mesh;

          D3DXVECTOR3 pos;

          Bool Alive;

          IDirect3DTexture9*texture;

          POINT coord;

          };

          Coored為棋子在數(shù)組中的坐標(biāo),數(shù)組Chessman*ary[10][9]為相應(yīng)棋盤(pán)所在的位置,pos為空間位移,alive是棋子存活,mesh為每個(gè)棋子指向的指針,name是名字;其他除了chessman指針以外的部分為空格null。

          3)規(guī)則設(shè)定繪制

          在使用時(shí),為了正確的選取棋子,讓棋子能夠按照規(guī)則正確的行走,調(diào)取了如下函數(shù):

          ①RayGetPickRay(int,int);//獲得選取射線;

          ②void InitChessman();//初始化所有棋子,以及坐標(biāo),

          ③bool IsMovingOk(int,int);//是否能行走到某一個(gè)點(diǎn)上;

          ④bool GetPlanePickPoint(D3DXVECTOR3,D3DXVECTOR3,Ray);//通過(guò)拾取射線與棋盤(pán),從而得到拾取點(diǎn);

          ⑤bool PickChessman(Ray);//是否拾取棋子;

          2 下棋子程序設(shè)計(jì)

          當(dāng)棋手開(kāi)始下棋時(shí),下棋使用的程序共分為:走棋程序、吃棋程序、行棋規(guī)則。三種程序同時(shí)調(diào)用,下面以我方走馬和走車(chē)分別為例進(jìn)行說(shuō)明。

          2.1 帥行棋設(shè)計(jì)

          帥的行棋規(guī)則實(shí)現(xiàn)方法與前面車(chē)和馬類(lèi)似。首先是否符合行棋規(guī)則,行棋范圍為九宮格內(nèi)部,帥每步只能走一步,可上可下可左可右。然后判斷走棋還是吃棋,中間出現(xiàn)不符合行棋規(guī)則的地方則報(bào)警,如圖2所示。

          image.png

          圖2 帥行棋圖

          帥與將行棋規(guī)則一樣編程原理如圖3所示。

          image.png

          圖3 將和相行棋程序框圖

          程序如下:

          if(toY>2||toX<3||toX>5){//出了九宮格

          Return false;

          }

          if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步

          return false;

          }

          2.2 象行棋規(guī)則

          象的行棋規(guī)則與士和馬類(lèi)似,象不能過(guò)河,存在蹩象眼的情況,象行走田字,即象只能夠跨格走斜線,象只能走到田字格對(duì)角線三個(gè)位置上,而不能走到其他位置[4-5]。當(dāng)棋手走象時(shí),步驟如下。

          1)根據(jù)是否僅有一個(gè)子動(dòng)作判斷調(diào)用走棋程序還是吃棋程序。

          2)若僅有一個(gè)子動(dòng)作則調(diào)用走棋程序。

          3)再根據(jù)行棋規(guī)則判斷是否符合象的行棋規(guī)則,判斷方法為橫縱坐標(biāo)中橫和縱向分別移動(dòng)兩格,如不符合則報(bào)警。

          4)如果沒(méi)有犯規(guī)記錄則自動(dòng)將象的及移動(dòng)位置進(jìn)行儲(chǔ)存。

          5)若有兩個(gè)棋子位置發(fā)生改變,則判定調(diào)用吃棋程序,當(dāng)棋手吃完棋后,再根據(jù)行棋規(guī)則判斷是否符合,如若不符合則自動(dòng)報(bào)警。

          6)如果沒(méi)有犯規(guī)記錄則自動(dòng)將象的及移動(dòng)位置進(jìn)行儲(chǔ)存。

          7)同時(shí)要注意根據(jù)事先設(shè)定的程序,吃棋時(shí)需要先拿起自己的子再去拿對(duì)方的子。

          所以其程序如下所示:

          if(toY>4){//不能過(guò)河

          return false;

          }

          if((Math.abs(fromX-toY)!=2||Math.abs(fromY-toY)!=2){//象走田字

          return false;

          }

          if(qizi[(fromY+toY)/2][(fromX+toX)/2]!=0){

          return false;//象眼處有棋子

          }

          2.3 兵行棋規(guī)則

          兵的行棋規(guī)則比較簡(jiǎn)單,與帥類(lèi)似,每次只能走一步。同時(shí)也要判斷行棋還是吃棋。行走范圍不同:過(guò)河之前只能直走,而過(guò)河之后可以走到任意一格。過(guò)河之前只能向前走,過(guò)河之后可以向左右前三個(gè)方向行走,不過(guò)不可回頭。

          兵與卒行棋規(guī)則相同,不再累述。

          3   結(jié)語(yǔ)

          本次智能棋盤(pán)設(shè)計(jì),可在硬件上選用較為常見(jiàn)的單片機(jī)進(jìn)行配置,并且性能穩(wěn)定,操作簡(jiǎn)單,方便,整體電路搭配較為完善。

          由于篇幅的限制筆者并沒(méi)有給出所有棋子的編譯程序和邏輯圖,僅列出了帥士相三種棋子的行棋程序,本論文作為一項(xiàng)的研究的理論與嘗試,想投入實(shí)際的應(yīng)用還有一些技術(shù)難點(diǎn)。隨著軟件設(shè)計(jì)技術(shù),微電子技術(shù),和相關(guān)技術(shù)的發(fā)展。此課題還會(huì)不斷完善,不斷改進(jìn),最終實(shí)現(xiàn)功能上的不斷更新。

          參考文獻(xiàn)

          [1] 孫傳友,等.感測(cè)技術(shù)與系統(tǒng)設(shè)計(jì).北京:科學(xué)出版社,2004.

          [2] 浦昭邦.光電測(cè)試技術(shù).北京:機(jī)械工業(yè)出版,2004.

          [3] 秦維佳,侯春光,等.C/C++程序設(shè)計(jì)教程.北京:機(jī)械工業(yè)出版社,2007.

          [4] 向紅.51系列單片機(jī)應(yīng)用與實(shí)踐教程.北京:北京航空航天大學(xué)出版社,2008.

          [5] BARRY B B. The Intel Microprocessors.6th ed.2005.

          (本文來(lái)源于《電子產(chǎn)品世界》雜志社2021年2月期)



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();