




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
太原理工大學(xué)畢業(yè)設(shè)計(jì)(論文)用紙?zhí)砉ご髮W(xué)畢業(yè)設(shè)計(jì)(論文)任務(wù)書畢業(yè)設(shè)計(jì)(論文)題目:中國象棋畢業(yè)設(shè)計(jì)(論文)要求及原始數(shù)據(jù)(資料):1.綜述中國象棋在國內(nèi)的發(fā)展;2.深入了解MFC及TCP/IP通信編程;3.熟練掌握TCP/IP通信技術(shù),訓(xùn)練編寫MFC程序的能力;4.設(shè)計(jì)并實(shí)現(xiàn)中國象棋服務(wù)器與客戶端;5.深入分析TCP/IP的關(guān)鍵技術(shù)與MFC編寫語言;6.訓(xùn)練檢索文獻(xiàn)資料和利用文獻(xiàn)資料的能力;7.訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。畢業(yè)設(shè)計(jì)(論文)主要內(nèi)容:1.綜述中國象棋在國內(nèi)的發(fā)展;2.深入了解MFC及TCP/IP通信編程;3.熟練掌握TCP/IP通信技術(shù),訓(xùn)練編寫MFC程序的能力;4.設(shè)計(jì)并實(shí)現(xiàn)中國象棋服務(wù)器與客戶端;5.深入分析TCP/IP的關(guān)鍵技術(shù)與MFC編寫語言;6.訓(xùn)練檢索文獻(xiàn)資料和利用文獻(xiàn)資料的能力;7.訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。學(xué)生應(yīng)交出的設(shè)計(jì)文件(論文):1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計(jì)論文;2.包括畢業(yè)設(shè)計(jì)論文、源程序等內(nèi)容在內(nèi)的畢業(yè)設(shè)計(jì)電子文檔及其它相關(guān)材料。主要參考文獻(xiàn)(資料):StevenMBobrowski.Oracle7與客戶/服務(wù)器計(jì)算技術(shù)從入門到精通[M].北京:電子工業(yè)出版社,1996.Comer,D,E.用TCP/IP進(jìn)行網(wǎng)際互連[M].北京:電子工業(yè)出版社,2008.Kleninberg.算法設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.王曉鵬.TCP/IP下的Socket及Winsock通信機(jī)制[J].航空計(jì)算技術(shù),2004,2(6):126-128.董正言.面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2010.范孫操,姚垚.象棋競(jìng)賽規(guī)則[M].北京:人民體育出版社,2014年Stanley,B,Lippman.C++Primer[M].北京:人民郵電出版社,2006.成穎.C++程序設(shè)計(jì)語言[M].南京:東南大學(xué)出版社,2008.陳維興,林小茶.C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2009.魏東平,朱連章,于廣斌.C程序設(shè)計(jì)語言[M].北京:電子工業(yè)出版社,2010.專業(yè)班級(jí)學(xué)生要求設(shè)計(jì)(論文)工作起止日期2015年3月23日~2015年7月3日指導(dǎo)教師簽字日期2015年3月23日教研室主任審查簽字日期系主任批準(zhǔn)簽字日期中國象棋摘要象棋是中華民族的傳統(tǒng)文化,不僅在國內(nèi)深受群眾喜愛,而且流傳國外。傳統(tǒng)象棋有許多不便之處,不方便進(jìn)行棋術(shù)的研究探討。本設(shè)計(jì)的目的就是在當(dāng)前局域網(wǎng)條件下實(shí)現(xiàn)中國象棋的智能網(wǎng)絡(luò)對(duì)戰(zhàn)。在實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)弈的同時(shí),重點(diǎn)增加了人機(jī)對(duì)弈的功能。本文主要介紹局域網(wǎng)象棋游戲的分析思路、整體設(shè)計(jì)以及功能的實(shí)現(xiàn)過程。主要分成三大模塊進(jìn)行設(shè)計(jì),分別為界面設(shè)計(jì)、網(wǎng)絡(luò)通信和人工智能三個(gè)部分。通過界面設(shè)計(jì)為整個(gè)程序構(gòu)建一個(gè)框架;網(wǎng)絡(luò)通信部分鑒于局域網(wǎng)的特點(diǎn)和游戲本身的要求,本設(shè)計(jì)采用兩層C/S架構(gòu)來實(shí)現(xiàn)相互之間的通信。它主要包含以下幾大模塊:網(wǎng)絡(luò)通信模塊,圖像繪制模塊和規(guī)則設(shè)置模塊。網(wǎng)絡(luò)通信模塊使得玩家可以方便的迅速建立起網(wǎng)絡(luò)連接,從而實(shí)現(xiàn)聯(lián)機(jī)對(duì)弈和聊天功能;圖像繪制模塊實(shí)現(xiàn)棋盤更新以及棋子動(dòng)態(tài)表示等功能;規(guī)則設(shè)置模塊用于約束玩家的棋步。人工智能部分分為四個(gè)模塊棋局表示;著法生成;搜索算法;局面評(píng)估。該游戲提供網(wǎng)絡(luò)支持,可以在局域網(wǎng)上進(jìn)行聯(lián)網(wǎng)游戲并動(dòng)態(tài)顯示,在對(duì)弈的同時(shí)實(shí)時(shí)文字聊天,同時(shí)實(shí)現(xiàn)了人機(jī)對(duì)弈,是一個(gè)擁有一定棋力的中國象棋網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)。關(guān)鍵詞:中國象棋;網(wǎng)絡(luò)通信;人工智能;ChinesechessABSTRACTTheChinesechessisonetraditionalChinesecultureheritagewhichhasbeenbelovedbythedomesticfolk,andhasbeenintroducedabroad.Thetraditionchesshasmuchinconvenience,itisnoteasytostudychess.ThedesignhasmadetheintelligentnetplayofChinesechessinthecurrentLANareality.Whilecarryingoutthenetwork,particularlyraisedthefunctionofplayingwithcomputer.Basedontheanalyticalapproaches,thewholedesignandthefunctionrealizationoftheLANchessgame,thedesignhasbeendesignatedintothreebigmodules,namelytheinterfacedesignation,thenetworkcommunicationandtheartificialintelligence.Theinterfacedesignationhasbuiltupaframeworkforthewholeprogramme.Whileforthenetworkcommunicationmodule,consideringthecharactersoftheLANandtherequirementsofthegameitself,thedesignhasadoptedthetwo-layerC/Sstructuretoachievethemutualcommunication,whichincludesthefollowingmodulessuchasthenetworkcommunicationmodulewhichmakestheplayerstosetupthenet-connectionstoplayandchaton-line,theimagedrawingmodulewhichrealizesthechessboardupdatesandthechessmanmovementandtherulemakingmodulewhichrestrictstheplayers'chessmanmovingsteps.Withregardtotheartificialintelligence,itisdividedintofourparts,i.e.,thechessboardpresentation,themovementformulation,thesearchalgorithmandthepositionevaluation.Thegameoffersanaccesstonetworkanditcanbeplayedandpresenteddynamicallyon-lineintheLAN.Theplayersevencanchatwitheachotherinwordssimultaneouslyduringtheplaying.Andthedesignhasaddedthethefunctionsofthechessboardsavingandreading,aswellasthehuman-computerplaying.Actually,itisanintelligentnetbattleplatformofChinesechesswithcertaincapability.Keywords:Chinesechess;networkcommunication;artificialintelligence 目錄HYPERLINK1概述 1HYPERLINK1.1套接字概述 2HYPERLINK1.2象棋游戲概述 3HYPERLINK1.3需求分析 4HYPERLINK1.4可行性分析 4HYPERLINK1.5計(jì)算機(jī)博弈發(fā)展綜述 4HYPERLINK1.6選題的依據(jù)和意義 6HYPERLINK1.7主要研究?jī)?nèi)容 7HYPERLINK1.8需要解決的關(guān)鍵問題 7HYPERLINK1.9論文的組織結(jié)構(gòu) 7HYPERLINK2總體設(shè)計(jì) 9HYPERLINK2.1系統(tǒng)簡(jiǎn)介 9HYPERLINK2.2界面設(shè)計(jì) 9HYPERLINK2.2.1登錄界面設(shè)計(jì) 10HYPERLINK2.2.2游戲大廳界面設(shè)計(jì) 10HYPERLINK2.2.3房間界面設(shè)計(jì) 11HYPERLINK2.3數(shù)據(jù)結(jié)構(gòu) 11HYPERLINK2.3.1棋盤的制定 11HYPERLINK2.4網(wǎng)絡(luò)通信 20HYPERLINK2.4智能對(duì)戰(zhàn) 20HYPERLINK2.5本章小結(jié) 21HYPERLINK3詳細(xì)設(shè)計(jì) 22HYPERLINK3.1著法生成 22HYPERLINK3.1.1棋子的初始化 22HYPERLINK3.1.2走棋 22HYPERLINK3.2網(wǎng)絡(luò)通信 23HYPERLINK3.2.1設(shè)計(jì)思想 23HYPERLINK3.4智能設(shè)計(jì) 23HYPERLINK3.4.1數(shù)據(jù)結(jié)構(gòu) 24HYPERLINK3.4.2局面搜索 24HYPERLINK3.4.3評(píng)估函數(shù) 25HYPERLINK4.4.4代碼實(shí)現(xiàn) 27HYPERLINK3.5本章小結(jié) 28HYPERLINK4測(cè)試 30HYPERLINK4.1登錄模塊測(cè)試 30HYPERLINK4.2傳輸模塊測(cè)試 31HYPERLINK4.3智能模塊測(cè)試 32HYPERLINK4.4本章小結(jié) 32HYPERLINK5結(jié)論 33HYPERLINK5.1研究成果 33HYPERLINK5.2存在的不足 33HYPERLINK5.3未來展望 33HYPERLINK參考文獻(xiàn) 34HYPERLINK致謝 35HYPERLINK外文翻譯 36HYPERLINK1概述電腦游戲就是以計(jì)算機(jī)為操作平臺(tái),通過人機(jī)互動(dòng)形式實(shí)現(xiàn)的能夠體現(xiàn)當(dāng)前計(jì)算機(jī)技術(shù)較高水平的一種新形式的娛樂方式。電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅(qū)的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入。當(dāng)計(jì)算機(jī)發(fā)明以后,電子游戲又多了一個(gè)新的載體。電子游戲在整個(gè)計(jì)算機(jī)產(chǎn)業(yè)的帶動(dòng)下不斷地創(chuàng)新、發(fā)展著。自從計(jì)算機(jī)發(fā)明,向各個(gè)領(lǐng)域發(fā)展,到成為我們現(xiàn)在每天工作和生活必不可少的一部分的這個(gè)過程中,電子游戲也逐步滲入我們每個(gè)人的娛樂活動(dòng)中。而計(jì)算機(jī)已經(jīng)普及的今天,對(duì)于用計(jì)算機(jī)進(jìn)行程序編輯的人來說,開發(fā)屬于自己的游戲,已經(jīng)不再是夢(mèng)想。事實(shí)上,個(gè)人計(jì)算機(jī)軟件市場(chǎng)的大約80%銷售份額是來自游戲軟件。中國象棋發(fā)展至今已有數(shù)千年的歷史了,它是中華民族智慧的結(jié)晶。在我國,中國象棋的普及程度是其它棋類無法比擬的,大至國際、國內(nèi)比賽,小至社區(qū)街道。如今,僅中國就有2億人會(huì)下中國象棋,且中國象棋的發(fā)展趨勢(shì)日益國際化。它集文化、科學(xué)、藝術(shù)、競(jìng)技于一體,有利于開發(fā)人的智慧,鍛煉人的思維,培養(yǎng)人的毅力,增強(qiáng)人的競(jìng)爭(zhēng)意識(shí)。象棋是一項(xiàng)智力游戲,以往都是人和人下棋,現(xiàn)在有了計(jì)算機(jī)我們可以和計(jì)算機(jī)競(jìng)技,人可以與計(jì)算機(jī)進(jìn)行對(duì)弈。人工智能,英文縮寫為AI,最初是在1956年由Dartmouth在學(xué)會(huì)上提出的。機(jī)器博弈被認(rèn)為是人工智能領(lǐng)域最具挑戰(zhàn)性的研究方向之一。早在半個(gè)多世紀(jì)之前,信息論的創(chuàng)始人C.E.香儂教授就提出了為象棋博弈編程的方案,成為機(jī)器博弈的創(chuàng)始人。本象棋游戲軟件的設(shè)計(jì)包括了象棋固有的模式,還能夠在網(wǎng)絡(luò)對(duì)戰(zhàn)的時(shí)候進(jìn)行文字聊天,這使對(duì)戰(zhàn)雙方能夠彼此交流心得增進(jìn)雙方下棋技巧。這大大改善了象棋本身的功能,為廣大的象棋愛好者提供一個(gè)新的對(duì)戰(zhàn)平臺(tái)。而且改善了以往的操作模式,您只需動(dòng)用電腦的鼠標(biāo)鍵盤即可,這使對(duì)弈雙方的操作更加方便快捷。同時(shí)此設(shè)計(jì)在實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)戰(zhàn)的同時(shí)還實(shí)現(xiàn)了人機(jī)對(duì)弈。所有此設(shè)計(jì)功能涵蓋了網(wǎng)絡(luò)對(duì)戰(zhàn)、智能對(duì)戰(zhàn)等。1.1套接字概述套接字(Socket)最初是由加利福尼亞大學(xué)Berkeley分校為UNIX操作系統(tǒng)開發(fā)的網(wǎng)絡(luò)通信接口,Socket指一個(gè)通信端點(diǎn),借助于它,用戶所開發(fā)的Socket應(yīng)用程序,可以通過剛絡(luò)與其它Socket應(yīng)用程序進(jìn)行通信。WindowsSockets是一套開放的、支持TCP/IP等多種網(wǎng)絡(luò)協(xié)議的WINDOWS下網(wǎng)絡(luò)通訊的編程接口,已成為WINDOWS網(wǎng)絡(luò)編程事實(shí)上的標(biāo)準(zhǔn)。UNIX對(duì)進(jìn)程通信問題的全部解答,便構(gòu)成了Socket機(jī)制的全部?jī)?nèi)容。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。Socket是TCP/IP網(wǎng)絡(luò)協(xié)議接口。Socket接口是TCP/IP網(wǎng)絡(luò)最為通用的APT之一。內(nèi)部定義了許多的函數(shù)和例程,應(yīng)用程序通過調(diào)用這些函數(shù)可以和不同網(wǎng)絡(luò)中的應(yīng)用程序進(jìn)行通信而不必?fù)?dān)心網(wǎng)絡(luò)協(xié)議不同所引發(fā)的問題。它可以看成是網(wǎng)絡(luò)通信的一個(gè)端點(diǎn)。在網(wǎng)絡(luò)通信中需要兩個(gè)主機(jī)或兩個(gè)進(jìn)程。通過網(wǎng)絡(luò)傳遞數(shù)據(jù),程序在網(wǎng)絡(luò)對(duì)話的每一端需要一個(gè)Socket。在Windows網(wǎng)絡(luò)編程中,套接字接口主要有3種類型:流式套接字,數(shù)據(jù)報(bào)套接字以及原始套接字。流式套接字定義了一種面向連接的服務(wù),實(shí)現(xiàn)了無差錯(cuò)無重復(fù)的順序數(shù)據(jù)傳輸,無長度限制。數(shù)據(jù)報(bào)套接字接口定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證可靠。原始套接字允許對(duì)低層協(xié)議IP或ICMP直接訪問,主要應(yīng)用網(wǎng)絡(luò)協(xié)議的測(cè)試,例如Windows帶的Ping程序,就是通過ICMP實(shí)現(xiàn)的。在現(xiàn)在的網(wǎng)絡(luò)應(yīng)用中,通信雙方最常見的交互模式便是Client/Server模式??蛻簦?wù)器模式通常采用監(jiān)聽/連接的方式實(shí)現(xiàn)。WindowsSockets為Windows下網(wǎng)絡(luò)異步通訊提供了一種方便的開發(fā)和運(yùn)行環(huán)境。網(wǎng)絡(luò)通信是完全異步的、隨機(jī)的,考慮其并發(fā)性和安全性,而客戶-服務(wù)器模式能很好地解決這些問題。服務(wù)器端應(yīng)用程序在一個(gè)端口監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說,服務(wù)進(jìn)程一直處于監(jiān)聽狀態(tài),當(dāng)有一個(gè)客戶端對(duì)服務(wù)器提出了請(qǐng)求連接,此時(shí)服務(wù)的主進(jìn)程接收到信息后開啟一個(gè)線程專門用來與客戶端進(jìn)行交互并且為客戶端處理數(shù)據(jù),即對(duì)客戶端的請(qǐng)求數(shù)據(jù)做出適當(dāng)?shù)奶幚聿⒎祷靥幚砗蟮男畔ⅰ_@個(gè)新開的線程專門用來與客戶端通信。讀取信息后調(diào)用函數(shù)處理信息并返回。1.2象棋游戲概述在開發(fā)智能象棋游戲程序之前,需要對(duì)象棋游戲的具體規(guī)則進(jìn)行研究,便于理解以及向邏輯的轉(zhuǎn)化。象棋規(guī)則詳細(xì)如下:在下棋時(shí),由拿紅棋的一方先走,然后黑棋再走。雙方輪流各走一步,直至勝負(fù)分出為止。而輪到走棋的一方,將某個(gè)棋子按照一定規(guī)則從一個(gè)位置移動(dòng)到另一個(gè)位置,或者吃掉另一方的棋子而占領(lǐng)該位置,上述操作都應(yīng)當(dāng)算是走了一步。當(dāng)雙方各走完一步,成為一回合。任何棋子在走動(dòng)時(shí),如果一方棋子可以到達(dá)的位置有對(duì)方的棋子,就可以把對(duì)方棋子拿出棋盤(稱為吃子)而換上自己的棋子。只有炮的"吃子"方式與它的走法不同:它和對(duì)方棋子之間必須隔一個(gè)子(無論是自己的還是對(duì)方的),具備此條件才能"吃掉"人家。一定要注意,中隔一個(gè)棋子,這個(gè)棋子俗稱“炮架子”。一方的棋子攻擊對(duì)方的將(帥),并且在下一步能把它吃掉,俗稱“將軍”。被“將軍”的一方必須立即“應(yīng)將”,即用自衛(wèi)的步法曲化解被“將軍”的狀態(tài)。如果被“將軍”而無法“應(yīng)將”,就算被“將死”,輸?shù)舯揪?。輪到走棋的一方將(帥)雖沒被對(duì)方“將軍”,卻被禁在一個(gè)位置上無路可走,同時(shí)己方其他棋子也都不能動(dòng),就算被“困死”,同樣輸?shù)舯揪?。將(帥):在一局游戲中,將和帥是雙方竭力爭(zhēng)奪的目標(biāo)。它只能在“九宮”之內(nèi)活動(dòng),可以上下左右的移動(dòng),但是每次走動(dòng)只向上下左右。但是將和帥不能同時(shí)出現(xiàn)一豎線上直并且中間沒有其它棋子,否則判定走的一方輸棋。士(仕):士(仕)是將(帥)的貼身保鏢,它也同樣只能在“九宮”內(nèi)移動(dòng)。并且士的移動(dòng)只能是“九宮”內(nèi)的斜線。象(相):象(相)的主要作用是防守,保護(hù)自己的將(帥)。它的走法是每次循對(duì)角線走兩格。俗稱“象走田”。象(相)的活動(dòng)范圍限于“河界”以內(nèi)的本方陣地,不能過河,且如果它走的“田”字中央有一個(gè)棋子的時(shí)候,就不能走,俗稱“塞象眼”。馬:馬在走動(dòng)的方法是先橫或豎著走上一格,隨后只能向斜線走一格,就像平時(shí)人們所說的馬走日子。馬一次可以選擇的行走落點(diǎn)有多達(dá)8個(gè)。但是當(dāng)馬橫或豎走一格的時(shí)候該位置上已經(jīng)有一個(gè)棋子了,那么這就發(fā)生了別馬腿的問題。馬就不能走到目的地。車:車的行走是最簡(jiǎn)單的,無論是橫或者豎都能行,前提是只要當(dāng)中沒有其它棋子,距離不限。而車也無疑是象棋中最有價(jià)值的棋子了。炮:炮是象棋中最有技巧的棋子,他在移動(dòng)時(shí)和車一樣。但是在吃子方面他必須和要吃掉的子中間隔一個(gè)任意棋子才可以。卒(兵):卒是象棋中個(gè)數(shù)最多的一個(gè)棋子,在過河之前只能向前不能后退,并且只能向前移動(dòng)一步。而在過河之后,雖然同樣不能后退,但是可以左右移動(dòng)。這樣卒在過了和之后威力會(huì)大大增加。1.3需求分析 隨著計(jì)算機(jī)技術(shù)的發(fā)展,人們生活水平的提高,網(wǎng)絡(luò)棋類游戲作為網(wǎng)絡(luò)游戲的一個(gè)獨(dú)特的分支,也備受廣大網(wǎng)游玩家的喜愛,通過網(wǎng)絡(luò),人們可以在更大的范圍內(nèi)和他人對(duì)弈,增強(qiáng)自己的棋藝水平,和文化交流。在各個(gè)地方都有自己的局域網(wǎng),而大家在生活之余下一盤中國象棋也就成為娛樂的首選。同時(shí)計(jì)算機(jī)的發(fā)展也十分迅速。人們自然也很希望可以和計(jì)算機(jī)比一比智力的高低。而與計(jì)算機(jī)進(jìn)行象棋博弈也就是最好的方式了。 通過以上簡(jiǎn)單的分析,為了滿足用戶的各種需求,既可以網(wǎng)絡(luò)對(duì)戰(zhàn)聊天,又可以人機(jī)對(duì)戰(zhàn)的網(wǎng)絡(luò)與單機(jī)結(jié)婚的中國象棋就有了開發(fā)的必要了。1.4可行性分析 完成本系統(tǒng)需要的硬件與軟件兩方面支持。硬件方面需要服務(wù)器一臺(tái)。個(gè)人電腦作為服務(wù)器就可以使用。軟件方面,由于只是簡(jiǎn)單的局域網(wǎng)聯(lián)機(jī),利用vc6.0與access數(shù)據(jù)庫開發(fā)工具即可實(shí)現(xiàn)。而操作系統(tǒng)只需要是WindowsXP及以上就可以。較之大型的象棋游戲運(yùn)行的依賴降低,減少了不必要的浪費(fèi)。本系統(tǒng)主要是為了方便人們?cè)诓栌囡埡蟮男蓍e娛樂而開發(fā)的。主要使用了MFC框架與簡(jiǎn)單易用的access數(shù)據(jù)庫。MFC具有強(qiáng)大的封裝性保證了程序的簡(jiǎn)單快捷。提高了軟件的開發(fā)效率。1.5計(jì)算機(jī)博弈發(fā)展綜述計(jì)算機(jī)可以說是人類在近代最為偉大的發(fā)明了。他方便了人們的工作,娛樂了人們的生活。在最初,計(jì)算機(jī)只是做為一個(gè)運(yùn)算的工具,將人們從重復(fù)的勞動(dòng)中解放了出來。隨著科技的進(jìn)步,時(shí)代的發(fā)展。計(jì)算機(jī)的運(yùn)算速度也越來越快,體積也越來越小。慢慢的從實(shí)驗(yàn)室中走了出來,走到了千家萬戶。而與此同時(shí),計(jì)算機(jī)的功能也在不斷的豐富著。從之前的單純計(jì)算演變到了集工作,生活,娛樂為一體的“電腦”。而作為一個(gè)電腦,一些科學(xué)家就會(huì)想到如果讓他自己思考會(huì)怎么樣。而這也就是人工智能(AI)。人工智能作為電腦的一個(gè)重要研究方向不論是軍事方面還是娛樂工作生活方面都有極為重要的作用。而這也是我選擇中國象棋與機(jī)器博弈的一個(gè)原因。那么,判斷計(jì)算機(jī)是否具有人工智能最簡(jiǎn)單也是最有趣的辦法就是下棋比賽了。讓一個(gè)人與機(jī)器和另一個(gè)人分別下兩盤棋,如果那個(gè)人無法簡(jiǎn)單的分辨出哪個(gè)是人哪個(gè)是機(jī)器,那么我們就可以認(rèn)為這個(gè)程序有一定的人工智能了。但是完全的人工智能例如人類的情感之類還是很難的。機(jī)器博弈作為一個(gè)挑戰(zhàn)無窮的領(lǐng)域,作為人工智能領(lǐng)域的小白鼠,在國外已經(jīng)掀起一場(chǎng)“搏殺”。最新的深藍(lán)計(jì)算機(jī)重1270公斤,32個(gè)微處理器。在1997年,首次擊敗了世界第一的棋手加里·卡斯帕羅夫。雖然他是作為國際象棋的人機(jī)博弈,但是中國象棋無論是在規(guī)則還是棋子上都有相似的地方。1957年,Bernstein設(shè)計(jì)并完成了第一個(gè)完整的國際象棋機(jī)器博弈程序。一秒可以運(yùn)算出之后的200步左右。并且它可以走出相當(dāng)正確的棋路。至此,人類歷史上第一個(gè)計(jì)算機(jī)博弈程序出現(xiàn)了。在1967年,MacHackVI程序由麻省理工學(xué)院研制出來。并且成功的在一次錦標(biāo)賽上祭拜了另一名人類選手。而這也是計(jì)算機(jī)第一次擊敗人類選手的記錄。在這之后人們寫出的程序越來越復(fù)雜,人類想要戰(zhàn)勝電腦的難度也越來越大。最終,在蘇格蘭,機(jī)器博弈程序終于第一次贏了國際象棋大師。這一次雖然但腦只勝了一局,但這也是一個(gè)新的開端。為之后的象棋程序提供了好的開始。也為之后的國際象棋程序提供了一個(gè)良好的開端。在80年代,新的計(jì)算機(jī)程序“深思”由美國的卡內(nèi)基梅隆大學(xué)開始研究。在隨后的93年,它成功擊敗了當(dāng)時(shí)世界最優(yōu)秀的女棋手。而真正將人機(jī)博弈提升到最高地步的就是有卡內(nèi)基梅隆大學(xué)所研究的“深藍(lán)”,它有著當(dāng)時(shí)最強(qiáng)大的配置。存儲(chǔ)了大量的棋譜,能在一秒中內(nèi)計(jì)算將近2億步。最終,在舉世矚目下,深藍(lán)成功以2勝1負(fù)3平擊敗了當(dāng)時(shí)的最強(qiáng)國際象棋大師斯帕羅夫。成為機(jī)器博弈的最頂端。標(biāo)志著國際象棋歷史的新時(shí)代。也標(biāo)志著人類在人工智能上的重大突破。隨著人們的計(jì)算機(jī)技術(shù)的不斷進(jìn)步,以及程序的更新,電腦博弈的能力也越來越強(qiáng)大。計(jì)算速度也越來越快。不斷的在各大比賽中擊敗人類棋手。而國際象棋中的機(jī)器博弈也日漸成熟。而作為中國的國粹之一中國象棋,它的人機(jī)博弈的研究則遠(yuǎn)遠(yuǎn)的落后于國際象棋。在上世紀(jì)末,我跟臺(tái)灣的一些學(xué)者才開始對(duì)中國象棋的人機(jī)博弈研究。由于有了國際象棋的經(jīng)驗(yàn),加上這兩類棋在規(guī)則上的一定相似,最終,在1981年,第一篇研究中國象棋的文章出現(xiàn)了,介紹并分析了中國象棋的棋局評(píng)估。而這篇文章開啟了中國象棋人機(jī)博弈的新篇章。臺(tái)灣大學(xué)的許舜欽教授于八十年代中期開始了對(duì)中國象棋機(jī)器博弈程序的全面研究工作。在他1991年的兩篇論文中,總結(jié)并介紹了到當(dāng)時(shí)為止幾乎所有的搜索算法,并且指出了這些電腦象棋搜索算法的不足和人們對(duì)這些算法存在的誤區(qū)。這些研究成果為以后計(jì)算機(jī)象棋的發(fā)展做好了鋪墊,至今仍在指導(dǎo)著人們進(jìn)行計(jì)算機(jī)象棋的研究和實(shí)驗(yàn)工作。許舜欽教授也因自己所作的巨大貢獻(xiàn)而被稱為中國計(jì)算機(jī)象棋之父。最近十幾年,在中國大陸的一些高校、單位、個(gè)人對(duì)中國象棋機(jī)器博弈研究投入了大量的工作,涌現(xiàn)了一大批優(yōu)秀的象棋軟件,如中山大學(xué)研究生涂志堅(jiān)的“縱馬奔流”,北京陳朝陽的“象棋旋風(fēng)”,趙明陽的“象棋奇兵”,黃晨的“象眼”等等。其中值得一提的是東北大學(xué)的“棋天大圣”,這款軟件是由深藍(lán)的設(shè)計(jì)者之一,號(hào)稱深藍(lán)之父的華人許峰雄博士參與的團(tuán)隊(duì)研究開發(fā)出來的,曾在2006年的計(jì)算機(jī)博弈奧林匹克競(jìng)賽中獲得過冠軍。上海機(jī)器博弈研究所的黃晨憑個(gè)人興趣開發(fā)出來的“象眼”引擎掛在“象棋巫師”的界面上,具有很高的對(duì)戰(zhàn)能力,可以說是棋力最強(qiáng)的非商業(yè)化軟件。1.6選題的依據(jù)和意義近來隨著計(jì)算機(jī)的快速發(fā)展,各種各樣的電腦游戲?qū)映霾桓F,使得我們能有更多更豐富的娛樂項(xiàng)目,而棋類游戲能起到鍛煉人的思維和修身養(yǎng)性的作用,而且棋類游戲水平頗高。而“深藍(lán)”無疑是現(xiàn)階段最具有代表性的人機(jī)博弈程序。而以“深藍(lán)”為契機(jī),各種各樣的象棋程序出現(xiàn)在了市場(chǎng)上。并且深受人們的喜愛。越來越多的具有智能的機(jī)器進(jìn)入了人類的生活,人工智能的重要性如今顯而易見。自己對(duì)人工智能比較感興趣,而基于socket編程的智能象棋網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)這個(gè)課題,正好提供給我這樣一個(gè)研究的機(jī)會(huì),通過對(duì)人工智能中博弈方面的研究(人機(jī)對(duì)弈),讓我在簡(jiǎn)單的人機(jī)對(duì)弈全局設(shè)計(jì)以及具體到相關(guān)算法上有了深入的了解。人工智能屬于計(jì)算機(jī)科學(xué)的領(lǐng)域,它以計(jì)算機(jī)技術(shù)為基礎(chǔ),近幾十年來,它的理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域也正在不斷擴(kuò)大,顯示出強(qiáng)大的生命力。人工智能大致可以分成幾個(gè)學(xué)科,它們每一個(gè)都是獨(dú)特的,但是它們常常又互相結(jié)合起來完成設(shè)計(jì)任務(wù),這時(shí),這些學(xué)科之間的差別就變的很模糊。人工智能在專家系統(tǒng),自然語言理解,自動(dòng)定理證明,自動(dòng)程序設(shè)計(jì),人工智能在機(jī)器人學(xué)、模式識(shí)別、物景分析、數(shù)據(jù)庫的智能檢索、機(jī)器下棋(實(shí)質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。而這個(gè)課題就是和人工智能中的博弈論領(lǐng)域緊密相關(guān)的。1.7主要研究?jī)?nèi)容1.利用Socket和TCP/IP協(xié)議等,結(jié)合象棋對(duì)弈的特點(diǎn),設(shè)計(jì)一套切實(shí)可行網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)通信協(xié)議。2.制定棋盤及狀態(tài)數(shù)據(jù)結(jié)構(gòu),通過對(duì)象棋規(guī)則的研究,轉(zhuǎn)化成計(jì)算機(jī)邏輯,編碼實(shí)現(xiàn)象棋游戲程序的著法。3.利用博弈樹算法及評(píng)估函數(shù)等,實(shí)現(xiàn)象棋人機(jī)對(duì)弈。1.8需要解決的關(guān)鍵問題1.利用網(wǎng)絡(luò)通信技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)戰(zhàn)功能。2.對(duì)弈的同時(shí)能進(jìn)行網(wǎng)絡(luò)聊天。3.實(shí)現(xiàn)人機(jī)對(duì)弈。1.9論文的組織結(jié)構(gòu)本文共分為六章:第一章是引言,說明本課題的意義、目的、主要研究?jī)?nèi)容、范圍及應(yīng)解決的問題第二章是概述,主要介紹了本文研究的具體背景、研究意義、國內(nèi)外研究進(jìn)展,以及本文主要研究的內(nèi)容和組織結(jié)構(gòu)安排。第三章是總體設(shè)計(jì),主要介紹了此設(shè)計(jì)的整體設(shè)計(jì),以及各個(gè)模塊依賴的理論依據(jù)等。第四章是詳細(xì)設(shè)計(jì),從著法生成,網(wǎng)絡(luò)通信,智能設(shè)計(jì)等方面詳細(xì)介紹了此程序的具體實(shí)現(xiàn)。第四章是測(cè)試,從登錄,傳輸,智能幾個(gè)模塊詳細(xì)介紹了測(cè)試的過程,保證程序正常運(yùn)行。第五章是結(jié)論,概述了本文的主要研究成果,客觀地指出存在的不足之處并對(duì)未來的研究提出了展望。2總體設(shè)計(jì)2.1系統(tǒng)簡(jiǎn)介本系統(tǒng)為基于Socket編程的智能象棋網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái),其以網(wǎng)絡(luò)通信原理結(jié)合中國象棋的規(guī)則設(shè)計(jì)完成,并結(jié)合了人機(jī)對(duì)弈,是一款能夠?qū)崿F(xiàn)局域網(wǎng)內(nèi)雙人聯(lián)機(jī)對(duì)弈的智能象棋游戲程序。本系統(tǒng)使用的操作系統(tǒng)為Windows7。采用MicrosoftVisualStudio6.0下的MFC編譯環(huán)境開發(fā)。主要包括界面、人工智能和通信三大部分。界面部分便于用戶更準(zhǔn)確把握整個(gè)局面;人工智能部分主要體現(xiàn)計(jì)算機(jī)的下棋思路,實(shí)現(xiàn)人機(jī)對(duì)弈;通信部分即Socket通信,實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)弈。系統(tǒng)整體框架如圖2-1所示:中國象棋中國象棋界面設(shè)計(jì)人工智能主程序聊天界面設(shè)計(jì)人工智能主程序聊天網(wǎng)絡(luò)對(duì)戰(zhàn)網(wǎng)絡(luò)對(duì)戰(zhàn)圖2-1程序框架圖2.2界面設(shè)計(jì)使用MFC框架制作程序界面,并利用繪圖工具對(duì)界面進(jìn)行美化。界面是程序給用戶的第一印象,應(yīng)該簡(jiǎn)潔明了。程序主要界面設(shè)計(jì)如下。2.2.1登錄界面設(shè)計(jì)登錄界面主要包括注冊(cè)和登錄,客戶可以點(diǎn)擊注冊(cè)新賬號(hào),可以輸入正確賬號(hào)和密碼進(jìn)入程序進(jìn)行游戲。如圖2-2所示:圖2-2登錄界面2.2.2游戲大廳界面設(shè)計(jì)游戲大廳如圖2-3所示,客戶登錄到服務(wù)器后,在客戶端大廳接收并顯示大廳所有玩家的信息。大廳左邊的圖形界面顯示房間是否有人,是否還有空閑位置,戰(zhàn)斗是否已經(jīng)開始。若房間還有位置,客戶可進(jìn)入開始比賽。右邊圖形界面顯示了大廳所在客戶的游戲信息。客戶可以在大廳內(nèi)聊天,大廳內(nèi)所有人可以看到接收到其他人的聊天信息。圖2-3游戲大廳2.2.3房間界面設(shè)計(jì)客戶進(jìn)入房間后,同樣在右邊界面顯示該客戶的信息,在房間里用戶可以聊天。滿2個(gè)人就可以開始象棋的比賽。當(dāng)結(jié)束比賽,應(yīng)當(dāng)立即更新這個(gè)房間和大廳的用戶數(shù)據(jù)列表以及用戶分?jǐn)?shù)。用戶可以在每個(gè)房間內(nèi)聊天,聊天信息可應(yīng)當(dāng)只在這個(gè)房間內(nèi)廣播。其他的房間或者大廳內(nèi)其他客戶不能看到這個(gè)房間內(nèi)的情況。2.3數(shù)據(jù)結(jié)構(gòu)2.3.1棋盤的制定下棋的地方,叫做“棋盤”。在棋盤上,共有豎線九條,橫線十條,他們互相交叉,而棋子就擺在它們的交叉點(diǎn)上。在棋盤的中間有一條空白地帶,作為楚河漢界。也就是棋子過河的依據(jù)。兩端的中間,也就是兩端第四條到第六條豎線之間的正方形部位,以斜交叉線構(gòu)成“米”字方格的地方,叫做“九宮”(應(yīng)為它恰好有九個(gè)交叉點(diǎn))。這里面就是將和士的活動(dòng)范圍坐標(biāo)方式,它是國際象棋常用的表示方法,把每個(gè)格子按坐標(biāo)編號(hào),只要知道起始格子和到達(dá)格子,就確定了著法,這種表示方式更方便也更合理,而且還可以移植到其他棋類游戲中。中國象棋也可以用這種方法來表示,本程序?qū)⒉捎米鴺?biāo)方式。本系統(tǒng)定義了一個(gè)Point類型的類,用Point.x用來表示棋盤上每個(gè)格點(diǎn)在窗口的橫坐標(biāo),和用Point.x來表示棋盤每個(gè)格點(diǎn)在窗口縱坐標(biāo)。用Point來表示棋盤每個(gè)格點(diǎn)在整個(gè)窗口的具體位置。Point的每個(gè)元素存儲(chǔ)棋盤上是否有棋子。這種表示方法簡(jiǎn)單易行。按此方法棋盤的初始情形如下所示:intChessTableBlack1[10][9]={ 2,3,5,6,1,6,5,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, 14,0,14,0,14,0,14,0,14, 0,11,0,0,0,0,0,11,0, 0,0,0,0,0,0,0,0,0, 9,10,12,13,8,13,12,10,9,};給所有棋子定義一個(gè)值:#defineB_KING1//黑帥#defineB_CAR2//黑車#defineB_HORSE3//黑馬#defineB_CANON4//黑炮#defineB_BISHOP5//黑士#defineB_ELEPHANT6//黑象#defineB_PAWN7//黑卒#defineR_KING8//紅帥#defineR_CAR9//紅車#defineR_HORSE10//紅馬#defineR_CANON11//紅炮#defineR_BISHOP12//紅士#defineR_ELEPHANT13//紅象#defineR_PAWN14//紅兵3.3.2規(guī)則算法馬走日字,相飛田字,七種棋子,七種不同的走法,映射到程序中來,必須有一個(gè)函數(shù)來約束其行動(dòng)。本系統(tǒng)中的運(yùn)用bool型ChessRule()函數(shù)來設(shè)置規(guī)則約束,當(dāng)用戶點(diǎn)擊拿起棋子,在再次點(diǎn)擊目的地時(shí)程序?qū)⒄{(diào)用函數(shù)ChessRule()來判斷著法是否可行,不可行返回false,反之則返回true。函數(shù)的參數(shù)(x1,y1)為原棋子坐標(biāo),(x2,y2)為目的坐標(biāo),info1,2為兩坐標(biāo)點(diǎn)信息,當(dāng)info1表示的棋子顏色同與info2時(shí)(紅色值:1-7,黑色值:11-17),即“吃”己方子,直接返回false。將(帥):首先判斷走步是超出活動(dòng)范圍,將(帥)的活動(dòng)范圍為“九宮”,當(dāng)x0<3或x7>10超出活動(dòng)范圍,同理y3>6、y3<6時(shí),系統(tǒng)提示玩家走棋出錯(cuò)。 if(nTargetID==R_KING)//老將見面 { if(nFromX!=nToX) returnFALSE; for(i=nFromY+1;i<nToY;i++) if(position[i][nFromX]!=NOCHESS) returnFALSE; } else { if(nToY>2||nToX>5||nToX<3) returnFALSE;//目標(biāo)點(diǎn)在九宮之外 if(abs(nFromY-nToY)+abs(nToX-nFromX)>1) returnFALSE;//將帥只走一步直線: }士(仕):同將(帥)相同,判斷是否在在“九宮”之內(nèi)。若超出活動(dòng)范圍,系統(tǒng)提示走棋錯(cuò)誤。若在活動(dòng)范圍之內(nèi),走棋成功。其他走棋系統(tǒng)提示走棋出錯(cuò)。 if(nToY<7||nToX>5||nToX<3) returnFALSE;//士出九宮 if(abs(nFromY-nToY)!=1||abs(nToX-nFromX)!=1) returnFALSE; //士走斜線象(相):首先判斷走步是否超出活動(dòng)范圍,象(相)的活動(dòng)范圍為本方陣地,若超出活動(dòng)范圍,系統(tǒng)提示走棋錯(cuò)誤。若在活動(dòng)范圍之內(nèi),根據(jù)規(guī)則判斷是否“塞象眼”,若沒有塞象眼,走棋成功,否則系統(tǒng)提示走棋錯(cuò)誤。 if(nToY<5) returnFALSE;//相不能過河 if(abs(nFromX-nToX)!=2||abs(nFromY-nToY)!=2) returnFALSE;//相走田字 if(position[(nFromY+nToY)/2][(nFromX+nToX)/2]!=NOCHESS) returnFALSE;//相眼被塞住了車:當(dāng)不滿足x1=x2或y1=y2時(shí),系統(tǒng)提示走棋錯(cuò)誤。當(dāng)滿足條件時(shí),判斷兩子之間是否還有其他棋子存在,用for循環(huán)語句對(duì)格點(diǎn)(xArray[x1][y1],yArray[x1][y1])和格點(diǎn)(xArray[x2][y2],yArray[x2][y2])之間的所有格點(diǎn)進(jìn)行掃描,若之間所有格點(diǎn)的類型值InfoArray[i][j]=0,表示兩子之間沒有其他棋子,則走棋成功,反之提示走棋錯(cuò)誤。 if(nFromY!=nToY&&nFromX!=nToX) returnFALSE; //車走直線: if(nFromY==nToY) { if(nFromX<nToX) { for(i=nFromX+1;i<nToX;i++) if(position[nFromY][i]!=NOCHESS) returnFALSE; } else { for(i=nToX+1;i<nFromX;i++) if(position[nFromY][i]!=NOCHESS) returnFALSE; } }馬:當(dāng)不滿足馬走日字時(shí),系統(tǒng)提示走棋錯(cuò)誤。當(dāng)滿足條件時(shí),判斷是否蹩馬腿,蹩馬腿則提示走棋錯(cuò)誤。if(!((abs(nToX-nFromX)==1&&abs(nToY-nFromY)==2) ||(abs(nToX-nFromX)==2&&abs(nToY-nFromY)==1))) returnFALSE;//馬走日字 if (nToX-nFromX==2) { i=nFromX+1; j=nFromY; } elseif (nFromX-nToX==2) { i=nFromX-1; j=nFromY; } elseif (nToY-nFromY==2) { i=nFromX; j=nFromY+1; } elseif (nFromY-nToY==2) { i=nFromX; j=nFromY-1; } if(position[j][i]!=NOCHESS) returnFALSE;//絆馬腿炮:當(dāng)沒有吃子時(shí),算法與車相同。當(dāng)吃子時(shí),InfoArray[x2][y2]的值不為0,用for循環(huán)語句對(duì)格點(diǎn)(xArray[x1][y1],yArray[x1][y1])和格點(diǎn)(xArray[x2][y2],yArray[x2][y2])之間的所有格點(diǎn)進(jìn)行掃描,若兩格點(diǎn)之間有一個(gè)格點(diǎn)有棋子,即只存在一個(gè)InfoArray[i][j]的值不為0,則走棋成功,反之提示走棋錯(cuò)誤。if(nFromY!=nToY&&nFromX!=nToX) returnFALSE; //炮走直線: //炮不吃子時(shí)經(jīng)過的路線中不能有棋子 if(position[nToY][nToX]==NOCHESS) { if(nFromY==nToY) { if(nFromX<nToX) { for(i=nFromX+1;i<nToX;i++) if(position[nFromY][i]!=NOCHESS) returnFALSE; } else { for(i=nToX+1;i<nFromX;i++) if(position[nFromY][i]!=NOCHESS) returnFALSE; } } else { if(nFromY<nToY) { for(j=nFromY+1;j<nToY;j++) if(position[j][nFromX]!=NOCHESS) returnFALSE; } else { for(j=nToY+1;j<nFromY;j++) if(position[j][nFromX]!=NOCHESS) returnFALSE; } } } //炮吃子時(shí) else { intcount=0; if(nFromY==nToY) { if(nFromX<nToX) { for(i=nFromX+1;i<nToX;i++) if(position[nFromY][i]!=NOCHESS) count++; if(count!=1) returnFALSE; } else { for(i=nToX+1;i<nFromX;i++) if(position[nFromY][i]!=NOCHESS) count++; if(count!=1) returnFALSE; } } else { if(nFromY<nToY) { for(j=nFromY+1;j<nToY;j++) if(position[j][nFromX]!=NOCHESS) count++; if(count!=1) returnFALSE; } else { for(j=nToY+1;j<nFromY;j++) if(position[j][nFromX]!=NOCHESS) count++; if(count!=1) returnFALSE; } } }卒(兵):紅兵因?yàn)椴荒芎笸?,則y1>y2。當(dāng)過界后可以左右移動(dòng),但每次只能移動(dòng)一個(gè)格點(diǎn),所以當(dāng)y1<5時(shí),滿足x1=x2、y1-y2=1或|x1-x2|=1、y1=y2。當(dāng)不過界即y1>4時(shí),滿足x1=x2、y1-y2=1。同理可以指定黑卒的規(guī)則。 if(nToY>nFromY) returnFALSE;//兵不回頭 if(nFromY>4&&nFromY==nToY) returnFALSE;//兵過河前只能直走 if(nFromY-nToY+abs(nToX-nFromX)>1) returnFALSE;//兵只走一步直線:當(dāng)調(diào)用函數(shù)CreatePossibleMove時(shí)根據(jù)的intnPly,intnSide的值用一個(gè)switch選擇語句來選擇棋子對(duì)應(yīng)的規(guī)則,規(guī)則正確返回true值,程序調(diào)用AddMove更新m_MoveList,并等待用戶的下一步操作。函數(shù)判斷是否獲勝。BOOLRedLive=FALSE,BlackLive=FALSE; for(i=7;i<10;i++) for(j=3;j<6;j++) { if(position[i][j]==B_KING) BlackLive=TRUE; if(position[i][j]==R_KING) RedLive=TRUE; } for(i=0;i<3;i++) for(j=3;j<6;j++) { if(position[i][j]==B_KING) BlackLive=TRUE; if(position[i][j]==R_KING) RedLive=TRUE; } if(!RedLive||!BlackLive) { if(RedLive) { return1; } elseif(BlackLive) { return-1; } } 2.4網(wǎng)絡(luò)通信利用WindowsSocket與其他終端進(jìn)行通信對(duì)戰(zhàn)。VC#提供了Socket類,使用該類,可以容易地實(shí)現(xiàn)局域網(wǎng)內(nèi)的通信,Socket端的TCP實(shí)現(xiàn)。實(shí)現(xiàn)過程可以大致分成這么幾個(gè)步驟(如圖6):(1)初始化Socket。(2)綁定地址。Bind函數(shù)將一個(gè)Socket和一個(gè)本地Socket地址進(jìn)行綁定,其方法是在已經(jīng)創(chuàng)建的Socket上加上本地Socket的地址。(3)發(fā)送數(shù)據(jù)。Send用于在指定的已連接的流套接字上發(fā)送輸出數(shù)據(jù)。(4)接收數(shù)據(jù)。Receive函數(shù)用于在已經(jīng)建立的鏈接上接受對(duì)方來送過來的數(shù)據(jù)。(5)關(guān)閉Socket。圖2-4Socket基本步驟通過設(shè)計(jì)網(wǎng)絡(luò)通信,實(shí)現(xiàn)程序中數(shù)據(jù)的實(shí)時(shí)更新,比如棋子的坐標(biāo)及時(shí)更新,聊天信息及時(shí)接收與發(fā)送等。2.4智能對(duì)戰(zhàn)人機(jī)博弈是人與計(jì)算機(jī)之間的決策計(jì)算過程,焦點(diǎn)在于“人腦”與“電腦”的比拼,它是人工智能的一個(gè)研究分支。智能對(duì)戰(zhàn)部分就是將象棋的基本制勝策略轉(zhuǎn)化為邏輯,利用這些邏輯選擇下棋位置。大體上可以將人機(jī)博弈部分劃分為四部分:程序的總體邏輯就是:通過一個(gè)[9][10]的數(shù)字來保存所有的棋子位置,通過這個(gè)數(shù)組來表示棋盤局面。然后通過程序產(chǎn)生所有合理的下棋方法,并保存起來。在通過預(yù)先存儲(chǔ)好的棋子價(jià)值等對(duì)每一步棋做一個(gè)評(píng)分,最后選擇出一個(gè)最有效最合理的下棋步驟,并表現(xiàn)出來,也就是走棋。而在搜索過程當(dāng)中,也可以使用一些其他的方法提高效率。而最關(guān)鍵的無疑就是評(píng)價(jià)。評(píng)價(jià)的好壞直接影響到了這步棋的好壞。2.5本章小結(jié)本章主要介紹了此程序的概要設(shè)計(jì),以及貫穿整個(gè)設(shè)計(jì)的棋盤制定和規(guī)則設(shè)置。整個(gè)設(shè)計(jì)分為三個(gè)模塊,界面設(shè)計(jì)模塊、網(wǎng)絡(luò)通信模塊、智能對(duì)戰(zhàn)模塊,并對(duì)其功能要求做簡(jiǎn)要分析并給出了系統(tǒng)流程圖。并介紹了棋盤的數(shù)據(jù)結(jié)構(gòu)。本章的設(shè)計(jì)是程序詳細(xì)設(shè)計(jì)的基礎(chǔ),在此基礎(chǔ)上,詳細(xì)設(shè)計(jì)可以對(duì)模塊進(jìn)行細(xì)化,同時(shí)為各個(gè)模塊的實(shí)現(xiàn)提供邏輯支持和技術(shù)支持。3詳細(xì)設(shè)計(jì)本章主要介紹此程序的詳細(xì)設(shè)計(jì),包括著法生成,網(wǎng)絡(luò)通信和智能設(shè)計(jì)等,其中重點(diǎn)介紹了智能設(shè)計(jì)的實(shí)現(xiàn)過程。3.1著法生成3.1.1棋子的初始化當(dāng)用戶準(zhǔn)備游戲時(shí),系統(tǒng)自用調(diào)用Drawimage()函數(shù)載入棋盤,然后系統(tǒng)再自動(dòng)調(diào)用Initchess()函數(shù),申明一個(gè)棋盤的二維數(shù)組,二維數(shù)組中的響應(yīng)值代表相應(yīng)棋子,其中0表示相應(yīng)位置上沒有棋子。完成棋盤二維數(shù)組的初始化后,調(diào)用Initimages()函數(shù)實(shí)現(xiàn)對(duì)棋子的圖像數(shù)組的初始化,把相應(yīng)的棋子圖像在數(shù)組中的位置和棋盤二維數(shù)組中的值相對(duì)應(yīng),最后調(diào)用draw()函數(shù)繪制棋盤和相應(yīng)的棋子。具體過程就是通過兩個(gè)for語句循環(huán)遍歷棋盤二維數(shù)組。在遍歷二維數(shù)組的過程中,把相應(yīng)二維數(shù)組值得圖像載入,通過Drawimage()繪制出來。3.1.2走棋用戶的操作主要通過點(diǎn)擊鼠標(biāo)的消息響應(yīng)來完成的。應(yīng)為本程序使用了MFC的框架來完成,而消息無疑是其中最主要的一部分。用戶的所有操作都應(yīng)當(dāng)對(duì)應(yīng)一個(gè)消息。而不同的操作對(duì)應(yīng)程序不同的處理。例如當(dāng)用戶在某個(gè)位置按下或者松開鼠標(biāo),以及按下并且松開(單擊)鼠標(biāo)都是作為不同的操作。當(dāng)用戶點(diǎn)擊左鍵時(shí),調(diào)用Getlocation()函數(shù)獲得點(diǎn)擊點(diǎn)的坐標(biāo)信息,再根據(jù)棋盤范圍決定是否響應(yīng)此次點(diǎn)擊(通過if()語句來判斷,條件為點(diǎn)擊點(diǎn)在棋盤內(nèi))。對(duì)于有效的點(diǎn)擊,將坐標(biāo)位置賦值給Point類,獲取棋子起始位置時(shí)聲明為Startpoint,棋子最終位置時(shí)聲明為Destpoint。通過DrawEllipse()函數(shù)選中棋子。在獲得棋子起始和最終位置后,通過Canmove()函數(shù)來判斷是否符合象棋規(guī)則,當(dāng)符合后更新,并調(diào)用Draw()實(shí)時(shí)繪制棋子。其中消息響應(yīng)過程如下圖所示:3.2網(wǎng)絡(luò)通信網(wǎng)絡(luò)通信貫穿了本設(shè)計(jì),是本設(shè)計(jì)的核心及基礎(chǔ)。在本設(shè)計(jì)中,在局域網(wǎng)內(nèi)實(shí)時(shí)傳輸棋子坐標(biāo)及棋盤信息,用戶信息和聊天信息。3.2.1設(shè)計(jì)思想在本設(shè)計(jì)中的網(wǎng)絡(luò)通信是通過Socket編程來實(shí)現(xiàn)。在網(wǎng)絡(luò)中,TCP/IP協(xié)議通過IP地址來標(biāo)識(shí)唯一的一個(gè)設(shè)備,通過端口號(hào)來將該設(shè)備的不同程序的信息區(qū)分開來。也就是說通過IP和端口這兩個(gè)屬性確定了一個(gè)唯一的程序。而套接字就是IP與端口的組合。是網(wǎng)絡(luò)通信的基礎(chǔ)。TCP協(xié)議通信的響應(yīng)實(shí)現(xiàn)是需要消息發(fā)送方和消息接收方建立數(shù)據(jù)通信連接(Connection)的。大致過程是首先,服務(wù)器端的應(yīng)用程序需要對(duì)一個(gè)端口進(jìn)行監(jiān)聽,對(duì)其他的另外一個(gè)客戶端的應(yīng)用程序發(fā)出請(qǐng)求后,立即給予回應(yīng),并建立連接(Connection)。而TCP協(xié)議通信的響應(yīng)流程具體為:(1)服務(wù)器端打開對(duì)應(yīng)套接字,監(jiān)聽某一個(gè)端口。(2)啟動(dòng)服務(wù)器,等待用戶的連接,在此時(shí),服務(wù)器主線程應(yīng)當(dāng)處于阻塞的狀態(tài),等待用戶的請(qǐng)求連接。(3)客戶端創(chuàng)建出一個(gè)套接字,寫入服務(wù)器的IP地址與端口號(hào)。(4)這時(shí)客戶端向服務(wù)器請(qǐng)求連接。(5)當(dāng)服務(wù)器接收到客戶端的請(qǐng)求是,服務(wù)器開啟一個(gè)新的進(jìn)程,與客戶端進(jìn)行通信。(6)服務(wù)器和客戶端通過互相的連接套接字讀寫數(shù)據(jù)。(7)通行結(jié)束后,客戶端發(fā)送斷開連接的請(qǐng)求,服務(wù)器接收到后主動(dòng)斷開連接。客戶端也可以直接斷開了。3.4智能設(shè)計(jì)中國象棋的人機(jī)對(duì)戰(zhàn)其實(shí)就是人和機(jī)器博弈的問題,是本設(shè)計(jì)的一個(gè)難點(diǎn)。為了能夠提高機(jī)器的智商,我們需要考慮一下四個(gè)部分:數(shù)據(jù)結(jié)構(gòu);局面搜索;評(píng)估函數(shù);其它技術(shù)。其中其它技術(shù)是指可以使用開局庫,殘局庫,如有相匹配的局面,可以直接使用庫里的棋譜,這個(gè)此設(shè)計(jì)暫時(shí)沒有處理。下面就前三點(diǎn)對(duì)設(shè)計(jì)中的智能部分做詳細(xì)闡述。3.4.1數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)即用來表示棋盤和棋子信息以及坐標(biāo)的方法,和生成走法和特殊局面的方法。前面我們已經(jīng)詳細(xì)介紹了棋盤和棋子的表示。在此只做簡(jiǎn)略概括:中國象棋的棋盤由10條橫線,9條豎線構(gòu)成的90個(gè)交叉點(diǎn)構(gòu)成,棋子有7種類別共32子,并位于90個(gè)交叉點(diǎn)的某些位置。在這里我們用0,1,2到14分別代表空,紅兵,紅車,紅馬,紅炮,紅相,紅士,紅帥,黑卒,黑車,黑馬,黑炮,黑象,黑士,黑將。并將對(duì)應(yīng)的值填在9*10的二維數(shù)組上,就構(gòu)成了棋盤。棋盤的坐標(biāo)就顯示了每個(gè)子的位置,這個(gè)封裝在了chess這個(gè)類里。在chess這個(gè)類里我們還封裝了走法,即一個(gè)子從一個(gè)坐標(biāo)到另一個(gè)坐標(biāo)是否合法。比如士只能斜著走一步,并且不能出九宮,我們通過前后兩個(gè)坐標(biāo)的判斷就能實(shí)現(xiàn)這個(gè)判斷。3.4.2局面搜索機(jī)器博弈對(duì)于計(jì)算機(jī)來說,判斷一個(gè)著法的好壞是一件非常不容易的事情。一個(gè)具有非常優(yōu)異評(píng)估函數(shù)的程序可以只依靠當(dāng)前棋盤局面來確定,哪一方處于領(lǐng)先以及選擇走哪一步會(huì)帶來更大的好處。但對(duì)于中國象棋,在各階段不同類型的局面實(shí)在太多了,幾乎接近于無窮,再加上那么多的規(guī)則和特例,就是評(píng)估函數(shù)再優(yōu)秀的程序也不擅長這種事情,而如今現(xiàn)在電腦的特長是計(jì)算。因此對(duì)象棋程序來說,與其只根據(jù)當(dāng)前棋盤的局面來決定好的著法,不如考慮每一種著法,然后為對(duì)手考慮所有應(yīng)對(duì)著法,就形成了博弈樹。搜索算法對(duì)于整個(gè)下棋引摯來說都是至關(guān)重要的,它如同程序的心臟,驅(qū)動(dòng)著整個(gè)程序。關(guān)于棋類對(duì)弈程序中的搜索算法,已有成熟的α-β搜索算法以及其它一些輔助增強(qiáng)算法(還有眾多基于α-β算法的派生、變種算法)在程序中直接借鑒了α-β搜索算法并輔以了歷史啟發(fā)。可以用一棵“博弈樹”(圖3-1)來表示下棋的過程——樹中每一個(gè)結(jié)點(diǎn)代表棋盤上的一個(gè)局面,對(duì)每一個(gè)局面(結(jié)點(diǎn))根據(jù)不同的走法又產(chǎn)生不同的局面(生成新的結(jié)點(diǎn)),如此不斷直到再無選擇的走法,即到達(dá)葉子結(jié)點(diǎn)(棋局結(jié)束)。中國象棋的博弈樹的模型大概如下圖所示,可以把其中連接結(jié)點(diǎn)的線段看作是著法,不同的著法自然產(chǎn)生不同的局面。圖3-1博弈樹在對(duì)所有可能的位置進(jìn)行搜索時(shí),可以證明,程序不要考慮所有的位置而找到最佳位置,這就是Alpha—Beta剪枝法,其基本思想是:若“或”節(jié)點(diǎn)的α值,不能使其父節(jié)點(diǎn)的β值降低,則該“或”節(jié)點(diǎn)以下的分支樹不要再搜索,稱為β剪枝;若“與”節(jié)點(diǎn)的β值,不能使其父節(jié)點(diǎn)的α值升高,則該“與”節(jié)點(diǎn)以下的分支樹不要再搜索,稱為α剪枝。通過Alpha—Beta剪枝法,就可以使搜索更為快速,提高效率。此設(shè)計(jì)中我每當(dāng)輪到黑方走時(shí),我枚舉每一種可能,作為當(dāng)前結(jié)點(diǎn)的兒子結(jié)點(diǎn),然后再往下擴(kuò)展,紅子的所有走法中選擇對(duì)于紅子最優(yōu)的,然后此時(shí)對(duì)于黑子最優(yōu)的局面就是選擇走那一步。那怎樣才能得出局面的優(yōu)劣呢?就要用到評(píng)估函數(shù)。3.4.3評(píng)估函數(shù)評(píng)估就是給棋局打分,由于在較少的步數(shù)內(nèi),一般難以將對(duì)方將死。在難以判斷輸贏的情況下識(shí)別棋局的好壞,可行的辦法就是對(duì)局面進(jìn)行量化,通過數(shù)值評(píng)判棋局的好壞。它的作用就是給局面打分,評(píng)估局面的優(yōu)劣,和搜索相配合得出最佳走法。由于評(píng)估需要大量的象棋知識(shí),仁者見仁,智者見智,評(píng)估函數(shù)的設(shè)計(jì)便成為機(jī)器博弈中最為人性化的部分。根據(jù)中國象棋自身的特點(diǎn),評(píng)估函數(shù)主要包括棋子價(jià)值、棋子靈活性、棋盤控制、棋子之間的相互關(guān)系、棋子的位置、棋子對(duì)棋盤的控制以及對(duì)將(帥)的威脅保護(hù)等。把這些不同方面的評(píng)價(jià)得分加在一起,就構(gòu)成了一方的價(jià)值總和。如果我們把紅方的價(jià)值總和叫做RedValue,黑方的價(jià)值總和叫做BlackValue,那么一個(gè)局面的估值Value就可以表示為紅方和黑方的價(jià)值差,即返回給搜索引擎的估值。此設(shè)計(jì)的評(píng)估主要涉及到了棋子本身價(jià)值,棋子靈活度分值,棋子之間的相互作用值,棋子的位置附加值,然后這些因素分別乘以某一系數(shù),得出棋盤總體的價(jià)值。棋子的本身價(jià)值評(píng)估,簡(jiǎn)單的說就是評(píng)估雙方都有哪些棋子在棋盤上,然后根據(jù)各棋子的價(jià)值加和。這個(gè)評(píng)價(jià)值要和人類的經(jīng)驗(yàn)相一致,比如,車的值大約等于馬和炮的和,炮的值大約等于士和相的和等,另外,因?yàn)橹袊笃宓膭儇?fù)是依據(jù)帥和將是否存在而確定的,所以通常帥和將的值要設(shè)成非常大的一個(gè)值,遠(yuǎn)大于其他子,量化表示如下:表4-1棋子價(jià)值評(píng)估帥相士炮馬車兵1000000200200450450950130棋子靈活性是指棋子的活動(dòng)范圍,通常越大越好,一匹不能動(dòng)的馬是沒有價(jià)值的,同樣,一個(gè)始終被困的車也價(jià)值不高。棋子靈活性的價(jià)值評(píng)估簡(jiǎn)單的講,就是將每個(gè)棋子所有合法著法數(shù)乘以該棋子每走一步的價(jià)值,再將這些分值加和。其中,e2(P)為靈活性分值,F(xiàn)i為各棋子每靈活性增加一所應(yīng)得的分值,Ni表示可達(dá)到的分值。根據(jù)實(shí)戰(zhàn)經(jīng)驗(yàn),“車”和“炮”可走的位置最多,但有些是重復(fù)的位置;“馬"相對(duì)而言可到達(dá)的位置較少,但可以攻其不備;“仕"和“相”可走的位置相對(duì)較少,并且具有很大的限制,以守為主,對(duì)對(duì)方的攻擊較少。綜上所述,所以我們可以設(shè)它們的位置得分為如下所示:表4-2棋子靈活度分值帥相士炮馬車兵0110221棋子相互作用值:如果某棋子位于對(duì)方棋子一步可達(dá)的運(yùn)行路線上,則認(rèn)為前者被后者威脅,因?yàn)閷?duì)方可以在下步將自己的棋子吃掉,從一步的范圍來看對(duì)被威脅的一方不利。此時(shí),可以考慮給被威脅的一方減去一些分?jǐn)?shù),給威脅對(duì)手的一方加上一些分?jǐn)?shù)。但是在實(shí)際情況中往往因?yàn)楸槐Wo(hù)的情況而無法加分。棋子位置附加值:對(duì)于同一個(gè)棋子來說,它在棋盤上的位置不同,體現(xiàn)出來的價(jià)值也不一樣。一個(gè)兵卒的價(jià)值相對(duì)于馬炮來說很小,但是如果它位于接近對(duì)方九宮的地方,或者直接占據(jù)大堂,那么它的價(jià)值就和馬炮差不多,甚至與車不相上下。而一個(gè)馬如果被堵在某個(gè)地方動(dòng)彈不得,那么它的價(jià)值就要大打折扣。設(shè)計(jì)中對(duì)于評(píng)估函數(shù)的總體價(jià)值實(shí)現(xiàn)可總結(jié)為:總體價(jià)值等于棋子的特殊位置值分值、靈活度的價(jià)值、棋子相互作用值(棋子如果之前的狀態(tài)是被吃,但現(xiàn)在有本方保護(hù)的多于敵方攻擊的,那就加上此子的價(jià)值;反之,減掉此子的價(jià)值)、棋子固有價(jià)值之和(可以吃子加上被吃的價(jià)值,如果自己被吃,減去自己的價(jià)值)。4.4.4代碼實(shí)現(xiàn)主要函數(shù)偽代碼:每當(dāng)紅方下完,輪到黑方下時(shí)調(diào)用blackAI();設(shè)置一個(gè)最小的價(jià)值maxvalue,設(shè)置點(diǎn)ansa,ansbfor每一個(gè)格子上的點(diǎn)a(i,j)如果是黑子for每一個(gè)格子上的點(diǎn)b(di,dj)如果不是黑子 如果a可以到達(dá)b調(diào)用getvalue(a,b)得到值now_value如果now_value>maxvalue更新maxval,更新ansa=a,ansb=b最后黑子從ansa走到ansb下面是getvalue(a,b)函數(shù):定義棋子價(jià)值數(shù)組和棋子靈活度數(shù)組現(xiàn)在的價(jià)值是v=0如果b是紅子,說明a可以吃b,則v加上b的棋子價(jià)值for每個(gè)格子如果是黑子,記錄下來如果是紅子并且可達(dá)bv減去a棋子價(jià)值,并加上20(如果吃過子了,鼓勵(lì)拼子,簡(jiǎn)化局面)for每個(gè)格子cfor每個(gè)黑子d 如果c是紅子,并c可達(dá)d,則d的傷害數(shù)組++;如果c是黑子,并c可達(dá)d,則d的傷害數(shù)組--;如果c是空,并d可達(dá)c,則d的靈活度+=靈活數(shù)組值;對(duì)一些特殊位置的判斷黑馬向前2格,則v+2,1格,則v+1,如果走完后沒有絆腳,則v+11黑車原來不在1,7路,后來在1,7路或者巡河車,過河車,則v+10黑炮當(dāng)頭炮則v+10黑兵2,6路兵第一步v+5;兵過河后每步v+10黑士撐士v+5假定從a走到b后for每個(gè)格子c如果是黑子并能夠?qū)④妚+150for每個(gè)黑子d 如果c紅并c可達(dá)dd的將要傷害數(shù)組++;如果c黑并c可達(dá)dd的將要傷害數(shù)組--;如果c空并d可達(dá)cd將要靈活度+=靈活數(shù)組值;如果傷害數(shù)組>=1&&將要傷害數(shù)組<=0v+此黑子的價(jià)值數(shù)組否則將要傷害數(shù)組>0&&傷害數(shù)組<=0v-此黑子的價(jià)值數(shù)組v+(將要靈活度-靈活度)*0.3回滾到走之前的狀態(tài)返回價(jià)值v3.5本章小結(jié)本章通過對(duì)著法生成、網(wǎng)絡(luò)通信、智能設(shè)計(jì)進(jìn)行詳細(xì)地設(shè)計(jì),為程序的編碼提供充足、具體的邏輯支持和技術(shù)支持。其中著法生成詳細(xì)介紹了棋子的初始化和走棋的實(shí)現(xiàn),通過對(duì)數(shù)據(jù)的及時(shí)更新實(shí)現(xiàn)象棋著法。本章重點(diǎn)詳細(xì)介紹了智能對(duì)戰(zhàn)的實(shí)現(xiàn),從數(shù)據(jù)結(jié)構(gòu),局面搜索,評(píng)估函數(shù)三方面詳細(xì)描述。4測(cè)試使用人工或者自動(dòng)手段來運(yùn)行或測(cè)試某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。軟件測(cè)試的目的是盡可能發(fā)現(xiàn)并改正被測(cè)試軟件中的錯(cuò)誤,提高軟件的可靠性。本系統(tǒng)從以下三個(gè)模塊對(duì)設(shè)計(jì)做簡(jiǎn)單測(cè)試。4.1登錄模塊測(cè)試驗(yàn)證是否輸入合法信息,允許合法登陸,阻止非法登陸。測(cè)試數(shù)據(jù)是用戶名和密碼。先成功注冊(cè)一個(gè)用戶名和密碼,當(dāng)輸入任何一方錯(cuò)誤數(shù)據(jù),系統(tǒng)是否會(huì)報(bào)錯(cuò)。首先用賬號(hào)111,密碼111注冊(cè)一個(gè)合法用戶,如圖4-1所示;當(dāng)密碼不一致時(shí)如圖4-2所示;注冊(cè)成功時(shí)如圖4-3所示。圖4-1注冊(cè)界面圖4-2注冊(cè)失敗圖4-3注冊(cè)成功4.2傳輸模塊測(cè)試此模塊測(cè)試又可以分為聊天模塊測(cè)試和對(duì)戰(zhàn)模塊測(cè)試。聊天模塊中可在大廳中輸出不同文字、數(shù)字,或者游戲界面中輸出,測(cè)試消息是否及時(shí)更新。當(dāng)用戶在游戲大廳聊天框中輸出“你好”,如圖4-4所示,同時(shí)服務(wù)器端能及時(shí)收發(fā)消息并顯示,對(duì)戰(zhàn)模式中任一用戶發(fā)起聊天對(duì)方都能及時(shí)收到消息,對(duì)戰(zhàn)模塊中可測(cè)試每一步走棋,測(cè)試數(shù)據(jù)是否及時(shí)傳送,對(duì)方能否及時(shí)收到數(shù)據(jù)。棋局結(jié)束時(shí),勝負(fù)判斷是否及時(shí),如圖4-5所示。圖4-4聊天測(cè)試 圖4-5勝負(fù)判定測(cè)試對(duì)戰(zhàn)模塊中可測(cè)試每一步走棋,測(cè)試數(shù)據(jù)是否及時(shí)傳送,對(duì)方能否及時(shí)收到數(shù)據(jù)。棋局結(jié)束時(shí),勝負(fù)判斷是否及時(shí)。4.3智能模塊測(cè)試此模塊測(cè)試主要檢測(cè)計(jì)算機(jī)的反應(yīng)速度,主要測(cè)試過程也以此展開。比如測(cè)試計(jì)算機(jī)是否能及時(shí)吃子,能否及時(shí)抓住機(jī)會(huì)將軍等。4.4本章小結(jié)本章從四個(gè)模塊詳細(xì)介紹了測(cè)試的過程,是整體測(cè)試的基礎(chǔ)。在以上測(cè)試的基礎(chǔ)上,對(duì)系統(tǒng)功能進(jìn)行了整體測(cè)試,依次檢驗(yàn)系統(tǒng)功能是否符合系統(tǒng)開發(fā)的目標(biāo)。5結(jié)論本文順序說明了中國智能象棋網(wǎng)上對(duì)戰(zhàn)平臺(tái)的設(shè)計(jì)原理與實(shí)現(xiàn)方法,重點(diǎn)講解了數(shù)據(jù)結(jié)構(gòu)和部分算法,經(jīng)過一段時(shí)間的測(cè)試和除錯(cuò),本系統(tǒng)已能能滿足用戶的一般娛樂需求。5.1研究成果1.通過網(wǎng)絡(luò)技術(shù)的研究,結(jié)合象棋對(duì)弈的特點(diǎn),設(shè)計(jì)出一套切實(shí)可行網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)通信協(xié)議,實(shí)現(xiàn)了遠(yuǎn)程聊天功能和對(duì)戰(zhàn)功能。2.制定出了棋盤及狀態(tài)數(shù)據(jù)結(jié)構(gòu),結(jié)合象棋規(guī)則,編碼實(shí)現(xiàn)象棋游戲程序的著法。3.利用博弈樹搜索算法及評(píng)估函數(shù)等,實(shí)現(xiàn)了計(jì)算機(jī)智能模塊,達(dá)到了象棋人機(jī)對(duì)弈的功能。5.2存在的不足1.沒有使用開局庫,開局時(shí)棋子數(shù)目較多,如果使用開局庫(即現(xiàn)成的棋譜)將大大節(jié)省搜索時(shí)間。2.搜索算法的深度不夠深,還有優(yōu)化的空間。3.對(duì)于一些特殊棋形沒有做評(píng)估,比如連環(huán)馬、空頭炮、重炮等等。5.3未來展望電腦游戲就是以計(jì)算機(jī)為操作平臺(tái),通過人機(jī)互動(dòng)形式實(shí)現(xiàn)的能夠體現(xiàn)當(dāng)前計(jì)算機(jī)技術(shù)較高水平的一種新形式的娛樂方式。游戲必須具有高度的互動(dòng)性。所謂互動(dòng)性是指游戲者所進(jìn)行的操作,在一定程度及一定范圍上對(duì)計(jì)算機(jī)上運(yùn)行的游戲有影響,游戲的進(jìn)展過程根據(jù)游戲者的操作而發(fā)生改變,而且計(jì)算機(jī)能夠根據(jù)游戲者的行為做出合理性的反應(yīng),從而促使游戲者對(duì)計(jì)算機(jī)也做出回應(yīng),進(jìn)行人機(jī)交流。隨著計(jì)算機(jī)技術(shù)普遍提高,相信電腦游戲也能隨之更新?lián)Q代。參考文獻(xiàn)StevenMBobrowski.Oracle7與客戶/服務(wù)器計(jì)算技術(shù)從入門到精通[M].北京:電子工業(yè)出版社,1996.Comer,D,E.用TCP/IP進(jìn)行網(wǎng)際互連[M].北京:電子工業(yè)出版社,2008.Kleninberg.算法設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.王曉鵬.TCP/IP下的Socket及Winsock通信機(jī)制[J].航空計(jì)算技術(shù),2004,2(6):126-128.董正言.面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2010.范孫操,姚垚.象棋競(jìng)賽規(guī)則[M].北京:人民體育出版社,2014年Stanley,B,Lippman.C++Primer[M].北京:人民郵電出版社,2006.成穎.C++程序設(shè)計(jì)語言[M].南京:東南大學(xué)出版社,2008.陳維興,林小茶.C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2009.魏東平,朱連章,于廣斌.C程序設(shè)計(jì)語言[M].北京:電子工業(yè)出版社,2010.致謝首先要感謝我的畢業(yè)設(shè)計(jì)指導(dǎo)老師,在畢業(yè)設(shè)計(jì)階段給予我悉心關(guān)懷和耐心指導(dǎo),盡了一個(gè)導(dǎo)師應(yīng)盡的一切義務(wù),是我的畢業(yè)設(shè)計(jì)能夠順利完成的關(guān)鍵所在。每個(gè)星期都會(huì)檢查我們的畢設(shè)進(jìn)度,給我們講解畢設(shè)上存在的問題,啟發(fā)我們?cè)诋呍O(shè)上的思路。他為人師表的高尚品德、實(shí)事求是的科學(xué)態(tài)度、一絲不茍的治學(xué)作風(fēng)、孜孜不倦的鉆研精神以及敏銳的洞察力和探索新領(lǐng)域的學(xué)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業(yè)單位性與員工工資專項(xiàng)集體合同
- 2025停車場(chǎng)車位買賣合同示范文本
- 2025【標(biāo)準(zhǔn)范本】餐飲連鎖經(jīng)營合同
- 2025技術(shù)轉(zhuǎn)讓合同范本(中英文對(duì)照)
- 2025建筑工人勞動(dòng)合同范本
- 小區(qū)快遞寄存管理制度
- 商貿(mào)銷售流程管理制度
- 工廠宿舍紀(jì)律管理制度
- 醫(yī)院票據(jù)復(fù)核管理制度
- 區(qū)縣人大檔案管理制度
- 《皮膚重建術(shù)》課件
- 2025年中國小麥高筋粉市場(chǎng)調(diào)查研究報(bào)告
- 教育家精神對(duì)高校輔導(dǎo)員專業(yè)化發(fā)展的引領(lǐng):可能性與可行性
- 2024年全球及中國電動(dòng)寬體礦卡行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年初級(jí)人工智能訓(xùn)練師(五級(jí))資格理論考試題庫(含答案)
- 教師名師筆試題庫及答案
- 居間合同代持協(xié)議
- 2025年廣東省東莞市大灣區(qū)教育研究院中考二模英語試題(含答案)
- 安眠藥用藥知識(shí)培訓(xùn)課件
- 店鋪招人合同協(xié)議
- 2025年江西贛州國有資產(chǎn)投資集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
評(píng)論
0/150
提交評(píng)論