版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 五子棋是一種益智游戲,它能增強(qiáng)玩家的思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。</p><p> 本系統(tǒng)的五子棋設(shè)置了三種模式,自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)。三種模式中都有菜單操作、落子、判斷勝負(fù)、勝利方棋子閃爍、棋局重現(xiàn)、返回上級(jí)菜單和退出的功能,自我對(duì)戰(zhàn)中設(shè)有悔棋的功能;人機(jī)對(duì)戰(zhàn)采用貪心
2、算法,分別算出人和機(jī)器的最佳落子位置的分?jǐn)?shù),并進(jìn)行相比,當(dāng)機(jī)器最佳落子位置分?jǐn)?shù)高時(shí),機(jī)器落子的位置是它自己的分?jǐn)?shù)最高的位置,如果人的最佳落子位置的分?jǐn)?shù)高于機(jī)器,那么機(jī)器就占用人的最佳落子位置;網(wǎng)絡(luò)對(duì)戰(zhàn)模式中一方先建立游戲,作為游戲的服務(wù)器端,對(duì)方作為客戶(hù)端連接服務(wù)器端,發(fā)送五子棋信息主要是五子棋落子坐標(biāo)和存儲(chǔ)棋子的顏色。三種模式都以雙向鏈表?xiàng)5男问酱鎯?chǔ)棋子的坐標(biāo)和落子的顏色,并且有一個(gè)二維數(shù)組形式的模擬棋盤(pán)存儲(chǔ)某個(gè)位置的落子情況(用顏色
3、來(lái)標(biāo)記,如果沒(méi)有落子就設(shè)置為NONE)。本系統(tǒng)使用Linux環(huán)境由C語(yǔ)言來(lái)編寫(xiě),調(diào)用Ncurses庫(kù)來(lái)完成五子棋游戲的綜合編碼。</p><p> 關(guān)鍵詞:自我對(duì)戰(zhàn);人機(jī)對(duì)戰(zhàn);網(wǎng)絡(luò)對(duì)戰(zhàn);Linux;Ncurses</p><p><b> ABSTRACT</b></p><p> Gobang is a puzzle game, it
4、can enhance player's thinking ability, improve intelligence, and high in philosophy, helps to one’s self-cultivation. </p><p> This version of the gobang is set up three kinds of mode, man_vs_man, man_v
5、s_computer and network play. Three kind of modes all have function of the menu operation, chess down, victory judgment, chess flash when win, chess reshow, returning to previous menu and exiting. Man_vs_man mode has take
6、n back function. Man_vs_computer mode adopts greedy algorithm that calculates scores of man and computer of their best location to put down chess respectively. Compare man’s score and score of computer, if</p><
7、;p> Keywords:Man_vs_man; man_vs_computer; Network play; Linux; Ncurses</p><p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p> ABSTRACTII</p><
8、p><b> 1 概述1</b></p><p> 1.1 開(kāi)發(fā)背景、目的與意義1</p><p> 1.2 國(guó)內(nèi)外概況1</p><p> 1.3 開(kāi)發(fā)目標(biāo)2</p><p> 2 系統(tǒng)需求分析與總體設(shè)計(jì)4</p><p> 2.1 系統(tǒng)需求分析4</p>
9、;<p> 2.1.1 系統(tǒng)概述4</p><p> 2.1.2 功能需求分析4</p><p> 2.1.3 非功能需求分析5</p><p> 2.2系統(tǒng)總體方案的建立5</p><p> 2.3系統(tǒng)開(kāi)發(fā)方法與開(kāi)發(fā)平臺(tái)6</p><p> 2.3.1 開(kāi)發(fā)方法6</p&g
10、t;<p> 2.3.2 開(kāi)發(fā)平臺(tái)6</p><p> 2.4 本章小結(jié)6</p><p><b> 3.詳細(xì)設(shè)計(jì)7</b></p><p> 3.1 數(shù)據(jù)存儲(chǔ)模塊7</p><p> 3.1.1 數(shù)據(jù)結(jié)構(gòu)7</p><p> 3.1.2 相關(guān)數(shù)據(jù)7</
11、p><p> 3.1.3相關(guān)功能7</p><p> 3.2 界面模塊8</p><p> 3.2.1 相關(guān)數(shù)據(jù)8</p><p> 3.2.2相關(guān)功能8</p><p> 3.3 其他公共功能函數(shù)模塊10</p><p> 3.3.1 相關(guān)功能10</p>&
12、lt;p> 3.4 游戲功能模塊12</p><p> 3.4.1 游戲主要操作流程圖12</p><p> 3.4.2 自我對(duì)戰(zhàn)模塊13</p><p> 3.4.3 人機(jī)對(duì)戰(zhàn)模塊14</p><p> 3.4.4網(wǎng)絡(luò)對(duì)戰(zhàn)模塊17</p><p> 3.5 本章小結(jié)18</p&g
13、t;<p> 4. 原型系統(tǒng)介紹19</p><p> 4.1 測(cè)試流程19</p><p> 4.2 功能測(cè)試19</p><p> 4.2.1 繪圖功能測(cè)試19</p><p> 4.2.2 按鍵功能測(cè)試19</p><p> 4.2.3 游戲功能測(cè)試20</p>
14、<p> 4.3 成果展示20</p><p> 5. 總結(jié)與展望23</p><p><b> 參考文獻(xiàn)26</b></p><p><b> 致 謝27</b></p><p><b> 1 概述</b></p><p&g
15、t; 1.1 開(kāi)發(fā)背景、目的與意義</p><p> 五子棋是起源于中國(guó)古代的傳統(tǒng)的黑白棋中之一。五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。隨著Internet的迅速發(fā)展,國(guó)家也大力支持游戲產(chǎn)業(yè),由于網(wǎng)絡(luò)游戲的強(qiáng)大市場(chǎng)驅(qū)動(dòng)力,它必將成為最有活力的新文化事業(yè),隨著Internet的普及,互聯(lián)網(wǎng)游戲作為網(wǎng)絡(luò)娛樂(lè)的一個(gè)重要內(nèi)容,是互聯(lián)網(wǎng)技術(shù)與互聯(lián)網(wǎng)經(jīng)營(yíng)不可忽略的一個(gè)組成部分。然而,當(dāng)前網(wǎng)絡(luò)上
16、流傳的五子棋游戲功能并不完善,其中最主要的問(wèn)題就是人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)不能夠一起實(shí)現(xiàn),根據(jù)Linux環(huán)境下游戲開(kāi)發(fā)的需求以及五子棋游戲的廣泛受眾和經(jīng)典程度,Ncurses是基于GNU/Linux發(fā)展的,它提供字符終端處理庫(kù),所以用基于Ncurses庫(kù)的Linux環(huán)境下五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)為課題,實(shí)現(xiàn)自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)功能的綜合。</p><p> 隨著游戲行業(yè)正在逐漸成熟并多遠(yuǎn)化,前途一片光明,Linu
17、x操作系統(tǒng)圖形化界面的出現(xiàn),其使用越來(lái)越廣泛,然而,Linux環(huán)境下的游戲處于一種缺乏狀態(tài),當(dāng)你在Linux下工作的時(shí)候,休息期間玩一下游戲也是一種放松的方式,在Linux環(huán)境下開(kāi)發(fā)游戲(以經(jīng)典的五子棋為例)有其重要的經(jīng)濟(jì)價(jià)值和戰(zhàn)略意義,也可以借此課題對(duì)自己所學(xué)的知識(shí)進(jìn)行一次綜合的運(yùn)用和拓展,加強(qiáng)自己的專(zhuān)業(yè)知識(shí)水平和綜合運(yùn)用能力以及動(dòng)手能力。</p><p><b> 1.2 國(guó)內(nèi)外概況</b&
18、gt;</p><p> 電腦發(fā)明后,人們?cè)诘谝粫r(shí)間就嘗試用它來(lái)打敗弈林高手。1956年美國(guó)洛斯阿拉莫斯的研究人員首次編寫(xiě)了象棋對(duì)弈戰(zhàn)勝了一個(gè)入道剛6個(gè)月的棋手,但已經(jīng)具有劃時(shí)代的意義。</p><p> 在國(guó)內(nèi)市場(chǎng),游戲業(yè)潛力巨大,句統(tǒng)計(jì)顯示,中國(guó)在2006年一年時(shí)間內(nèi)就產(chǎn)生了大約340萬(wàn)新生玩家,游戲人口的整體數(shù)量接近3750萬(wàn),其中90%是網(wǎng)絡(luò)游戲玩家。面對(duì)游戲產(chǎn)業(yè)發(fā)達(dá)國(guó)家的游戲
19、企業(yè)有序、高效的進(jìn)入中國(guó)市場(chǎng)的現(xiàn)狀,國(guó)內(nèi)的游戲公司由于不能有效溝通合作,經(jīng)常容易陷入孤立無(wú)援、內(nèi)部競(jìng)爭(zhēng)、競(jìng)相抬價(jià)和最終被各個(gè)擊破的局面。近年來(lái),中國(guó)的游戲產(chǎn)業(yè)領(lǐng)域得到了長(zhǎng)足發(fā)展,隨著政府監(jiān)管力度的不斷加強(qiáng),各種法規(guī)、條例的不斷出臺(tái),都表明中國(guó)游戲娛樂(lè)產(chǎn)業(yè)的春天的到來(lái),因此,開(kāi)發(fā)自主的游戲,是推動(dòng)國(guó)內(nèi)游戲娛樂(lè)產(chǎn)業(yè)的關(guān)鍵。</p><p> 電腦已經(jīng)深入到日常生活的方方面面,比如文字處理、信息管理輔助設(shè)計(jì)、<
20、/p><p> 教育培訓(xùn)以及游戲娛樂(lè)等,對(duì)于Linux操作系統(tǒng)來(lái)說(shuō),這些在其上的應(yīng)用沒(méi)有像在Windows上那么常見(jiàn)。雖然Linux有了很大的發(fā)展,但很多人對(duì)其并不熟悉,有的商業(yè)用戶(hù)選擇了Linux,這說(shuō)明,Linux已相當(dāng)穩(wěn)定,正逐漸被商業(yè)用戶(hù)所接收。商業(yè)用戶(hù)看中的是Linux的可靠性和免費(fèi)性。但是,鑒于人們對(duì)Linux的觀望態(tài)度和不信任態(tài)度(在人們的意念中花錢(qián)的東西比不花錢(qián)的東西可靠)。但是,隨著Linux優(yōu)秀
21、的性能的不斷發(fā)揮,它將會(huì)逐漸被廣大的商業(yè)用戶(hù)所認(rèn)識(shí)。</p><p> Linux計(jì)算機(jī)操作系統(tǒng)是自由軟件和開(kāi)放源代碼的最著名的例子。現(xiàn)在Linux內(nèi)核支持從個(gè)人電腦到大型主機(jī)甚至包括嵌入式在內(nèi)的各種硬件設(shè)備。Linux操作系統(tǒng)從一開(kāi)始只是個(gè)人狂熱愛(ài)好產(chǎn)物,隨著Linux越來(lái)越流行,越來(lái)越多的電腦廠商開(kāi)始在其銷(xiāo)售的電腦上預(yù)安裝Linux,Linux的用戶(hù)中也有普通電腦用戶(hù),Linux操作系統(tǒng)也開(kāi)始慢慢搶占桌面電
22、腦操作系統(tǒng)市場(chǎng)。此外Linux也在嵌入式電腦市場(chǎng)上擁有優(yōu)勢(shì),低成本的特性是Linux深受用戶(hù)歡迎。KED和GNOME等桌面系統(tǒng)使Linux更像一個(gè)Mac或Windows之類(lèi)的操作系統(tǒng),而不同于其他使用CLI(Command Line Interface,命令行界面)的Unix操作系統(tǒng),它提供完善的圖形用戶(hù)界面。</p><p> 游戲開(kāi)發(fā)商雅達(dá)利及ID Software都有過(guò)為其旗下的游戲開(kāi)發(fā)過(guò)Linux桌面版
23、本。Linux Game Publishing亦有專(zhuān)門(mén)為L(zhǎng)inux平臺(tái)撰寫(xiě)游戲,并致力于把其他在Windows平臺(tái)撰寫(xiě)的游戲編碼移植至Linux平臺(tái),以及為移植游戲提供使用權(quán)。Linux操作系統(tǒng)比Windows操作系統(tǒng)快,能有更好的用戶(hù)體驗(yàn)。但是對(duì)于那些缺乏了解的玩家來(lái)說(shuō),市場(chǎng)形勢(shì)仍很暗淡。人們對(duì)于向Linux平臺(tái)移植游戲的興趣日臻上升,這款免費(fèi)的操作系統(tǒng)很有可能成為互動(dòng)娛樂(lè)的一個(gè)主要參與者,Linux平臺(tái)游戲開(kāi)發(fā)也會(huì)扮演一個(gè)重要的角色
24、。</p><p><b> 1.3 開(kāi)發(fā)目標(biāo)</b></p><p> 基于Ncurses庫(kù)的Linux環(huán)境下五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn),使五子棋游戲的自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)組合在一起。為此,我設(shè)計(jì)是會(huì)做如下工作:</p><p> (1) Ncurses庫(kù)的使用,使用Ncurses字符終端圖形化處理的功能,實(shí)現(xiàn)界面的繪制(包括棋盤(pán)的
25、繪制、光標(biāo)的繪制、菜單的繪制、文字的顯示等圖形化實(shí)現(xiàn)功能);</p><p> ?。?) 鏈表?xiàng)5膶?shí)現(xiàn),棧的創(chuàng)建、入棧、出棧與棧的銷(xiāo)毀,棧用于記錄落子的情況(包括顏色與位置);</p><p> ?。?) 判斷勝負(fù)算法的實(shí)現(xiàn);</p><p> ?。?) 人機(jī)對(duì)戰(zhàn)算法的實(shí)現(xiàn);</p><p> ?。?) 網(wǎng)絡(luò)編程,采用TCP的傳輸方式,用于網(wǎng)
26、絡(luò)對(duì)戰(zhàn)的實(shí)現(xiàn)。</p><p> 2 系統(tǒng)需求分析與總體設(shè)計(jì)</p><p> 2.1 系統(tǒng)需求分析</p><p> 2.1.1 系統(tǒng)概述</p><p> 五子棋,顧名思義,五子連珠即為勝利的一方,在電腦上可以實(shí)現(xiàn)多種的游戲方式,本系統(tǒng)在Linux環(huán)境下,運(yùn)用C語(yǔ)言知識(shí)進(jìn)行系統(tǒng)的編碼,主要實(shí)現(xiàn)三大功能模塊,自我對(duì)戰(zhàn)模塊、人機(jī)對(duì)戰(zhàn)模
27、塊和網(wǎng)絡(luò)對(duì)戰(zhàn)模塊。用菜單的功能和按鍵獲取進(jìn)行選擇需要進(jìn)入的游戲模塊。</p><p> 2.1.2 功能需求分析</p><p> 系統(tǒng)的基本功能需求分析如下:</p><p> ?。?) 游戲進(jìn)入界面的菜單選擇,有自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)、網(wǎng)絡(luò)對(duì)戰(zhàn)和退出游戲四個(gè)選項(xiàng);</p><p> ?。?) 進(jìn)入游戲之后,顯示一個(gè)十三行十三列的五子棋的棋
28、盤(pán)。棋盤(pán)旁邊顯示一個(gè)菜單,菜單選項(xiàng)有棋局重現(xiàn)、繼續(xù)上步、上級(jí)菜單和退出游戲,在界面上可以在棋盤(pán)落子操作和菜單操作之間進(jìn)行切換,用鍵盤(pán)的按鍵來(lái)控制,棋局重現(xiàn)功能是在某方勝利之后才能手動(dòng)操作一步步查看并回顧雙方下棋的過(guò)程;繼續(xù)上步可以切換回棋盤(pán)操作;上級(jí)菜單功能可以使五子棋游戲退出當(dāng)前的游戲模塊(自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)、網(wǎng)絡(luò)對(duì)戰(zhàn)其中的一種),回到游戲開(kāi)始界面時(shí)候的菜單,進(jìn)行重新選擇;退出游戲是退出整個(gè)游戲界面;</p><p
29、> ?。?) 棋盤(pán)上顯示光標(biāo),可以對(duì)光標(biāo)進(jìn)行移動(dòng)操作,也可以在棋盤(pán)和菜單來(lái)回切換的時(shí)候重繪和擦除;</p><p> ?。?) 在上面棋盤(pán)將光標(biāo)移動(dòng)到上面對(duì)應(yīng)的位置,可以落子,棋盤(pán)上將在光標(biāo)顯示處出現(xiàn)相應(yīng)的棋子,并且棋子在橫縱交點(diǎn)處;</p><p> ?。?) 自我對(duì)戰(zhàn)的過(guò)程中有悔棋的功能;</p><p> ?。?) 游戲的過(guò)程中會(huì)有提示信息,如該哪一方落
30、子,棋盤(pán)旁邊顯示相應(yīng)按鍵對(duì)應(yīng)的操作列表;</p><p> ?。?) 可以自動(dòng)判斷勝負(fù),勝利一方形成一列的五個(gè)或5個(gè)以上的棋子閃爍數(shù)次,顯示是黑方或者白方已經(jīng)勝利的字樣,并且停止落子的功能;</p><p> ?。?) 能夠?qū)崿F(xiàn)三種游戲模式,自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)。</p><p> 2.1.3 非功能需求分析</p><p><
31、;b> 非功能需求如下:</b></p><p> ?。?) 在程序運(yùn)行的過(guò)程中程序不能崩潰,更不能使系統(tǒng)出現(xiàn)問(wèn)題,造成災(zāi)難性的后果;</p><p> ?。?) 希望在此項(xiàng)目的基礎(chǔ)上不做改動(dòng)或做很少的改動(dòng)就能在其他的系統(tǒng)或設(shè)備上運(yùn)行;</p><p> ?。?) 界面清晰容易看懂,方便玩家操作;</p><p> (4
32、) 游戲運(yùn)行速度不能太慢,要反應(yīng)及時(shí),以免影響玩家的興趣。</p><p> 2.2系統(tǒng)總體方案的建立</p><p> 選中上級(jí)菜單的時(shí)候,會(huì)清除之前的所有操作,返回到開(kāi)始界面菜單。系統(tǒng)功能的功能結(jié)構(gòu)圖如下:</p><p> 圖2-1 系統(tǒng)功能結(jié)構(gòu)圖</p><p> 2.3系統(tǒng)開(kāi)發(fā)方法與開(kāi)發(fā)平臺(tái)</p><p
33、> 2.3.1 開(kāi)發(fā)方法</p><p> 對(duì)于本系統(tǒng)的研究方法,通過(guò)查閱資料以及指導(dǎo)老師師尋求幫助等方法解決技術(shù)上的問(wèn)題,具體邏輯上的一些東西需要自己仔細(xì)思考,并動(dòng)手實(shí)現(xiàn)。</p><p><b> 具體步驟為:</b></p><p> 第一步,熟悉五子棋游戲規(guī)則,對(duì)系統(tǒng)做可行行分析,同時(shí)結(jié)合本次畢業(yè)設(shè)計(jì)的相關(guān)要求進(jìn)行系統(tǒng)的分
34、析與概要設(shè)計(jì);</p><p> 第二步,簡(jiǎn)要概述系統(tǒng)的配置,并且對(duì)系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì),實(shí)現(xiàn)相關(guān)解決問(wèn)題的算法;</p><p> 第三步,運(yùn)用以前所學(xué)的知識(shí),選擇C語(yǔ)言在Linux環(huán)境下調(diào)用Ncurses庫(kù)進(jìn)行開(kāi)發(fā),進(jìn)行軟件編碼,實(shí)現(xiàn)其各項(xiàng)基本功能;</p><p> 第四,系統(tǒng)開(kāi)發(fā)完畢后,進(jìn)行調(diào)試、運(yùn)行和代碼優(yōu)化;</p><p>
35、 第六步,對(duì)前期的學(xué)習(xí)和工作進(jìn)行全面的思考、分析、歸納和總結(jié),完成本論文的撰寫(xiě)工作。</p><p> 2.3.2 開(kāi)發(fā)平臺(tái) </p><p> 本系統(tǒng)開(kāi)發(fā)所需要的開(kāi)發(fā)平臺(tái)如下所示:</p><p> ?。?) 中央處理器:雙核2.9GHz;</p><p> ?。?) 內(nèi)存:2G;</p><p> (3) 硬
36、盤(pán):500G;</p><p> (4) 操作系統(tǒng):Linux;</p><p> (5) 開(kāi)發(fā)工具:Linux環(huán)境下vim;</p><p> ?。?) 編程語(yǔ)言:C語(yǔ)言</p><p> (7) 運(yùn)行環(huán)境:Linux環(huán)境(含Ncurses庫(kù))下的終端 </p><p><b> 2.4 本章小結(jié)
37、</b></p><p> 本章是此項(xiàng)目簡(jiǎn)單的概要性闡述,進(jìn)行功能和非功能需求分析,開(kāi)發(fā)平臺(tái)和開(kāi)發(fā)方法的介紹,確定了整體的功能模塊,為下一章的詳細(xì)設(shè)計(jì)做準(zhǔn)備。</p><p><b> 3.詳細(xì)設(shè)計(jì)</b></p><p> 3.1 數(shù)據(jù)存儲(chǔ)模塊</p><p> 3.1.1 數(shù)據(jù)結(jié)構(gòu)</p&g
38、t;<p> 雙鏈表節(jié)點(diǎn),記錄雙方落子的情況,用同一條鏈表式棧存儲(chǔ)雙方落子情況,落子時(shí)入棧,悔棋時(shí)出棧。數(shù)據(jù)結(jié)構(gòu)如下所示:</p><p> typedef struct node </p><p><b> {</b></p><p> int x;
39、 //代表棋子的橫坐標(biāo)</p><p> int y; //代表棋子的縱坐標(biāo)</p><p> GRAPHICS_COLOR chess_color; //棋子的顏色</p><p> struct node* prior; //前指針域</p>
40、<p> struct node* next; //后指針域</p><p> }NODE; </p><p> 3.1.2 相關(guān)數(shù)據(jù)</p><p> 在游戲的過(guò)程中,存儲(chǔ)當(dāng)前棋局落子情況的變量有鏈表?xiàng):湍M當(dāng)前盤(pán)面的二維數(shù)組模擬棋盤(pán),在本系統(tǒng)中皆用指針的方式來(lái)
41、存取和查詢(xún),指針變量表示如表3-1所示:</p><p> 表3-1 存儲(chǔ)相關(guān)數(shù)據(jù)表</p><p><b> 3.1.3相關(guān)功能</b></p><p> 與存儲(chǔ)模塊相關(guān)的功能函數(shù)有模擬棋盤(pán)初始化函數(shù)以及鏈表?xiàng)5南嚓P(guān)操作函數(shù),如下:</p><p> ?。?) 初始化模擬棋盤(pán)函數(shù)--init_arry</p
42、><p> 模擬棋盤(pán)用二維數(shù)組來(lái)表示,下標(biāo)與界面上棋盤(pán)的交叉點(diǎn)坐標(biāo)形成映射,數(shù)組用來(lái)存儲(chǔ)相應(yīng)坐標(biāo)點(diǎn)的落子情況,元素為棋子的顏色,如果沒(méi)有落子則用NONE來(lái)代替(NONE設(shè)為32)。</p><p> 動(dòng)態(tài)分配模擬棋盤(pán)的空間,并將二維數(shù)組所有元素初始化為NONE。</p><p> ?。?)入棧函數(shù)--push_stack</p><p>
43、當(dāng)某一方落子的時(shí)候,就分配一個(gè)結(jié)點(diǎn)的空間,將落子的坐標(biāo)和顏色賦值給新分配空間的結(jié)點(diǎn),并壓入棧頂,改變棧頂指針,使其指向新的結(jié)點(diǎn)。</p><p> (3)出棧函數(shù)--pop_stack</p><p> 當(dāng)悔棋或者是銷(xiāo)毀棧的時(shí)候調(diào)用此函數(shù),此函數(shù)所做的操作是取出棧頂結(jié)點(diǎn)。</p><p><b> 3.2 界面模塊</b></p&g
44、t;<p> 3.2.1 相關(guān)數(shù)據(jù)</p><p> 本系統(tǒng)會(huì)有大量的界面操作,與其相關(guān)的全局變量如表3-2所示:</p><p> 3-2 界面相關(guān)全局變量表</p><p><b> 3.2.2相關(guān)功能</b></p><p> 與界面操作相關(guān)的函數(shù)說(shuō)明如下:</p><p
45、> ?。?)窗體初始化--init_graphics</p><p><b> 函數(shù)所做事情如下:</b></p><p> a.設(shè)置本地化,以使輸入的字符不會(huì)是亂碼;</p><p> b.窗體初始化,返回窗體指針;</p><p> c.如果當(dāng)前終端有顯示顏色的能力,則初始化顏色,給定義了的每種顏色&l
46、t;/p><p><b> 分配一個(gè)ID;</b></p><p><b> d.隱藏鼠標(biāo);</b></p><p> e.設(shè)置前景色和背景色;</p><p><b> f.清屏。</b></p><p> (2)清屏函數(shù)--clear_scre
47、en</p><p> 可以對(duì)初始坐標(biāo)為(x,y), 結(jié)束坐標(biāo)為(w,h)的一塊屏幕進(jìn)行刷新而其余的地方不變。 </p><p> ?。?)退出窗體函數(shù)--exit_graphics</p><p> 窗體消亡,從curses模式回到終端狀態(tài)。</p><p> ?。?) 畫(huà)出光標(biāo)函數(shù)--draw_curse</p>&
48、lt;p> a.設(shè)置前景色和背景色;</p><p> b.根據(jù)光標(biāo)當(dāng)前在棋盤(pán)上面的坐標(biāo)畫(huà)出光標(biāo)。</p><p> ?。?)刪除光標(biāo)函數(shù)--delete_curse</p><p> a.設(shè)置前景色和背景色;</p><p> b.將棋盤(pán)上面的光標(biāo)用空格代替就可以擦出棋盤(pán)上面的光標(biāo)。</p><p>
49、?。?) 移動(dòng)光標(biāo)的函數(shù)--move_curse</p><p> a.刪除之前的光標(biāo);</p><p> b.根據(jù)移動(dòng)的方向修改光標(biāo)的坐標(biāo)值,一次移動(dòng)一格,由上下左右按鍵來(lái)控制;</p><p> c.在棋盤(pán)上面根據(jù)光標(biāo)的坐標(biāo)值畫(huà)出光標(biāo)。</p><p> (7) 繪制開(kāi)始界面菜單函數(shù)-- draw_first_menu和繪制游戲界
50、面菜單函數(shù)-- draw_last_menu</p><p> a.初始化為選中第一個(gè)菜單條目;</p><p> b.選中的菜單條目呈現(xiàn)反色。 </p><p> ?。?) 開(kāi)始界面菜單操作函數(shù)-- menu1_operate和游戲界面菜單操作函數(shù)-- menu2_operate</p><p> a.當(dāng)在處于菜單界面操作時(shí),循環(huán)接
51、收鍵盤(pán)的按鍵消息;</p><p> b.上下鍵控制菜單選項(xiàng)上下移動(dòng),按下空格鍵為選中;</p><p> c.最后返回選中的菜單條目的標(biāo)號(hào)——從上到下為從0到3;</p><p> (9) 繪制棋盤(pán)函數(shù)-- draw_board</p><p> a.設(shè)置前景色和背景色;</p><p><b>
52、 b.清屏處理;</b></p><p> c.在界面的適當(dāng)位置位繪制出13 * 13的棋盤(pán)。</p><p> (10)落子方提示信息函數(shù)--draw_notic_chess</p><p> 根據(jù)棧頂結(jié)點(diǎn)中表明棋子顏色的那一項(xiàng)來(lái)確定接下來(lái)該哪一方落子。</p><p> a.如果棧頂?shù)钠遄拥念伾珵楹谏?,則說(shuō)明之前落子顏
53、色為黑色,接下來(lái)該落白子,在棋盤(pán)界面上打印出“請(qǐng)落白子”的提示信息;</p><p> b.如果棧頂?shù)钠遄拥念伾珵榘咨?,則打印出“請(qǐng)落黑子”的提示信息。</p><p> ?。?1)棋盤(pán)已空滿(mǎn)提示函數(shù)--notic_full_empty</p><p> a.當(dāng)棋盤(pán)上面落子已滿(mǎn)但是還沒(méi)有哪一方勝利的話(huà),就打印出提示信息“棋盤(pán)已滿(mǎn)”;</p><
54、;p> b.當(dāng)悔棋空的時(shí)候,如果棋盤(pán)上面已經(jīng)沒(méi)有棋子,但依然要悔棋的時(shí)候會(huì)打印出提示信息“棋盤(pán)已空”。</p><p> ?。?2)提示贏的信息的函數(shù)--notic_win</p><p> a.如果白子一方勝利,打印出“白子勝利”的信息;</p><p> b.如果黑子一方勝利,打印出“黑子勝利”的信息。</p><p> ?。?/p>
55、13) 畫(huà)棋子函數(shù)--draw_chess</p><p> 根據(jù)落子的顏色和坐標(biāo),在棋盤(pán)上相應(yīng)的位置畫(huà)出棋子。</p><p> ?。?4)棋盤(pán)修補(bǔ)函數(shù)--repair_board</p><p> 在悔棋的過(guò)程中,當(dāng)棋盤(pán)上某處的棋子消失的時(shí)候,消失的棋子的位置會(huì)有一個(gè)空缺,需要用畫(huà)棋盤(pán)的相關(guān)字符串將其還原成完整的棋盤(pán)界面。</p><p&
56、gt; 3.3 其他公共功能函數(shù)模塊</p><p> 3.3.1 相關(guān)功能</p><p> 除了界面操作函數(shù)之外,還有各個(gè)游戲模式可以共用的功能函數(shù),如下:</p><p> ?。?) 游戲初始化模塊--init_chessboard</p><p><b> a.初始化棧;</b></p>&
57、lt;p> b.用隨機(jī)數(shù)的方法得出黑子和白子哪方先落子;</p><p> c.在界面上畫(huà)出棋盤(pán);</p><p> d.提示出該哪一方先落子;</p><p> e.在界面上打印出游戲相關(guān)操作對(duì)應(yīng)的鍵盤(pán)按鍵的提示信息。</p><p> ?。?)悔棋功能函數(shù)--chess_back</p><p>
58、當(dāng)棋盤(pán)的盤(pán)面還有棋子時(shí),當(dāng)按下“-”按鍵,最近落子的那一方悔棋:</p><p><b> a.棧頂節(jié)點(diǎn)出棧;</b></p><p> b.模擬棋盤(pán)相對(duì)應(yīng)的元素重新賦值為NONE,代表此處沒(méi)有棋子;</p><p> c.如果是黑子悔棋,打印出提示信息“黑子悔棋”,如果是白子悔棋,打</p><p> 印出提示
59、信息“白子悔棋”。</p><p> 當(dāng)棋盤(pán)為空,如果執(zhí)行悔棋操作,則打印出提示信息“不能悔棋”,“棋</p><p><b> 盤(pán)已空”。</b></p><p> ?。?) 判贏處理函數(shù)—judge</p><p> 函數(shù)內(nèi)部實(shí)現(xiàn)的功能有判斷哪一方勝利和勝利一方五子連珠的棋子連 </p>&l
60、t;p><b> 續(xù)閃爍數(shù)次;</b></p><p><b> 判贏算法</b></p><p> 定義八個(gè)方向的相關(guān)的宏定義:</p><p> #define DIR_LEFTUP 0 //向左上方</p><p> #define DIR_RIGHTD
61、OWN 1 //向右下方</p><p> #define DIR_RIGHTUP 2 //右上方</p><p> #define DIR_LEFTDOWN 3 //左下方</p><p> #define DIR_UP 4 //向上</p><
62、;p> #define DIR_DOWN 5 //向下</p><p> #define DIR_LEFT 6 //向左</p><p> #define DIR_RIGHT 7 //向右</p><p><b> 相關(guān)數(shù)據(jù)結(jié)構(gòu):</b></p
63、><p> typedef struct </p><p><b> {</b></p><p> int x; //某一方向離參照點(diǎn)最遠(yuǎn)的同一方連續(xù)棋子最遠(yuǎn)的y坐標(biāo) </p><p> int y; //某一方向離參照點(diǎn)最遠(yuǎn)的同一方連續(xù)棋
64、子最遠(yuǎn)的y坐標(biāo)</p><p> int num; </p><p><b> }DIR_NUM;</b></p><p> 以當(dāng)前落子位置為參照坐標(biāo),分別向左上方、右下方、右上方、左下方、上、下、左和右八個(gè)方向查找與參照點(diǎn)棋子顏色相同且連續(xù)的棋子并計(jì)數(shù),直到連續(xù)的棋子與參照點(diǎn)的棋子不是同一方的
65、棋子或已經(jīng)查詢(xún)到邊界處為止。</p><p> DIR_NUM dir_num[8];</p><p> 以當(dāng)前落子為參考點(diǎn),找自己方的某一方向上的連續(xù)的棋子數(shù)(不包括自</p><p><b> 身):</b></p><p> dir_num[0].num—左上方連續(xù)棋子數(shù);</p><p
66、> dir_num[1].num—右下方連續(xù)棋子數(shù);</p><p> dir_num[2].num—右上方連續(xù)棋子數(shù);</p><p> dir_num[3].num—左下方連續(xù)棋子數(shù);</p><p> dir_num[4].num—上方連續(xù)棋子數(shù);</p><p> dir_num[5].num—下方連續(xù)棋子數(shù);<
67、/p><p> dir_num[6].num—左方連續(xù)棋子數(shù);</p><p> dir_num[7].num—右方連續(xù)棋子數(shù)。</p><p> 同一條直線(xiàn)上的同一方連續(xù)的棋子數(shù)相加:</p><p> dir_num[0].num + dir_num[1].num + 1—右下向?qū)蔷€(xiàn)連續(xù)棋子數(shù)</p><p>
68、; dir_num[2].num + dir_num[3].num + 1—右上向?qū)蔷€(xiàn)連續(xù)棋子數(shù)</p><p> dir_num[4].num + dir_num[5].num + 1—縱向連續(xù)棋子數(shù)</p><p> dir_num[6].num + dir_num[7].num + 1—橫向連續(xù)棋子數(shù)</p><p> 只要其中任意一項(xiàng)大于或等于5,
69、則說(shuō)明此刻落子方勝利。</p><p> 分別對(duì)應(yīng)的四個(gè)方向的棋子的坐標(biāo)范圍如下:</p><p> (dir_num[0].x, dir_num[0].y)( dir_num[1].x, dir_num[1].y)</p><p> (dir_num[2].x, dir_num[2].y)( dir_num[3].x, dir_num[3].y)</p
70、><p> (dir_num[4].x, dir_num[4].y)( dir_num[5].x, dir_num[5].y)</p><p> (dir_num[6].x, dir_num[6].y)( dir_num[7].x, dir_num[7].y)</p><p> 如果每條直線(xiàn)上的棋子大于或等于五,則連珠的棋子連續(xù)閃爍數(shù)次。</p>&
71、lt;p> 置相關(guān)標(biāo)志flag為1,代表某方以經(jīng)勝利,此局不能再繼續(xù)對(duì)戰(zhàn)。</p><p> 3.4 游戲功能模塊</p><p> 3.4.1 游戲主要操作流程圖</p><p> 系統(tǒng)分三個(gè)游戲模塊,并將三個(gè)游戲模塊組合在一起,經(jīng)過(guò)菜單操作,玩家可以任意選擇游戲模式,模塊之間相互轉(zhuǎn)換與運(yùn)行的流程圖如圖3-1:</p><p>
72、;<b> 否</b></p><p><b> 是</b></p><p> 圖3-1 游戲主要操作流程圖</p><p> 3.4.2 自我對(duì)戰(zhàn)模塊</p><p><b> ?。?)描述</b></p><p> 自我對(duì)戰(zhàn)是單機(jī)下的五子棋
73、模式,黑子和白子都是玩家自己,由于是自己和自己下棋,隨心而為,所以里面設(shè)有悔棋功能;</p><p> 操作的過(guò)程中,只有在黑子或者白子某一方勝出時(shí),棋局重現(xiàn)功能能才能有效;</p><p> 每落一顆子都會(huì)進(jìn)行一次判贏,如果某一方贏了,此局結(jié)束,不能再落子;</p><p> 在游戲過(guò)程中的任何時(shí)刻都可以進(jìn)行菜單操作。</p><p>
74、;<b> ?。?)流程圖</b></p><p> 進(jìn)入自我對(duì)戰(zhàn)游戲模塊后,其流程圖如圖3-2所示:</p><p><b> 是</b></p><p><b> 否</b></p><p> 是 </p><p><b
75、> 繼續(xù)上步</b></p><p><b> 否</b></p><p><b> 是</b></p><p> 圖3-2 自我對(duì)戰(zhàn)模塊流程圖</p><p><b> (3)相關(guān)函數(shù)</b></p><p> 自我對(duì)戰(zhàn)模
76、塊函數(shù)--human_vs_human</p><p> 對(duì)自我對(duì)戰(zhàn)游戲模塊整體的組織,對(duì)不同的按鍵操作做出相應(yīng)的反映。 </p><p> 3.4.3 人機(jī)對(duì)戰(zhàn)模塊</p><p><b> ?。?)流程圖</b></p><p> 人機(jī)對(duì)戰(zhàn)的流程圖和人人對(duì)戰(zhàn)的類(lèi)似,只是與人人對(duì)戰(zhàn)的流程圖相比,少了悔棋那一項(xiàng)功能
77、,圖3-3所示的為玩家的流程圖,而對(duì)于計(jì)算機(jī)那一方不會(huì)有按鍵操作。</p><p> 進(jìn)入人機(jī)對(duì)戰(zhàn)模塊后,其流程圖如圖3-3所示:</p><p><b> 是</b></p><p><b> 否</b></p><p> 是 繼續(xù)上步</p&g
78、t;<p><b> 否</b></p><p><b> 是</b></p><p> 圖3-3 人機(jī)對(duì)戰(zhàn)模塊流程圖 </p><p> ?。?)人機(jī)對(duì)戰(zhàn)的算法</p><p> 要讓電腦知道該在哪一點(diǎn)下子,就要根據(jù)盤(pán)面的形式
79、,為每一可能落子的點(diǎn)計(jì)算其重要程度(用后面所說(shuō)的分值來(lái)代替),也就是當(dāng)這子落下后會(huì)形成什么棋型,然后通覽全盤(pán)選出最重要的一點(diǎn)。找出最重要的那個(gè)點(diǎn)的方法是分別計(jì)算出玩家和計(jì)算機(jī)在整個(gè)盤(pán)面上的所有未落子交叉點(diǎn)的分值,找出玩家的最大分值點(diǎn)和計(jì)算機(jī)的最大分值點(diǎn),如果玩家的最大分值比計(jì)算機(jī)的最大分值大,計(jì)算機(jī)就把棋子下在玩家最大分值點(diǎn)的位置上(玩家最有可能獲勝的位置),稱(chēng)為防守,相反,如果計(jì)算機(jī)的最大分值比人的最大分值大,計(jì)算機(jī)就會(huì)把棋子下在自己
80、最有可能獲勝的位置上,稱(chēng)為進(jìn)攻。</p><p><b> 相關(guān)數(shù)據(jù):</b></p><p> 代表分?jǐn)?shù)的二維數(shù)組: </p><p> 活 單 死 </p><p> UINT type_score[][3] = {{3, 1, 0}, //落子后此處只有一子<
81、/p><p> {50, 5, 0}, //落子后兩子相連</p><p> {1000, 100, 0}, //落子后三子相連</p><p> {100000, 50000, 0}, //落子后四子相連</p><p> {100000, 100000,10000} //落子后五子連珠<
82、/p><p><b> }; </b></p><p> type:代表橫坐標(biāo),有5種取值</p><p> 0--落子后此處只有一子;</p><p> 1--落子后兩子相連;</p><p> 2--落子后三子相連;</p><p> 3--落子后四子相連;&l
83、t;/p><p> 4--落子后五子連珠。</p><p> status:代表縱坐標(biāo),有三種值</p><p> 0--活,說(shuō)明落子之后,落子方type+1子連珠的兩端無(wú)對(duì)方棋子阻塞并且沒(méi)有到達(dá)邊緣處;</p><p> 1--單,說(shuō)明落子之后,落子方type+1子連珠的兩端中有一端被對(duì)方棋子阻塞或到達(dá)邊緣處;</p>&
84、lt;p> 2--死,說(shuō)明落子之后,落子方type+1子連珠的兩端都被對(duì)方棋子阻塞或到達(dá)邊緣處。</p><p> 二維數(shù)組中的元素為某一處的分?jǐn)?shù)的值,依據(jù)type和status取得,如果 </p><p> 某處不能落子,則此處的分值定位0。</p><p> UINT human_scoretable[BOARD_HIGHT][BOARD_WID
85、TH];</p><p> 為玩家的分值表,每一個(gè)元素為棋盤(pán)相應(yīng)交叉點(diǎn)對(duì)應(yīng)的分值。</p><p> UINT computer_scoretable[BOARD_HIGHT][BOARD_WIDTH];</p><p> 為計(jì)算機(jī)的分值表,每一個(gè)元素為棋盤(pán)相應(yīng)交叉點(diǎn)對(duì)應(yīng)的分值。</p><p><b> 相關(guān)函數(shù):<
86、/b></p><p> 獲取某一點(diǎn)在某一方向(以某一點(diǎn)為中心分別向八個(gè)方向查詢(xún))的分值</p><p> 的函數(shù)--get_score</p><p> 根據(jù)type和status獲取某一點(diǎn)在某個(gè)方向的分值,實(shí)質(zhì)是根據(jù),type和</p><p> status為下標(biāo)來(lái)查詢(xún)二維數(shù)組type_score,獲取到的元素即為某個(gè)方向
87、上的分值。</p><p> 獲取某一點(diǎn)的分值的函數(shù)--set_pos_score</p><p> 根據(jù)落子方和坐標(biāo)點(diǎn)來(lái)計(jì)算出type和status,在根據(jù)type和status和獲取此點(diǎn)的分值。</p><p> 獲取最佳落子點(diǎn)的函數(shù)--search_opt_pos</p><p> 分別獲取玩家和計(jì)算機(jī)的整張分值表,分別遍歷這兩
88、張分值表得出玩家</p><p> 的最佳落子位置和計(jì)算機(jī)的落子位置,再比較得出計(jì)算機(jī)的最終的落子位置。</p><p> 對(duì)人機(jī)對(duì)戰(zhàn)游戲模塊整體組織的函數(shù)--human_vs_computer</p><p><b> 網(wǎng)絡(luò)對(duì)戰(zhàn)模塊</b></p><p><b> ?。?)相關(guān)函數(shù)</b>
89、</p><p> 客戶(hù)端網(wǎng)絡(luò)對(duì)戰(zhàn)模塊函數(shù)--play_client</p><p> 網(wǎng)絡(luò)對(duì)戰(zhàn)中客戶(hù)端的整體規(guī)劃規(guī)劃,其中運(yùn)用TCP協(xié)議,調(diào)用如下函數(shù):</p><p> socket( )創(chuàng)建套接字connect( )連接到服務(wù)器recv( )接收消息或send( )發(fā)送消息;</p><p> 服務(wù)器端網(wǎng)絡(luò)對(duì)戰(zhàn)模塊函數(shù)--pla
90、y_server</p><p> 網(wǎng)絡(luò)對(duì)戰(zhàn)中服務(wù)器端的整體規(guī)劃,其中運(yùn)用TCP協(xié)議,調(diào)用如下函數(shù):</p><p> socket( )創(chuàng)建套接字bind( )綁定listen( )監(jiān)聽(tīng)accept( )連接到服務(wù)器recv( )接收消息或send( )發(fā)送消息。</p><p><b> ?。?)流程圖</b></p>&
91、lt;p> 進(jìn)入網(wǎng)絡(luò)對(duì)戰(zhàn)模塊后,服務(wù)器端流程圖與客戶(hù)端流程圖一樣,只是客戶(hù)端為連接服務(wù)器,而服務(wù)器為等待客戶(hù)端的連接。客戶(hù)端流程圖如圖3-4所示:</p><p><b> 否是</b></p><p><b> 是</b></p><p><b> 否</b></p>
92、<p> 是 繼續(xù)上步</p><p><b> 否</b></p><p><b> 是</b></p><p> 圖3-4 網(wǎng)絡(luò)對(duì)客戶(hù)端戰(zhàn)模塊流程圖</p><p><b> 3.5 本章小結(jié)</b></p&g
93、t;<p> 本章對(duì)此系統(tǒng)進(jìn)行了詳細(xì)的設(shè)計(jì),列出了相關(guān)的數(shù)據(jù)結(jié)構(gòu),主要功能函數(shù),相關(guān)表格,以及模塊功能流程圖等,為編碼做好準(zhǔn)備。</p><p><b> 4. 原型系統(tǒng)介紹</b></p><p> 4.1 測(cè)試流程 </p><p><b> 否</b></p><p>
94、<b> 否</b></p><p><b> 是</b></p><p> 圖4-1 功能測(cè)試模塊流程圖</p><p><b> 4.2 功能測(cè)試</b></p><p> 4.2.1 繪圖功能測(cè)試</p><p> 繪圖功能測(cè)試的任務(wù)是
95、對(duì)游戲過(guò)程中各種界面元素是否能夠正常繪制出來(lái)的測(cè)試,在程序運(yùn)行的過(guò)程中,可能因?yàn)橛?jì)算機(jī)的運(yùn)行速率的問(wèn)題而出現(xiàn)圖像不全的情況,例如畫(huà)棋子可能只出現(xiàn)了半圓的形狀,而不是完整的棋子,有的時(shí)候界面刷新不及時(shí)。</p><p> 測(cè)試結(jié)果:90%的情況下正常執(zhí)行,只有在計(jì)算機(jī)很忙碌的時(shí)候會(huì)出現(xiàn)圖像不完整或卡住的情況。</p><p> 4.2.2 按鍵功能測(cè)試</p><p&
96、gt; 按鍵功能測(cè)試是為了測(cè)試出是否能夠獲取按鍵操作并且及時(shí)作出相應(yīng)的反應(yīng),不同的按鍵對(duì)應(yīng)著不同的功能,例如落子的按鍵是空格鍵,光標(biāo)移動(dòng)的按鍵是上下左右鍵,從棋盤(pán)操作切換到菜單操作的按鍵是“m”鍵,悔棋按鍵是“-”等。</p><p> 測(cè)試結(jié)果:都可以正常運(yùn)行。</p><p> 4.2.3 游戲功能測(cè)試</p><p> 游戲模式功能測(cè)試是測(cè)試出是否能夠
97、通過(guò)菜單選擇正常進(jìn)入所選的游戲,是否能夠正常地進(jìn)行落子操作,是否及時(shí)出現(xiàn)相關(guān)消息提示,是否能夠正常判斷輸贏以及停止落子,是否能夠棋局重現(xiàn)等。分別進(jìn)行自我對(duì)戰(zhàn)、網(wǎng)絡(luò)對(duì)戰(zhàn)測(cè)試和人機(jī)對(duì)戰(zhàn)測(cè)試,在網(wǎng)絡(luò)對(duì)戰(zhàn)測(cè)試的過(guò)程中,最好用兩臺(tái)不同的計(jì)算機(jī)分別作為服務(wù)器和客戶(hù)端。</p><p> 測(cè)試結(jié)果:都正常運(yùn)行。</p><p> 除了功能測(cè)試之外,還有非功能測(cè)試,例如程序運(yùn)行的速度、安全性和界面視覺(jué)
98、等,如果運(yùn)行速度太慢,要找出影響運(yùn)行速度的因素,例如程序算法的問(wèn)題;如果程序運(yùn)行不夠穩(wěn)定,可以在代碼中加一些安全限制條件;如果界面不夠美觀,可以從顏色等方面進(jìn)行調(diào)整。</p><p><b> 4.3 成果展示</b></p><p> 運(yùn)行程序,顯示開(kāi)始界面菜單,按上下鍵,菜單選項(xiàng)上下游移,開(kāi)始界面菜單如圖4-2所示:</p><p>
99、 圖4-2 游戲開(kāi)始界面菜單展示圖</p><p> 當(dāng)選擇菜單選項(xiàng)“人人對(duì)戰(zhàn)”選項(xiàng)的時(shí)候,就會(huì)進(jìn)入如4-3所示的界面,光標(biāo)最開(kāi)始位于棋盤(pán)中央,當(dāng)選擇“人機(jī)對(duì)戰(zhàn)”和“網(wǎng)絡(luò)對(duì)戰(zhàn)”的時(shí)候也類(lèi)似,如下:</p><p> 圖4-3 進(jìn)入自我對(duì)戰(zhàn)游戲界面展示圖</p><p> 當(dāng)處于游戲的過(guò)程中的時(shí)候,各游戲模式大體相同,會(huì)列出菜單和操作方式列表以及提示該哪一方落子
100、等信息,其界面展示如圖4-4所示:</p><p> 圖4-4 對(duì)戰(zhàn)過(guò)程中界面展示圖</p><p> 當(dāng)玩家中的某一方勝利之后,界面上會(huì)呈現(xiàn)出五子連珠的畫(huà)面,同時(shí)光標(biāo)也會(huì)消失,并且顯示出哪一方勝利,如圖4-5所示:</p><p> 圖4-5 一方玩家勝利界面展示圖</p><p> 棋局重現(xiàn)時(shí)展現(xiàn)的界面如圖4-6所示:</p
101、><p> 圖4-6 棋局重現(xiàn)過(guò)程展示圖</p><p><b> 5. 總結(jié)與展望</b></p><p> 從論文選題到搜集資料,從寫(xiě)稿到反復(fù)修改,期間經(jīng)歷了喜悅和聒噪、痛苦和彷徨,此次過(guò)程中心情復(fù)雜。在短短的數(shù)個(gè)星期的日子里,有苦有甜。同時(shí)也學(xué)到了很多新的東西,雖然時(shí)間有限,但自己很多方面都有了提升,如動(dòng)手能力和解決問(wèn)題的能力。<
102、/p><p> 在剛開(kāi)始選題的時(shí)候,由于知識(shí)欠缺,不知自己該選哪一個(gè)課題,于此事上彷徨了很久,在這過(guò)程中也幾次換課題,經(jīng)過(guò)在網(wǎng)上和書(shū)上查閱資料并且詢(xún)問(wèn)老師和同學(xué),根據(jù)自己已有的知識(shí)體系、將來(lái)的發(fā)展方向、知識(shí)拓展的必要性以及自己的興趣所在,最終才定下研究課題--Linux環(huán)境下五子棋游戲設(shè)計(jì)與實(shí)現(xiàn),并專(zhuān)注于此畢業(yè)設(shè)計(jì)。剛開(kāi)始著手去做的時(shí)候,對(duì)于理論知識(shí)學(xué)習(xí)不夠扎實(shí)的我深深感到了自己的不足,便重新看了教材,對(duì)知識(shí)進(jìn)行了
103、梳理,掌握了基本理論知識(shí)。這樣對(duì)平時(shí)學(xué)習(xí)的不足和缺陷就有所彌補(bǔ)。遇到過(guò)各種各樣的問(wèn)題,沒(méi)有扎實(shí)的理論知識(shí)是無(wú)法解決的。只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,通過(guò)實(shí)際動(dòng)手去驗(yàn)證理論,在這二者的配合下,我們不僅可以成功的完成課程設(shè)計(jì),而且還可以掌握和鞏固所學(xué)知識(shí),充實(shí)自己的知識(shí)儲(chǔ)備。同時(shí)也可以使自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力在一定程度上得到提升,使自己能更好的適應(yīng)社會(huì)的要求。</p><p>
104、 通過(guò)本次畢業(yè)設(shè)計(jì),我在發(fā)現(xiàn)問(wèn)題、分析問(wèn)題和解決問(wèn)題的能力得到了提升。培養(yǎng)了我的設(shè)計(jì)思維,提高了我們的邏輯思維能力,使我的C語(yǔ)言知識(shí)和Linux環(huán)境下編程的能力有了很大的提高。同時(shí)也讓我在面對(duì)問(wèn)題的時(shí)候不在像以前那樣驚慌失措,而是慢慢分析問(wèn)題,逐步去解決問(wèn)題,實(shí)現(xiàn)各個(gè)擊破。</p><p> 我深刻地體會(huì)到了欲速則不達(dá)的道理,做什么事情都需要沉著冷靜和一絲不茍,這樣才會(huì)達(dá)到甚至超出預(yù)期目的,反之,則會(huì)然結(jié)果一塌
105、糊涂,有付出才會(huì)有收獲。</p><p> 本次選題為L(zhǎng)inux環(huán)境下五子棋游戲設(shè)計(jì)與實(shí)現(xiàn),將自我對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)和網(wǎng)絡(luò)對(duì)戰(zhàn)綜合在一起,在Linux環(huán)境下調(diào)用Ncurses庫(kù)于超級(jí)終端上運(yùn)行,實(shí)現(xiàn)簡(jiǎn)單的界面繪制,有鍵盤(pán)的按鍵控制游戲的操作,通過(guò)菜單選擇進(jìn)入不同的游戲模式和不同的功能操作,也有鼠標(biāo)控制光標(biāo)的移動(dòng)。三種模式中都有菜單操作、落子、判斷勝負(fù)、勝利方棋子閃爍、棋局重現(xiàn)、返回上級(jí)菜單和退出的功能,自我對(duì)戰(zhàn)中設(shè)
106、有悔棋的功能;人機(jī)對(duì)戰(zhàn)采用貪心算法,分別算出人和機(jī)器的最佳落子位置的分?jǐn)?shù),并進(jìn)行相比,當(dāng)機(jī)器最佳落子位置分?jǐn)?shù)高時(shí),機(jī)器落子的位置是它自己的分?jǐn)?shù)最高的位置,如果人的最佳落子位置的分?jǐn)?shù)高于機(jī)器,那么機(jī)器就占用人的最佳落子位置;網(wǎng)絡(luò)對(duì)戰(zhàn)模式中一方先建立游戲,作為游戲的服務(wù)器端,對(duì)方作為客戶(hù)端連接服務(wù)器端,發(fā)送五子棋信息主要是五子棋落子坐標(biāo)和存儲(chǔ)棋子的顏色。三種模式都以雙向鏈表?xiàng)5男问酱鎯?chǔ)棋子的坐標(biāo)和落子的顏色,并且有一個(gè)二維數(shù)組形式的模擬棋盤(pán)
107、存儲(chǔ)某個(gè)位置的落子方(用顏色來(lái)標(biāo)記,如果沒(méi)有落子就設(shè)置為NONE)。程序有C語(yǔ)言來(lái)編寫(xiě),是面向過(guò)程的程序設(shè)計(jì)方式,將程序分成不同的功能模塊,最后進(jìn)行拼接,實(shí)現(xiàn)整體功能的綜合。</p><p> 由于知識(shí)水平和時(shí)間都有限,本系統(tǒng)還存在很多不足的地方,希望自己在今后能夠?qū)⑵渫晟?,例如?lt;/p><p> 本項(xiàng)目實(shí)現(xiàn)的界面過(guò)于簡(jiǎn)單,所有的圖形都是以字符串的形式在Linux環(huán)境下的終端上繪制的
108、,而且使用起來(lái)沒(méi)有控件方式方便,未來(lái)在此基礎(chǔ)上使用圖形界面開(kāi)發(fā)工具,用控件的方式去實(shí)現(xiàn)此游戲,將界面做得更加友好,更加完善;</p><p> 人機(jī)對(duì)戰(zhàn)采用的是簡(jiǎn)單的貪心算法,只能就當(dāng)前盤(pán)面計(jì)算出計(jì)算機(jī)的最佳落子位置,而不能推算出幾步以外的最佳落子位置,這樣可能使機(jī)器落子容易掉進(jìn)陷阱,此算法還不夠智能,希望以后能夠?qū)⑺惴ㄍ晟?,而不只是使用貪心算法算出?dāng)前盤(pán)面的最佳落子位置,而是推算到幾步以外。</p>
109、;<p> 網(wǎng)絡(luò)對(duì)戰(zhàn)功能部分,玩家一端是服務(wù)器另一端是客戶(hù)端,只有當(dāng)服務(wù)器先啟動(dòng)了,客戶(hù)端才能夠連接到服務(wù)器,而且不能同時(shí)和多個(gè)人一起對(duì)戰(zhàn),這種方式限制太大,在對(duì)戰(zhàn)的過(guò)程中,當(dāng)一方退出時(shí),沒(méi)有通知另一方的功能,希望在未來(lái)使玩家都使用客戶(hù)端,而服務(wù)器實(shí)現(xiàn)個(gè)客戶(hù)端的相互通信,而且可以通過(guò)服務(wù)器使客戶(hù)端知道哪些玩家上線(xiàn)了,并且選擇要對(duì)戰(zhàn)的對(duì)象,在與A對(duì)戰(zhàn)的同時(shí),也可以另開(kāi)一界面與B對(duì)戰(zhàn),就像可以用QQ同時(shí)與多人聊天一樣,在某一
110、玩家退出的時(shí)候,通知與之對(duì)戰(zhàn)的另一方,該玩家已經(jīng)下線(xiàn)。</p><p> 該游戲沒(méi)有實(shí)現(xiàn)認(rèn)輸?shù)墓δ?,可以在此基礎(chǔ)上添加認(rèn)輸功能。</p><p> 目前此游戲只能在PC機(jī)上運(yùn)行,在實(shí)現(xiàn)上面所說(shuō)的功能的基礎(chǔ)上,可以將其移植到嵌入式設(shè)備上面去。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]
111、尹業(yè)安 白燕 著.C語(yǔ)言程序設(shè)計(jì).長(zhǎng)沙:國(guó)防科技大學(xué)出版社,2008.</p><p> [2] 胡鳴 著.網(wǎng)絡(luò)編程技術(shù).北京:科技出版社,2008.</p><p> [3] 嚴(yán)蔚敏 吳偉民 著.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版).北京:清華大學(xué)出版社,1997.</p><p> [4] 龐麗萍 著.操作系統(tǒng)原理(第四版).武漢:華中科技大學(xué)出版社,2007.&
112、lt;/p><p> [5] 謝希仁 著.計(jì)算機(jī)網(wǎng)絡(luò)原理(第5版).北京:電子工業(yè)出版社,2008.</p><p> [6] (美)W.Richard Stevenson著.范建華...[等]譯.TCP/IP協(xié)議詳解. 北京:機(jī)械工業(yè)出版社,2000.</p><p> [7] (美)W.Richard Stevenson Stephen A.Rago著.尤
113、晉元...[等]譯. UNIX環(huán)境高級(jí)編程.北京:人民郵電出版社,2006. </p><p> [8] 孫建忠 著.計(jì)算機(jī)專(zhuān)業(yè)英語(yǔ).北京:中國(guó)水利水電出版社2001.</p><p> [9] Dhamdhere D M 著.系統(tǒng)程序設(shè)計(jì)和操作系統(tǒng)(影印版).北京:清華大學(xué)出版社,2001.</p><p> [10] 譚浩強(qiáng) 著.C語(yǔ)言程序設(shè)計(jì)(第三版
114、).北京:清華大學(xué)出版社2005.</p><p> [11] (美)S巴斯 著.朱洪...[等]譯.計(jì)算機(jī)算法:設(shè)計(jì)和分析引論.上海:復(fù)旦大學(xué)出版</p><p><b> 社,1985.</b></p><p> [12] 曹計(jì)昌等 著.C語(yǔ)言程序設(shè)計(jì).北京:科學(xué)出版社,2008.</p><p> [13]
115、 Douglus E.Comer 著.Computer Network and Internets.北京:清華大學(xué)出版社1998.</p><p> [14] J.Glenn Brookshear 著.Computer Science:An Overview(6th Edition).Addison </p><p> Welsley Publishing Company,1999.&
116、lt;/p><p> [15] Lan Sommerville 著.Software Engineering.Addison-Welsley Publishing Company,</p><p><b> 1992.</b></p><p><b> 致 謝</b></p><p> 總之,
117、通過(guò)本次課程設(shè)計(jì),我收獲頗豐,一方面使自己各方面能力在一定程度上得到提升,另一方面是自己切身體會(huì)到軟件技術(shù)的實(shí)用性和有效性,增加了自己對(duì)軟件的學(xué)習(xí)和編程興趣。在這個(gè)過(guò)程中,得到了老師的耐心的知道和同學(xué)的相助,是我能夠順利地完成任務(wù),并且學(xué)到了很多知識(shí),在讓我體會(huì)到了設(shè)計(jì)的艱辛的同時(shí),更讓我體會(huì)到成功的喜悅和快樂(lè)。在此向在大學(xué)四年里帶過(guò)我課程的所有老師表示誠(chéng)摯的感謝,是你們的教育讓我能順利的讀完大學(xué)的課程,是你們的教育讓我能在大學(xué)里學(xué)到了
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- linux環(huán)境下五子棋游戲設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 五子棋游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---網(wǎng)絡(luò)五子棋游戲
- 五子棋游戲設(shè)計(jì)畢業(yè)論文
- 網(wǎng)絡(luò)五子棋游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)論文——五子棋游戲設(shè)計(jì)
- 人機(jī)對(duì)弈五子棋游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)論文---網(wǎng)絡(luò)五子棋游戲設(shè)計(jì)
- flash五子棋畢業(yè)設(shè)計(jì)論文
- java五子棋畢業(yè)設(shè)計(jì)論文
- 五子棋游戲設(shè)計(jì)報(bào)告
- 畢業(yè)設(shè)計(jì)---基于labview設(shè)計(jì)的五子棋游戲
- 畢業(yè)設(shè)計(jì)(論文)-五子棋游戲程序設(shè)計(jì)與開(kāi)發(fā)
- java五子棋游戲畢業(yè)論文
- 五子棋畢業(yè)論文-html開(kāi)發(fā)五子棋的原型設(shè)計(jì)
- 五子棋對(duì)弈系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)-基于android的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)--五子棋人機(jī)對(duì)弈
- java五子棋畢業(yè)設(shè)計(jì)--java五子棋對(duì)弈程序的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)--五子棋程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論