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