【正文】
name of the law。game tree。 ABSTRACTChess Game Design and ImplementationYao Renjie(College of Computer Science and Engineering, Zhongkai University of Agriculture and Technology, Guangzhou 510225,China)Abstract: As the quintessence of a country for China, it has passed thousands of years since Chinese Chess developed. Other chess couldn’t be pared with it’s popularization in China, from large international or national petition to smaller pieces munity street .It is the distillate of Chinese people’s wisdom. Now, there are 200 million people can play Chinese Chess only in China. And Chinese Chess is developing in the way of internationalization. The display of step list makes player know the process of chess distinctly, and let player make a better choice. This paper firstly studies how to represent a chess board in puter, then discusses how to generate legal moves. Secondly, this paper studies the minimax searching procedure of Game Tree, and the AlphaBeta pruning algorithm. A Chessplaying system is designed and developed, which is built on the integrated puter MFC SDI document view architecture by using Visual C++. Key words: Chinese chess。[10] Fran231。[9] Fran231。[8] Fran231。[7] Fran231。第三、程序仍在局面檢測和貼圖刷新上存在著隨機性的出錯可能(出錯幾率很小) 。第二:由于對人工智能算法的不熟悉,在 AlphaBeta 搜索算法上花了大量的時間和精力來了解,導致程序進度的緩慢。對于諸如位棋盤(BitBoard) 、迭代加深(Iterative Deepening) 、機器學習( Machine Learning)等當今棋類對弈程序中所采用的先進技術和思想,在程序中并未涉及。本論文對計算機博弈技術進行了研究,在深入研究了機器下中國象棋方法理論基礎上,實現(xiàn)了一個具有一定棋力的人機對弈中國象棋程序。從尊敬的導師身上,我不僅學到了扎實、寬廣的專業(yè)知識,也學到了做人的道理。在我的學業(yè)和論文的研究工作中無不傾注著老師們辛勤的汗水和心血。在這次畢業(yè)設計中也使我們的同學關系更進一步了,同學之間互相幫助,有什么不懂的大家在一起商量,聽聽不同的看法對我們更好的理解知識,所以在這里非常感謝幫助我的同學。腳踏實地,認真嚴謹,實事求是的學習態(tài)度,不怕困難、堅持不懈、吃苦耐勞的精神是我在這次設計中最大的收益。歷經(jīng)了幾個月的奮戰(zhàn),緊張而又充實的畢業(yè)設計終于落下了帷幕。5 總結2022 年 2 月,我開始了我的畢業(yè)論文工作,時至今日,論文基本完成。走法記錄界面(圖 5)如下:圖 5 走法記錄界面其他輔助功能界面(圖 6)如下:圖 6 其他輔助功能界面你可以通過上面四個輔助功能對棋局進行研究,從而提高你的下棋水平。在懂的以上規(guī)則之后并可進行游戲,執(zhí)行該軟件后,并可進入游戲界面。如果在要去的方向有別的棋子擋住,馬就無法走過去,俗稱“蹩馬腿” 。 馬:馬走動的方法是一直一斜,即先橫著或直著走一格,然后再斜著走一個對角線,俗稱“馬走日” 。因此,一車可以控制十七個點,故有“一車十子寒”之稱。相(象)的活動范圍限于“河界”以內(nèi)的本方陣地,不能過河,且如果它走的“田”字中央有一個棋子,就不能走,俗稱“塞象眼” 。相(象):相(象)的主要作用是防守,保護自己的帥(將) 。仕(士):仕(士)是帥(將)的貼身保鏢,它也只能在九宮內(nèi)走動。它只能在“九宮”之內(nèi)活動,可上可下,可左可右,每次走動只能按豎線或橫線走動一格。如果有一方的主帥被對方吃了,就算那一方輸。輪到走棋的一方,將某個棋子從一個交叉點走到另一個交叉點,或者吃掉對方的棋子而占領其交叉點,都算走一著。首先,執(zhí)行該軟件,系統(tǒng)并不需要很高的配置,CPU 在 以上,內(nèi)存在 512M以上就可以很流暢地執(zhí)行。此后,等到界面部分初步完成,引擎的上述各模塊無需作任何改動, 頭文件的形式加入界面工程, 文件調(diào)用搜索函數(shù)即可。當實現(xiàn)了引擎部分的各要素時,可先建立一個 Win32 控制臺項目,之后只要再添加 文件負責接受用戶的輸入、調(diào)用搜索函數(shù)、顯示搜索結果,便可簡單的測試引擎了(采用輸入著法的起點坐標和終點坐標的方式來傳送用戶走棋的信息?!置嬖u估。——著法排序。 ——歷史啟發(fā)。——搜索部分。——著法生成器。如下:——象棋相關定義。此外還有其它部分對程序同樣必不可少,但這些部分主要由 MFC 自動生成,無需人為改動,故在此不多做介紹。如此,在 OnLButtonDown 函數(shù)里,實現(xiàn)了人與機器的對弈(當然每走一步棋,也還需要繪圖函數(shù)來顯示棋盤局面的更新) 。在收到用戶傳達的走棋信息后,可先判斷該著法是否合法(是否符合中國象棋的游戲規(guī)則) ,如果合法,則執(zhí)行之。在 OnLButtonDown 函數(shù)里處理如下兩種操作:如果用戶點擊鼠標的位置落在己方的棋子上,表示用戶選中了該棋子,下一步將移動該子進行走棋(也可能用戶下一步將會選擇己方另外的棋子,總之這一操作會記錄下用戶所選的將要走的棋子) 。其中第二個參數(shù) CPoint point 是在本程序中所要用到的,它給出了當鼠標左鍵被按下時,鼠標指針的位置坐標。因此,要想讓棋子文件的背景“隱藏”需要通過一些“與”和“異或”操作來屏蔽掉棋子的背景。所以在 OnPaint()函數(shù)里做的工作主要都是在貼位圖。因此,在這里將要完成棋盤、棋子的顯示走棋起始位置和目標位置的提示框的顯示。包括對悔棋、還原隊列的清空,棋盤、棋子樣式的默認形式,下棋模式的默認選擇,以及著法名稱列表的初始化等。初始化的內(nèi)容包括:對引擎部分所用到的變量的初始化。代碼主要分布于以下三大部分:初始化部分BOOL CCChessUIDlg::OnInitDialog(){}OnInitDialog()負責的是對話框的初始化。//將帥都在,返回 0} 4 界面設計和系統(tǒng)實現(xiàn) 界面設計關于棋盤和棋子,建了一個基于對話框的 MFC 應用程序。//奇數(shù)層返回極小值elsereturn 19990+nDepth。 //奇數(shù)層返回極大值elsereturn 19990nDepth。//取當前奇偶標志,奇數(shù)層為電腦方,偶數(shù)層為用戶方。 if(position[i][j]==R_KING)RedLive=TRUE。j6。i3。if(position[i][j]==R_KING)RedLive=TRUE。j6。i10。 BOOL RedLive=FALSE,BlackLive=FALSE。 勝敗判定勝負判定只要一方將另一方的將或帥吃掉就是勝者。想要從列表框中刪除項時,可以使用 (()1)。但是顯示的內(nèi)容依然是最早加進來的項。 //用來獲得剛下的一步棋的走法; void CChessDlg::AddChessRecord(int nFromX,int nFromY,int nToX,int nToY,int nUserChessColor,int nSourceID) //將走法添加進下棋記錄; 然后,顯示在 Listbox 中。 }以下介紹如何對列表框控件(List Box)進行操作,以顯示或刪除著法名稱。 } int CGradientProgressCtrl::StepIt() { m_nCurrentPosition+=m_nStep。 } // Do not call CProgressCtrl::OnPaint() for painting messages } int CGradientProgressCtrl::SetPos(int nPos) { //Set the Position of the Progress m_nCurrentPosition=nPos。 (m_strShow,amp。 } //顯示其他文字