




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。五子棋游戲的設(shè)計與實現(xiàn)畢業(yè)0628732基于單片機的溫濕度控制儀的設(shè)計畢 業(yè) 論 文(設(shè) 計)題 目 五子棋游戲的設(shè)計與實現(xiàn) I畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文),是我個人在指導(dǎo)教師的指導(dǎo)下進行的研究工作及取得的成果。盡我所知,除文中特別加以標注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻的個人或集體,均已在文中作了明確的說明并表示了謝意。作
2、者 簽 名: 日 期: 指導(dǎo)教師簽名: 日期: 使用授權(quán)說明本人完全了解 大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉績?nèi)容。作者簽名: 日 期: 學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨立進行研究所取得的研究成果。除了文中特別加以標注引用的內(nèi)容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。對本文的研究做出重要貢獻的個人和
3、集體,均已在文中以明確方式標明。本人完全意識到本聲明的法律后果由本人承擔。作者簽名: 日期: 年 月 日學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向國家有關(guān)部門或機構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán) 大學(xué)可以將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。涉密論文按學(xué)校規(guī)定處理。作者簽名:日期: 年 月 日導(dǎo)師簽名: 日期: 年 月 日注 意 事 項1.設(shè)計(論文)的內(nèi)容包括:1)封面(按教務(wù)處制定的標準封面格式制作)2)原創(chuàng)性聲明3)中文摘要(300字左右)、
4、關(guān)鍵詞4)外文摘要、關(guān)鍵詞 5)目次頁(附件不統(tǒng)一編入)6)論文主體部分:引言(或緒論)、正文、結(jié)論7)參考文獻8)致謝9)附錄(對論文支持必要時)2.論文字數(shù)要求:理工類設(shè)計(論文)正文字數(shù)不少于1萬字(不包括圖紙、程序清單等),文科類論文正文字數(shù)不少于1.2萬字。3.附件包括:任務(wù)書、開題報告、外文譯文、譯文原文(復(fù)印件)。4.文字、圖表要求:1)文字通順,語言流暢,書寫字跡工整,打印字體及大小符合要求,無錯別字,不準請他人代寫2)工程設(shè)計類題目的圖紙,要求部分用尺規(guī)繪制,部分用計算機繪制,所有圖紙應(yīng)符合國家技術(shù)標準規(guī)范。圖表整潔,布局合理,文字注釋必須使用工程字書寫,不準用徒手畫3)畢業(yè)
5、論文須用A4單面打印,論文50頁以上的雙面打印4)圖表應(yīng)繪制于無格子的頁面上5)軟件工程類課題應(yīng)有程序清單,并提供電子文檔5.裝訂順序1)設(shè)計(論文)2)附件:按照任務(wù)書、開題報告、外文譯文、譯文原文(復(fù)印件)次序裝訂五子棋游戲的設(shè)計與實現(xiàn) 摘要 五子棋是起源于我國古代的黑白棋種之一,是一種簡單的娛樂性較強的大眾游戲,深受廣大玩家的喜愛,但同時作為比賽,五子棋游戲還有著深奧的技巧。 本系統(tǒng)的實現(xiàn)采用了C語言的模塊化的程序設(shè)計方式,用Visual C+ 6.0軟件來實現(xiàn)程序的編譯運行。實現(xiàn)黑白兩方分別落子,通過棋盤上方的棋盤動態(tài)信息提示,輪流落子,本系統(tǒng)中游戲的每一個功能在程序中都是一個相對獨立
6、的模塊,比如,棋盤模塊,棋子模塊,選擇游戲模式模塊,悔棋模塊等等在程序中都是獨立的,但它們之間通過邏輯關(guān)系的鏈接又構(gòu)成了一個可以使游戲正常運行的程序。為實現(xiàn)游戲的雙人對戰(zhàn)模式和人機對戰(zhàn)模式,并使得游戲盡量的簡單化,本系統(tǒng)需要達成以下目標:設(shè)計一個簡潔的游戲初始界面;制定合法規(guī)則,使游戲能公正的進行,并且可以斷定勝;支持人機對戰(zhàn)模式,可以是電腦通過人工智能和合法規(guī)則選出最優(yōu)落子位置;可以悔棋,在玩家落子落錯位置時,可按下悔棋鍵進行悔棋。 關(guān)鍵詞五子棋,游戲設(shè)計,C語言,雙人對戰(zhàn),人機對戰(zhàn),人工智能VDesigner and implementation of gobang gameAuthor:
7、 wangyong(Grade11,Class 1, Major in Information and computing science, Mathematics and computer science Dept. Shaanxi University of Technology, Hanzhong 723000,Shaanxi)Tutor: Tuo shouheng Abstract:Gobang is one of the black and white kind of originated in ancient China, is a simple and entertaining
8、stronger mass games, loved by the majority of players, but at the same time as the game, gobang game with profound skills. The implementation of this system has adopted C of modular program design method, using Visual C + + 6.0 software to realize the program compiler running. Implementation of blac
9、k and white two parties move later, respectively, by the board at the top of the dynamic message board, take turns to move later, this game in the system each function in the program is a relatively independent modules, such as, the board module, pawn module, select game mode module, back module and
10、 so on in the program are independent, but the link through the logical relationship between them and form a can make the normal operation of the game program. In order to realize the double mode and man-machine game mode, and make the game as far as possible the simplification, the system needs to
11、achieve the following goals: design a simple game of initial interface;the legal rules, can make the game fair, and you can call;support the man-machine mode, can be a computer by artificial intelligence and legal rules to select the optimal move later;can take back, fall in the players move later f
12、ault location, can press the back button to back. Key words:gobang,Game design,The C Programming Language ,Double against,The man-machine against,Artificial intelligence(AI)目 錄1.緒論11.1 引言11.2 研究的背景及意義11.2.1研究背景11.2.2研究意義11.3 基本目標及主要內(nèi)容12.系統(tǒng)開發(fā)環(huán)境的介紹及選擇12.1 C語言12.2開發(fā)及運行環(huán)境23.需求分析23.1總體需求分析23.2可行性分析2
13、3.2.1技術(shù)可行性分析23.2.2經(jīng)濟可行性分析23.2.3操作可行性分析23.3功能分析24.概要設(shè)計34.1五子棋特點與規(guī)則34.2流程圖34.3雙人模式54.4人機模式54.5智能算法54.6悔棋流程64.7輸贏判斷65.詳細設(shè)計65.1畫出游戲界面65.2畫出棋子85.3設(shè)置棋局規(guī)則105.3.1落子規(guī)則105.3.2悔棋規(guī)則115.3.3輸贏規(guī)則115.4實現(xiàn)雙人對戰(zhàn)125.5悔棋功能125.6判斷輸贏145.7退出游戲165.8實現(xiàn)人機對戰(zhàn)165.8.1先手設(shè)置界面165.8.2電腦智能落子175.8.3可以悔棋、退出215.8.4顯示輸贏215.9各模塊之間的銜接216.總結(jié)2
14、4致謝25參考文獻26VIII1.緒論1.1 引言隨著社會經(jīng)濟和科學(xué)技術(shù)的發(fā)展,計算機已經(jīng)深入到人們?nèi)粘9ぷ骱蜕畹姆椒矫婷?,各種各樣的程序軟件也逐漸進入大眾的生活,比如在閑暇時間的娛樂生活也開始變得被網(wǎng)絡(luò)電子游戲等所充斥。而五子棋則是最受人們歡迎的一款益智類棋局游戲,它的簡單性,娛樂性,競技性注定它是一款火爆的游戲。1.2 研究的背景及意義 1.2.1研究背景五子棋游戲軟件可以分為兩種:一種是網(wǎng)絡(luò)五子棋游戲軟件,另一種是單機五子棋游戲軟件。我設(shè)計的是單機版的五子棋游戲軟件,這款軟件可以供人們在閑暇時間隨時隨地進行娛樂,并提高自己的棋藝,實用性較強。游戲的行棋順序為:黑先、白后,黑棋第一子從天
15、元開始相互依次落子,任一方先在棋盤上形成橫向或豎向或斜向的連續(xù)的顏色相同的五個以上(含五個)棋子則該方為勝。該系統(tǒng)所實現(xiàn)的功能主要有三大功能:游戲選項、游戲設(shè)置、幫助。1.2.2研究意義五子棋是起源于中國古代的傳統(tǒng)黑白棋種,當今社會在不同的地域?qū)ξ遄悠逡灿胁煌姆Q呼,其也是一種必須動用腦力的益智類游戲,所以五子棋可以增強思維能力,提高智力。其中蘊含古典哲學(xué)的高深學(xué)問“陰陽易理”哲理,有利于修身養(yǎng)性,它因為簡單易學(xué)的特點,所以為人民群眾所喜愛,但作為一項高水平的國際比賽,它也有深奧技巧。1.3 基本目標及主要內(nèi)容本系統(tǒng)是根據(jù)傳統(tǒng)五子棋游戲的功能編寫,實現(xiàn)了雙人對戰(zhàn)和人機對戰(zhàn)。主要需實現(xiàn)如下目標:
16、(1)Visual C+ 6.0 環(huán)境的下的C語言編程 (2)五子棋棋盤的設(shè)計 (3)五子棋棋子的設(shè)計 (4)黑白雙方輪流落子的實現(xiàn)(5)棋局的悔棋功能(6)棋局進行時的退出功能(7)勝負的判定 (8)人工智能算法分析2.系統(tǒng)開發(fā)環(huán)境的介紹及選擇2.1 C語言C語言誕生于1972年的美國,在次之前還有A語言(其創(chuàng)造設(shè)計者是一位女性)和B語言。現(xiàn)在C語言成為了世界上使用最廣泛的,最流行的高級程序設(shè)計語言之一。隨著經(jīng)濟與科技的發(fā)展,微型計算機日漸普及,這導(dǎo)致了C語言的版本的多樣化,出現(xiàn)了一些不一致的語言特點。為了改變這種情況,美國國家標準研究所制定
17、推廣了一套ANSI標準,作為現(xiàn)行的C語言標準。常用的編譯軟件有Microsoft Visual C+。 C語言繪圖能力強,具有很好的可移植性,并具備很強的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件。它是數(shù)值計算的高級語言。由文獻1-4可知。2.2開發(fā)及運行環(huán)境編程語言:C語言操作系統(tǒng):Windows 7開發(fā)工具:Microsoft Visual C+ 6.03.需求分析3.1總體需求分析五子棋游戲是一款很符合現(xiàn)代人的休閑特點的益智類游戲,其是我國古代圍棋的的衍生物,本系統(tǒng)主要分為兩部分:雙人人對戰(zhàn)和人機對戰(zhàn)。雙人對戰(zhàn)模式實現(xiàn)的功能:選擇雙人對戰(zhàn),游戲界面,實現(xiàn)雙人輪流落子,棋盤動態(tài)信息顯示,判斷輸贏,
18、重新開始游戲。人機對戰(zhàn)模式實現(xiàn)的功能:選擇人機對戰(zhàn),設(shè)置先手,實現(xiàn)玩家與電腦輪流落子,棋盤動態(tài)信息顯示,判斷輸贏,重新開始游戲。3.2可行性分析3.2.1技術(shù)可行性分析計算機硬件和軟件技術(shù)的飛速發(fā)展,為游戲系統(tǒng)的開發(fā)提供了設(shè)備條件。當前在網(wǎng)絡(luò)上有許多的五子棋軟件可供參考借鑒,而且我自己也熟練地掌握了C語言在Microsoft Visual C+ 6.0環(huán)境下的基本應(yīng)用,因此本游戲的開發(fā)技術(shù)上是完全可行的。3.2.2經(jīng)濟可行性分析該游戲適用于所有人群,開發(fā)該游戲的費用主要包括開發(fā)階段的費用以及今后的運行、維護費用。五子棋游戲簡單易學(xué),為人民群眾喜聞樂見。該游戲功能強大,界面簡單,用戶在使用方面不
19、存在任何障礙。其開發(fā)具有很強的經(jīng)濟性。3.2.3操作可行性分析本游戲適用于 Windows 操作系統(tǒng)之上 , 對于該游戲的推廣使用提供了很好的平臺。該游戲使用C語言編寫,具有很強的移植性,使其可以運行很方便。在操作上主要憑借使用 Windows鍵盤操作,方便簡單。使用前只要對用戶進行簡單的說明即可。3.3功能分析該款游戲主要是由以下五個模塊組成: 五子棋游戲人機對戰(zhàn)雙人對戰(zhàn)悔棋功能退出功能判斷輸贏 圖3.1 游戲功能圖4.概要設(shè)計4.1五子棋特點與規(guī)則 五子棋是兩方之間進行的競技活動,專用棋盤為15*15,五連子的方向為橫、豎、斜;任一方在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五
20、個以上)時即為該方勝利;在棋盤上以對局雙方均不可能形成五連為和棋。黑白雙方依次落子,由黑方先下,由于先下一方在局面上占優(yōu),所以五子棋規(guī)則分為禁手和無禁手兩種。 禁手規(guī)則:禁手是針對先行的黑棋而言,以限制黑棋的先行優(yōu)勢為目的。對局中如果黑棋違反禁手規(guī)則將被判負。以中國五子棋競賽規(guī)則為例,有三三禁手(黑棋一子落下時同時形成兩個或兩個以上的活三,此子必須為兩個活三共同的構(gòu)成子)、四四禁手(黑棋一子落下同時形成兩個以上的沖四或活四)、長連禁手(黑棋一子落下形成一個或一個以上的長連)。無禁手指不對黑棋的先行優(yōu)勢做任何限制。 本系統(tǒng)采用的是無禁手規(guī)則。4.2流程圖游戲開始后,運行過程如下圖4.1所示:電腦
21、落子是否是否玩家落子(白)任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿是電腦先手電腦落子人機對戰(zhàn)否開始游戲雙人對戰(zhàn)是白方落子游戲結(jié)束否是黑方落子任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿否否否是是是玩家落子(黑)任意方向有五子相連或棋盤落滿任意方向有五子相連或棋盤落滿否圖4.1 游戲運行流程圖當系統(tǒng)運行后,首先看到的是一個選擇游戲模式(雙人,人機)的界面,根據(jù)要求選擇后,有兩種情況,第一種是雙人模式,根據(jù)游戲的設(shè)定先黑方落子,然后白方落子,而系統(tǒng)此時需要更新棋盤的狀態(tài)和判斷是否產(chǎn)生輸贏,若是產(chǎn)生則游戲結(jié)束,若沒有產(chǎn)生輸贏,則判斷是否棋盤已經(jīng)落滿棋子,若已經(jīng)落滿棋子,則
22、判定為和棋,否則另一方落子,如此循環(huán),直到產(chǎn)生輸贏或和棋;另一種是人機模式,選擇該模式后,會看到設(shè)置界面,可以選擇誰是先手,有兩種選擇電腦先手、玩家先手,若電腦先手則根據(jù)設(shè)定,電腦執(zhí)黑子先下,之后白方落子,此時因為選擇了電腦先手,所以電腦落子時優(yōu)先進攻,只有在進攻的權(quán)值小于防守的權(quán)值時優(yōu)先防守,(此處涉及到電腦的人工智能,此部分的設(shè)計概要詳見本章節(jié)的電腦智能落子部分),每當棋盤落子后電腦立即更新棋盤的具體信息并判斷是否已經(jīng)產(chǎn)生輸贏若是產(chǎn)生則游戲結(jié)束,若沒有產(chǎn)生輸贏,則判斷是否棋盤已經(jīng)落滿棋子,若已經(jīng)落滿棋子,則判定為和棋,否則另一方落子,如此循環(huán),直到產(chǎn)生輸贏或和棋,玩家先手,則玩家執(zhí)黑子先落
23、子,然后電腦落白子,此時電腦落子優(yōu)先防守,其他部分與電腦先手一樣。4.3雙人模式此模式較為簡單是后面實現(xiàn)人機模式的鋪墊。首先用循環(huán)語句和制表符畫出整個棋盤,然后利用繪圖函畫出棋子,然后制定自己的落子規(guī)則(包含輸贏規(guī)則),并用循環(huán)語句實現(xiàn)黑白子的輪流下子,如此就實現(xiàn)了雙人對戰(zhàn)的目的。4.4人機模式本系統(tǒng)中此功能的實現(xiàn)是在雙人模式已經(jīng)實現(xiàn)的情況下實現(xiàn),只是把雙人模式中的其中一個人換成電腦操作(電腦落子算法參照4.5智能算法),在每次落子之后,調(diào)用判斷輸贏函數(shù)判斷是否產(chǎn)生輸贏或和棋,如果產(chǎn)生則游戲結(jié)束,如果沒有產(chǎn)生則繼續(xù)游戲,直到產(chǎn)生輸贏或和棋,或退出游戲為止。4.5智能算法電腦博弈模仿人類下棋,傳
24、統(tǒng)算法使用的是博弈樹。兩人游戲,甲有很多位置選擇落子,乙也有很多相對應(yīng)的下法,如果所有的方式列表就構(gòu)成一棵樹,就是搜索樹,也被稱為博弈樹。樹的根節(jié)點先手的第一步位置,下面的走棋方法構(gòu)成樹的子節(jié)點,直到游戲結(jié)束。此處的五子棋棋盤是15×15的,搜索空間是一個巨大的數(shù)字。博弈算法的任務(wù)是在這些呈幾何級數(shù)上升的子節(jié)點中選出最優(yōu)的節(jié)點,從而贏得比賽。整個算法分為搜索和估值兩部分,估值是評估所有可能的落子位置的評價,選擇評價最高的位置為最終落子位置。本系統(tǒng)的估值函數(shù)為單點估值函數(shù)。單點估值函數(shù)的基本思想是評估當前的靜態(tài)情況下,遍歷棋盤,對棋盤的每個非空的位置的四個方向進行分析評估(橫向、豎向、
25、兩條對角線),統(tǒng)計每一個棋型的數(shù)量(連五型、沖四型、活四型、活三型、死三活二型),不同的棋型根據(jù)實際情況中玩游戲時的經(jīng)驗確定一個不同的權(quán)重值,最后還有位置分數(shù)的加權(quán)(不僅要考慮空點對自己的價值,也要考慮其對對方的價值),如此就獲得了棋盤上的空點的估值。單點估值函數(shù)只能估計一個空點的價值,對當前的棋局,把所有的空點對己方的有利程度總和和不利程度總和相關(guān)就可得出全局價值。由文獻5. 6. 14可知。本系統(tǒng)中設(shè)定了以下幾種棋型和相應(yīng)的權(quán)值:表4.1 防守棋型及其相應(yīng)權(quán)值表棋型連五型沖四型活四型活三型死三活二型權(quán)值2000001100600024020表4.2 進攻棋型及其相應(yīng)權(quán)值表棋型連五型沖四型活
26、四型活三型死三活二型權(quán)值2000000200024000850125根據(jù)不同棋型的權(quán)值可以計算出棋盤的各點的價值之和,用Vij表示點(i,j)的總價值,用Aij表示點(i,j)的進攻價值,用Dij表示點(i,j)的防守價值,用dt表示防守優(yōu)先級數(shù),at表示進攻優(yōu)先級數(shù),其中防守和進攻優(yōu)先級數(shù)是電腦在比較點(i,j)的進攻總價值和防守總價值后賦予的,給總價值大的類型設(shè)定優(yōu)先級數(shù)為2,而價值小的則為1。則點(i,j)的進攻總價值為該點的所有進攻棋型的和,計算方法為:;該點的防守總價值為該點的所有防守棋型的和,計算方法為:。則該點的總價值為:。用此方法就可遍歷棋盤上的所有的空點的總價值,然后比較所有
27、總價值的大小,總價值最大的點即為對自己最有利的點。4.6悔棋流程悔棋是棋局類游戲的必須的功能,在游戲時,如果有人悔棋時,立即調(diào)用悔棋功能函數(shù),本系統(tǒng)中由于棋盤上的所有的交點都有一個二維數(shù)組的一組數(shù)據(jù)與之相對應(yīng),而且每次落子后會有一個二維數(shù)組記錄相應(yīng)的信息(步數(shù),棋子顏色),因此此功能的實現(xiàn)依靠的是C中的循環(huán)函數(shù)。4.7輸贏判斷本模塊功能的實現(xiàn)依靠的是單點估值函數(shù)的思想,即每次落子之后,遍歷以該點為坐標原點以5為半徑的棋盤的交點,分析原點的四個方向(橫向、豎向、兩條對角線),判斷是否有連五型棋型,若有則產(chǎn)生輸贏,若沒有則遍歷整個棋盤,查看是否棋盤已經(jīng)下滿,若已下滿則判定為和棋,否則繼續(xù)游戲。5.
28、詳細設(shè)計5.1畫出游戲界面本模塊是整個游戲系統(tǒng)的平臺性模塊,之后所有的功能都將依附該模塊來體現(xiàn),主要需實現(xiàn)棋盤的繪制與游戲說明。本游戲系統(tǒng)選擇的是15*15的棋盤,利用制表符字符串打印輸出棋盤,并且特別標出天元位置,與四方星位。游戲的說明主要有棋局動態(tài)信息顯示,如何移動光標,如何實現(xiàn)落子,如何悔棋以及退出。利用switch()語句,當光標坐標(x,y)中x=0,y=0則畫出棋盤的左上角“”,y=14則畫出棋盤的右上角“”,0<y<14時則出棋盤的上邊線“”;x=3或x=11時,y=0則畫出棋盤的左邊線“”,y=3或y=11則畫出棋盤上的四方星位“”,y=14則畫出棋盤的右邊線“”,
29、0<y<14時則出棋盤的交叉點“”;x=7,y=7則畫出棋盤的天元“”,0<y<14時則出棋盤的交叉點“”;x=14,y=0則畫出棋盤的左下角“”,y=14則畫出棋盤的右下角“”,0<y<14時則出棋盤的下邊線“”;當x為0到14的其他的值時,y=0則畫出棋盤的左邊線“”,y=14則畫出棋盤的右邊線“”,y為0到14的其他的值時畫出棋盤的交叉點“”7。棋盤上的交點稱為位點(包括交叉點,天元,四方星位,邊界交點)。具體實現(xiàn)如以下程序(僅部分主要代碼):void printnode(NODE chessboard15, int x, int y) / 打印棋盤上
30、的一個點 textcolor(CHESSBOARD); if(chessboardxy.step=0) if (x=cursor.x && y=cursor.y) textcolor(CURSOR); / 如果光標在這個點,改成光標顏色switch(x) case 0: if(y=0) printf(""); / 左上角 else if(y=14) printf(""); / 右上角 else printf(""); / 上邊線 break; case 3: if(y=0) printf("");
31、/ 左邊線 else if(y=3 | y=11) printf(""); / 星位 else if(y=14) printf(""); / 右邊線 else printf(""); / 交叉點 break; case 7: if(y=0) printf(""); / 左邊線 else if(y=7) printf(""); / 星位 else if(y=14) printf(""); / 右邊線 else printf(""); / 交叉點 break;
32、 case 11: if(y=0) printf(""); / 左邊線 else if(y=3 | y=11) printf(""); / 星位 else if(y=14) printf(""); / 右邊線 else printf(""); / 交叉點 break; case 14: if(y=0) printf(""); / 左下角 else if(y=14) printf(""); / 右下角 else printf(""); / 下邊線 break
33、; default: if(y=0) printf(""); / 左邊線 else if(y=14) printf(""); / 右邊線 else printf(""); / 交叉點 void printchessboard(NODE chessboard15) / 輸出整個棋盤 int i,j; char letter="n" for(i=0;i<15;i+) / 行 textcolor(TEXTS); / 改為文本顏色 printf("%2d",15-i); / 打印行坐標 for(j
34、=0;j<15;j+) / 列 printnode(chessboard,i,j); / 打印棋盤的每一塊 textcolor(TEXTS); printf("n"); textcolor(TEXTS); /改為文本顏色printf(" %s",letter); /打印列坐標printf(" 移動:方向鍵 下棋:ENTERn 悔棋:U 退出:F12n"); 圖5.1 人機對戰(zhàn)玩家先手初始界面圖5.2 人機對戰(zhàn)電腦先手初始界面 雙人對戰(zhàn)模式游戲的初始界面與人機對戰(zhàn)電腦先手初始界面一樣。5.2畫出棋子本模塊是在畫出棋盤的基礎(chǔ)下實現(xiàn)的
35、,要求依次輪流畫出黑白兩種顏色的棋子,且位置必須在棋盤的位點之上,并且要求必須先畫黑棋,位置為棋盤的天元位。 根據(jù)棋盤上光標所在位置來下棋,如果當前光標所在位置上有棋子,則不能在此處落子,則需按下鍵盤上的方向鍵來移動光標到?jīng)]有棋子,且有利于局勢的位置按下Enter(回車鍵)落子7。具體實現(xiàn)如以下程序(僅部分主要代碼):else if(chessboardxy.color=0) / 如果是白棋 if (x=cursor.x && y=cursor.y) textcolor(SELECTEDWHITE); / 被選中的白棋 else textcolor(WHITECHESS); /
36、 未被選中的黑棋 printf(""); / 打印棋子 else if (x=cursor.x && y=cursor.y) textcolor(SELECTEDBLACK); / 被選中的黑棋 else textcolor(BLACKCHESS); / 未被選中的黑棋 printf(""); / 打印棋子 光標的移動(實現(xiàn)在棋盤上任意位置落子):bool getmove(NODE chessboard15) / 獲取光標移動,并響應(yīng) / 當按下悔棋、下子、退出熱鍵時,返回true char c; for(;) c=getch(); if
37、(c=-32) switch(getch() case 72: / 上 cursor.x-; if(cursor.x<0) cursor.x=0; renew(chessboard,cursor.x+1,cursor.y); renew(chessboard,cursor.x,cursor.y); break; case 80: / 下 cursor.x+; if(cursor.x>14) cursor.x=14; renew(chessboard,cursor.x-1,cursor.y); renew(chessboard,cursor.x,cursor.y); break; c
38、ase 75: / 左 cursor.y-; if(cursor.y<0) cursor.y=0; renew(chessboard,cursor.x,cursor.y+1); renew(chessboard,cursor.x,cursor.y); break; case 77: / 右 cursor.y+; if(cursor.y>14) cursor.y=14; renew(chessboard,cursor.x,cursor.y-1); renew(chessboard,cursor.x,cursor.y); break; case 134: / 退出 quit=true;
39、 return true; else if(c=13 && chessboardcursor.xcursor.y.step=0) return true; / 下子 else if(c='U' | c='u') / 悔棋 regret=true; return true; 5.3設(shè)置棋局規(guī)則本模塊實現(xiàn)的是游戲的規(guī)則,包括落子規(guī)則,悔棋規(guī)則,輸贏規(guī)則。5.3.1落子規(guī)則本系統(tǒng)的實現(xiàn)整體上采用的是無禁手五子棋游戲規(guī)則。落子規(guī)則包括落子位置與落子順序。落子位置其實是對第一顆棋子的限定,即第一顆棋子必須落在棋盤的天元(也就是棋盤的最中間),而后只規(guī)定了必
40、須落在棋盤的位點之上,不能落在空白處,而落子順序其實是從第一次下子開始的,且第一顆棋子必須是黑子,之后黑白棋就開始輪流落子,直到產(chǎn)生輸贏為止。本系統(tǒng)中涉及到的五子棋的基本棋型有防御棋型和進攻棋型兩類,具體有:連五型,活四型,沖四型,活三型,死三活二型五種,具體如下:圖5.3 連五型(黑棋)圖5.4 活四型(黑棋) 圖5.5 沖四型(黑棋) 圖5.6 活三型(黑棋) 圖5.7 死三活二型(黑棋)5.3.2悔棋規(guī)則悔棋規(guī)則應(yīng)用于游戲的整個過程,在游戲產(chǎn)生輸贏之前的任意時候,只要玩家按下悔棋熱鍵,就可進行悔棋,且本系統(tǒng)中不限制悔棋步數(shù)。具體實現(xiàn)見5.5悔棋功能。5.3.3輸贏規(guī)則本系統(tǒng)的輸贏規(guī)則是基
41、于無禁手五子棋的輸贏規(guī)則,即對黑子沒有任何限制,只要形成連五型棋子就判定為勝利,當棋盤上無法落子時仍然沒有產(chǎn)生輸贏,則判定為平局。具體實現(xiàn)見5.6判斷輸贏。5.4實現(xiàn)雙人對戰(zhàn)本模塊實現(xiàn)的是兩個人類玩家在一臺電腦上進行游戲,本部分不涉及電腦的AI,只需要電腦提供一個平臺(顯示器的功能),本部分的實現(xiàn)較為簡單,在以上兩個模塊即畫出棋盤模塊和畫出棋子模塊功能實現(xiàn)的基礎(chǔ)上,兩個玩家就可以自由的進行游戲,雙方通過依次控制電腦鍵盤上的方向鍵移動光標到自己認為合理的地方落子。每當棋盤上有棋子落下以后,電腦需立即判斷是否已經(jīng)產(chǎn)生輸贏,如果沒有產(chǎn)生輸贏則在棋盤動態(tài)信息顯示處顯示該黑(或白)方下子,如果已經(jīng)產(chǎn)生輸
42、贏則在盤動態(tài)信息顯示處顯示白(或黑)方勝利!此時按任意鍵即可重新開始游戲。5.5悔棋功能本模塊的創(chuàng)建是根據(jù)現(xiàn)實中玩五子棋游戲時的實際存在的情況而編寫的,當玩家下棋后,發(fā)現(xiàn)不是最佳的位置,或者是棋子沒有落在自己想要落的位置,發(fā)生偏離,此時就需要用到本模塊的功能:悔棋功能。本游戲系統(tǒng)中,悔棋的功能實現(xiàn)主要是通過數(shù)組chessboard15來完成的,當系統(tǒng)接收到悔棋的消息時調(diào)用悔棋函數(shù)void beback(NODE chessboard15, int step) ,在雙人模式和人機模式中悔棋的方式是一樣的,當棋盤上的棋子少于3個時,按下悔棋鍵時,由于本系統(tǒng)的默認設(shè)置(即第一顆棋子為黑棋,且位置必須
43、在天元位置),所以系統(tǒng)判定此時想悔棋的是白棋,故而去掉一顆白棋,棋盤為開始游戲的初始界面,即棋盤上只有天元位置有一顆黑棋,此時光標也回到剛剛白棋的位置。當棋子多余3個時,按下悔棋鍵后,由于系統(tǒng)無法判定是白棋想悔棋,還是黑棋想悔棋,故而一次撤銷兩步,即當該黑棋落子時,按下了悔棋鍵,會撤銷兩步,即撤銷了白棋剛剛走的一步和黑棋剛剛走的那一步,光標也回到剛剛黑棋的位置。此時如果是黑棋想悔棋則黑棋重新落子在其他不同于剛剛撤銷的那個位置,白棋則見招拆招,而如果是白棋想悔棋則黑棋把棋子下在原來的位置,此時白棋就可以重新落子在其他的位置,以此來實現(xiàn)悔棋8。本游戲系統(tǒng)中沒有限制悔棋的步數(shù),可以無限制悔棋,直到第
44、一步。具體實現(xiàn)程序如下(僅部分主要代碼):void beback(NODE chessboard15, int step) /悔棋 int i,j,tempx,tempy; if(step=1) return; / 如果才開始,直接返回 if(step>2) / 如果下了多于兩步 for(i=0;i<15;i+) / 搜索前兩步所下的位置 for(j=0;j<15;j+) if(chessboardij.step=step-1) / 找到上一步 chessboardij.step=0; / 清空棋子標志 renew(chessboard,i,j); / 重繪棋盤 else i
45、f(chessboardij.step=step-2) / 找到上兩步 chessboardij.step=0; / 清空棋子標志 tempx=cursor.x; / 記錄光標位置 tempy=cursor.y; cursor.x=i; / 將光標回復(fù)到兩步前的位置 cursor.y=j; renew(chessboard,i,j); / 重繪棋盤 renew(chessboard,tempx,tempy); / 重繪光標原本所在處 else if(step=2) /如果下了一步 for(i=0;i<15;i+) /搜索上一步所下的位置 for(j=0;j<15;j+) if(ch
46、essboardij.step=step-1) / 找到上一步 chessboardij.step=0; / 清空棋子標志 renew(chessboard,i,j); / 重繪棋盤 tempx=cursor.x; / 記錄光標位置 tempy=cursor.y; cursor.x=7; cursor.y=7; / 將光標移回棋盤中央renew(chessboard,i,j); / 重繪棋盤 renew(chessboard,tempx,tempy); / 重繪光標原本所在處 圖5.8 悔棋A圖5.9 悔棋B5.6判斷輸贏本模塊的功能是每當棋子落下后判斷是否已經(jīng)產(chǎn)生輸贏,若已產(chǎn)生則重新開始游戲
47、,若沒有產(chǎn)生則判斷是否已經(jīng)落子225步,如果已經(jīng)225步,則判定為雙方平局,并重新開始游戲,如果沒有達到225步,則繼續(xù)游戲。本部分功能的實現(xiàn)主要也是通過二維數(shù)組chessboard15,在雙人對戰(zhàn)和人機對戰(zhàn)中都調(diào)用bool inside(int x, int y) ,int line(NODE chessboard15, int dirt, int x, int y, int color) ,bool win(NODE chessboard15, int x, int y, int color) 三個函數(shù)來具體的實現(xiàn)該功能13。具體實現(xiàn)程序如下(僅部分主要代碼):bool inside(in
48、t x, int y) / 如果不在棋盤內(nèi)返回false,否則返回true if(x<0 | x>14 | y<0 | y>14)return false; return true; int line(NODE chessboard15, int dirt, int x, int y, int color) / 判斷顏色為color的點(x,y),在dirt方向上有多少相連的同色棋子 int i; for(i=0;chessboardx+directiondirt0y+directiondirt1.step>0 && chessboardx+dir
49、ectiondirt0y+directiondirt1.color=color;i+) x=x+directiondirt0; y=y+directiondirt1; if(!inside(x,y) return i; return i; bool win(NODE chessboard15, int x, int y, int color) / 判斷是否有人贏棋 if(line(chessboard,0,x,y,color)+line(chessboard,1,x,y,color)>3) return true; if(line(chessboard,2,x,y,color)+line
50、(chessboard,3,x,y,color)>3) return true; if(line(chessboard,4,x,y,color)+line(chessboard,5,x,y,color)>3) return true; if(line(chessboard,6,x,y,color)+line(chessboard,7,x,y,color)>3) return true;return false; 產(chǎn)生平局時:gotoxy(0,0); / 如果下了225步還沒人贏棋則平局 printf(" "); gotoxy(0,0); /光標回到原點位置
51、printf(" 平局!");圖5.10 判斷輸贏白棋贏圖5.11 判斷輸贏黑棋贏5.7退出游戲該模塊的功能為,在游戲進行的任意時候,只要按下退出熱鍵(F12),就可以退出游戲,直接退到游戲的初始界面,但是當游戲退出后,再次開始游戲時,為新的一局游戲,不能接著上次的繼續(xù)玩,即沒有設(shè)置保存功能8。if(quit) return; / 如果按了退出熱鍵則返回 5.8實現(xiàn)人機對戰(zhàn)該模塊功能的實現(xiàn)是在實現(xiàn)畫出棋盤模塊、畫出棋子模塊、設(shè)置棋局規(guī)則模塊、悔棋功能模塊、判斷輸贏模塊而的基礎(chǔ)之上而實現(xiàn)的。實現(xiàn)了上述模塊以后,開始設(shè)計并實現(xiàn)人機對戰(zhàn)功能。本游戲系統(tǒng)中此模塊主要分為了以下幾個功
52、能模塊:1 設(shè)置先手功能2 電腦智能落子功能3 可以悔棋、退出4 顯示輸贏5.8.1先手設(shè)置界面在打開本游戲系統(tǒng)之后,選擇人機對戰(zhàn)之后利用system("mode con cols=64 lines=24")窗體函數(shù)設(shè)置窗口大小,然后用system("color 2b")函數(shù)設(shè)置窗體背景顏色為綠色,然后在窗體中打印出窗口內(nèi)容,即設(shè)置先手,1.玩家先手,2.電腦先手和3.返回上級菜單,當從鍵盤上輸入1,即本局游戲選擇玩家先手,開始游戲電腦優(yōu)先防御;當從鍵盤上輸入2,即本局游戲選擇電腦先手,開始游戲電腦優(yōu)先進攻;當從鍵盤上輸入3,即返回上一層目錄菜單,不進行游戲9。具體實現(xiàn)程序如下(僅部分主要代碼):/*對手是電腦*/ showsubmenu(); / 選擇誰是先手 void showsubmenu() /打印子菜單 system("cls");system("mode co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能電網(wǎng)工程設(shè)計考核試卷
- 涂料行業(yè)新技術(shù)展望考核試卷
- 辦公室財務(wù)報表編制與分析考核試卷
- 筆的筆身材料創(chuàng)新考核試卷
- 珠海市高一上學(xué)期期末考試數(shù)學(xué)試題
- 四川華新現(xiàn)代職業(yè)學(xué)院《建筑構(gòu)造與制圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安汽車職業(yè)大學(xué)《臨床技能綜合訓(xùn)練(Ⅲ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 潞安職業(yè)技術(shù)學(xué)院《劍橋商務(wù)英語(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省贛州市南康區(qū)唐西片區(qū)達標名校2025年初三模擬物理試題含解析
- 石家莊理工職業(yè)學(xué)院《健美操主項實踐教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年煤礦安全規(guī)程(修訂)
- 工業(yè)機器人現(xiàn)場編程與仿真 6.1 創(chuàng)建動態(tài)夾具Smart組件
- 溫泉養(yǎng)老、養(yǎng)生及醫(yī)療保健項目可行性研究報告
- 信息安全與數(shù)據(jù)備份
- 城市居住區(qū)規(guī)劃設(shè)計規(guī)范2018版全文
- 情感信息傳播模型-深度研究
- 外賣騎手交通安全培訓(xùn)
- JC-T 1099-2023 硫鋁酸鈣改性硅酸鹽水泥
- 《TAVR的臨床應(yīng)用》課件
- 成語故事-此地?zé)o銀三百兩-課件
- 《精子戰(zhàn)爭》作者羅賓·貝克
評論
0/150
提交評論