




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大 連 民 族 大 學(xué) 本 科 畢 業(yè) 設(shè) 計(jì)(論 文)基于Linux系統(tǒng)的五子棋游戲開發(fā)學(xué) 院: 信息與通信工程學(xué)院 (系)專 業(yè): 通信工程 學(xué) 生 姓 名: 隋志浩 學(xué) 號(hào): 2012136219 指 導(dǎo) 教 師: 姚遠(yuǎn) 評(píng) 閱 教 師: 完 成 日 期: 2016年06月15日 大連民族大學(xué)基于Linux系統(tǒng)的五子棋游戲開發(fā)摘 要五子棋是一種兩人對(duì)弈的純策略型棋類游戲,通常對(duì)戰(zhàn)雙方分別使用黑色與白色兩種棋子,下在棋盤上橫向、縱向和對(duì)角線方向,最先完成5枚棋子相連的一方獲得勝利。它最開始出現(xiàn)于古代中國,中期經(jīng)高麗(朝鮮)傳入日本得到了長(zhǎng)足發(fā)展,在歐洲倍受人們的青睞。是一種極具趣味性和消遣
2、性的游戲,其游戲規(guī)則通俗易懂,但游戲?qū)?zhàn)中棋局變化無常、難以捉摸,深受廣大人們的喜愛。五子棋不僅能開發(fā)智力,鍛煉我們的邏輯思維,而且蘊(yùn)涵為人處事的道理,有助于磨煉我們的心性。隨著游戲行業(yè)正在逐漸成熟并多元化,各種類別的游戲被安裝進(jìn)計(jì)算機(jī)中,前途一片光明。Linux操作系統(tǒng)圖形化界面的出現(xiàn),其使用越來越廣泛。然而,Linux環(huán)境下的游戲處于一種缺乏狀態(tài),當(dāng)你在Linux下工作的時(shí)候,休息期間玩一下游戲也是一種放松的方式。本系統(tǒng)的設(shè)計(jì)要求是一個(gè)能在Linux操作系統(tǒng)下運(yùn)行,界面美觀運(yùn)行穩(wěn)定且將來可能用于嵌入式移植的游戲。Linux操作系統(tǒng)為平臺(tái),使用GTK技術(shù)實(shí)現(xiàn)五子棋游戲的功能;通過Linux系
3、統(tǒng)編程,GTK編程技術(shù),五子棋游戲算法來實(shí)現(xiàn)趣味性地人機(jī)對(duì)戰(zhàn)。關(guān)鍵詞:Linux操作系統(tǒng);GTK;五子棋游戲;人機(jī)對(duì)戰(zhàn)- I -基于Linux系統(tǒng)的五子棋游戲開發(fā)Gobang game development based on Linux systemAbstractGobang is a game of pure strategy type two game,The two sides were usually use black and white pieces,Cross point on the chessboard line and horizontal line on the fi
4、rst 5 sub line wins. It originated in ancient China, the medium-term development in Japan, popular in Europe. The gobang is one kind the game which is widely liked the populace, its rule is simple, changeable, extremely rich interesting and recreational. Gobang is a puzzle game, it can enhance playe
5、r's thinking ability, improve intelligence, and high in philosophy, helps to ones self-cultivation. With the game industry is gradually mature and diversified, the future is bright, Linux operating system graphical interface, it is used more and more widely, however, under the environment of Lin
6、ux game in a lack of state, when you in Linux work during rest play the next game is a relaxed way. The design requirements of the system is a Linux operating system to run and the interface is beautiful and stable operation and the future may be used for embedded transplant games.Linux operating sy
7、stem as a platform, using GTK technology to achieve Gobang game; through the Linux system programming, GTK programming technology, Gobang game algorithm to achieve interesting man-machine war.Key Words:Linux operating system;GTK; Gobang game; Man-machine war- IV -目 錄摘 要IAbstractII1 緒論11.1 本課題選題依據(jù)11.
8、2 課題國內(nèi)外發(fā)展情況11.3 本課題設(shè)計(jì)的必要性與可行性21.4 本課題設(shè)計(jì)概述22 平臺(tái)簡(jiǎn)介32.1 系統(tǒng)介紹32.1.1 Linux系統(tǒng)發(fā)展歷程32.1.2 Ubuntu Linux操作系統(tǒng)32.1.3 Ubuntu Linux的特性42.2 開發(fā)工具52.2.1 VMware workstation簡(jiǎn)介52.2.2 C語言簡(jiǎn)介62.2.3 GTK簡(jiǎn)介62.2.4 Linux編譯工具GCC簡(jiǎn)介73 開發(fā)環(huán)境的建立83.1 Ubuntu Linux的安裝83.2 GTK環(huán)境的搭建104 程序設(shè)計(jì)與算法實(shí)現(xiàn)134.1 數(shù)據(jù)定義134.2 數(shù)據(jù)結(jié)構(gòu)134.3 界面模塊144.4 核心算法175
9、 系統(tǒng)測(cè)試與成果展示215.1 系統(tǒng)流程215.2 系統(tǒng)測(cè)試215.2.1 界面功能測(cè)試215.2.2 輸入功能測(cè)試225.2.3 游戲功能測(cè)試225.3 成果展示22結(jié) 論25參 考 文 獻(xiàn)26致 謝27基于Linux系統(tǒng)的五子棋游戲開發(fā)1 緒論1.1 本課題選題依據(jù)五子棋是起源于中國古代的傳統(tǒng)黑白棋游戲之一。五子棋不僅能開發(fā)智力,鍛煉我們的邏輯思維,而且蘊(yùn)涵為人處事的道理,有助于磨煉我們的心性。隨著Internet的迅速發(fā)展,及市場(chǎng)強(qiáng)勢(shì)地帶動(dòng)游戲產(chǎn)業(yè)的發(fā)展,國家政府部門也越來越重視游戲產(chǎn)業(yè),它漸漸成為建設(shè)新文化事業(yè)的任務(wù)之一。根據(jù)Linux環(huán)境下游戲的開發(fā)以及五子棋游戲的廣泛受眾和經(jīng)典程度
10、。本課題基于Linux系統(tǒng)下進(jìn)行開發(fā),實(shí)現(xiàn)游戲五子棋的功能。隨著計(jì)算機(jī)的飛速發(fā)展及游戲產(chǎn)業(yè)的逐漸成熟,各種各樣的游戲被安裝進(jìn)計(jì)算機(jī)中。Linux操作系統(tǒng)圖形化界面的出現(xiàn),其使用越來越廣泛。然而,Linux環(huán)境下的游戲處于一種缺乏狀態(tài),在Linux用戶在經(jīng)歷長(zhǎng)時(shí)間工作時(shí),休息期間沒有很好的游戲使其得以放松,做到勞逸結(jié)合,事半功倍。在Linux環(huán)境下開發(fā)游戲(以經(jīng)典的五子棋為例)有其重要的經(jīng)濟(jì)價(jià)值和戰(zhàn)略意義,與此同時(shí),也可以借此課題對(duì)自己所學(xué)的知識(shí)進(jìn)行一次綜合的運(yùn)用與拓展,加強(qiáng)自己的專業(yè)知識(shí)水平和綜合運(yùn)用能力以及實(shí)踐動(dòng)手能力1。1.2 課題國內(nèi)外發(fā)展情況計(jì)算機(jī)發(fā)明后,人們就嘗試運(yùn)用其強(qiáng)大的計(jì)算與存
11、儲(chǔ)記憶能力來與棋壇高手對(duì)弈。1956年美國洛斯阿拉莫斯得研究人員首次編寫了象棋對(duì)弈戰(zhàn)勝一個(gè)剛?cè)氲?個(gè)月的棋手,但已經(jīng)具有劃時(shí)代的意義。在國內(nèi)市場(chǎng),2000年之前,游戲產(chǎn)業(yè)處于一種缺乏創(chuàng)新的狀態(tài)。許許多多游戲廠商都是拿出一種模仿的姿態(tài)在做游戲。導(dǎo)致國外一些先進(jìn)的發(fā)達(dá)的游戲公司迅速進(jìn)入了中國的游戲市場(chǎng)并占有了很大的份額。此時(shí)國內(nèi)游戲廠商不能進(jìn)行很有效的合作,在外國游戲巨頭的壓力下,內(nèi)部形成強(qiáng)烈的競(jìng)爭(zhēng),使得國產(chǎn)游戲的發(fā)展十分緩慢。近年來,隨著政府出臺(tái)了各種與游戲產(chǎn)業(yè)相關(guān)的條例、法規(guī),作為一種新文化事業(yè)來鼓勵(lì)國產(chǎn)游戲的發(fā)展。國內(nèi)游戲開發(fā)商也致力于開發(fā)自主的擁有中國文化的游戲,中國游戲玩家數(shù)量與日俱增,
12、這其中越來越多的玩家開始支持國產(chǎn)游戲,這些都表明著,國產(chǎn)游戲的寒冬已然過去,國內(nèi)娛樂游戲業(yè)的不斷成熟與壯大。在國際上,由獨(dú)立自由的軟件和開放免費(fèi)的源代碼組成的例子就是Linux操作系統(tǒng)。現(xiàn)在Linux操作系統(tǒng)可以被安裝到多種硬件設(shè)備中,從個(gè)人PC機(jī)到企業(yè)、政府的辦公設(shè)備甚至與嵌入式相關(guān)的硬件設(shè)備。Linux操作系統(tǒng)所具有的優(yōu)勢(shì)及潛能不斷被人們開發(fā)利用,在人們的生活中漸漸占據(jù)了一定地位。隨著Linux系統(tǒng)的完善與穩(wěn)定,普通電腦用戶嘗試接觸Linux系統(tǒng)的數(shù)量日益增高,部分電腦廠商發(fā)現(xiàn)商機(jī)開始在其銷售的電腦上可以為用戶免費(fèi)安裝Linux,在桌面電腦操作系統(tǒng)的市場(chǎng)中Linux也慢慢地占據(jù)一席之地。低
13、成本、開放、免費(fèi)這些都成了Linux操作系統(tǒng)的代名詞,符合嵌入式開發(fā)的理念,在嵌入式市場(chǎng)擁有絕對(duì)優(yōu)勢(shì),廣泛地受到了用戶的好評(píng)。KED和GNOME等桌面系統(tǒng)使Linux完全不同于依賴CLI(Command Line Interface,命令行界面)控制的Unix操作系統(tǒng),它更像一個(gè)Mac或Windows之類的操作系統(tǒng),能提供完善的提醒用戶界面,給用戶更好的桌面體驗(yàn)2。1.3 本課題設(shè)計(jì)的必要性與可行性選擇必要性:隨著經(jīng)濟(jì)的快速發(fā)展,人們生活的步調(diào)日益加快,計(jì)算機(jī)的地位在人們的生活中已越來越重要,基于各種操作系統(tǒng)的娛樂游戲也越來越多、越來越大眾化,成為人們?nèi)粘I钪忻懿豢煞值囊徊糠?。而隨著人們生活
14、品質(zhì)的提高,電腦游戲也越來越多元化,五子棋就是其中一種。這一游戲簡(jiǎn)單易行,操作方便,娛樂性較強(qiáng),吸引了不少人。該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對(duì)于一直處于高壓下的現(xiàn)代人是很好的放松工具。選題可行性:本系統(tǒng)的設(shè)計(jì)要求是一個(gè)能在Linux操作系統(tǒng)下運(yùn)行,界面美觀運(yùn)行穩(wěn)定且將來可能用于嵌入式移植的游戲。綜合考慮選擇C語言與GTK技術(shù)來實(shí)現(xiàn)本系統(tǒng)。C語言是一門成熟的高級(jí)語言,可用于開發(fā)各種系統(tǒng),也可用于開發(fā)游戲系統(tǒng)。GTK是Linux下的一個(gè)圖形化編程工具,其開發(fā)出來的程序能在裝有GTK環(huán)境的Linux系統(tǒng)下順利運(yùn)行3。1.4 本課題設(shè)計(jì)概述在本課題中,通過對(duì)五子棋游戲發(fā)展背景的調(diào)查
15、以及Linux系統(tǒng)下小游戲開發(fā)的了解;以Linux操作系統(tǒng)為平臺(tái),使用GTK技術(shù)實(shí)現(xiàn)五子棋游戲;通過Linux系統(tǒng)編程,GTK編程技術(shù),五子棋游戲算法來實(shí)現(xiàn)趣味性地人機(jī)對(duì)戰(zhàn)。2 平臺(tái)簡(jiǎn)介2.1 系統(tǒng)介紹2.1.1 Linux系統(tǒng)發(fā)展歷程Linux是一種類似Unix的操作系統(tǒng),但它具有可以自由傳播和無償使用的特點(diǎn)。它開放全部的源代碼以供用戶進(jìn)行完善修改并且可以被移植到各種各樣的硬件平臺(tái)。Unix作為一種經(jīng)典的操作系統(tǒng),在1969年最開始由貝爾實(shí)驗(yàn)室的計(jì)算機(jī)科學(xué)學(xué)者Ken Thompson和Dennis Ritchie提出并研發(fā)成功,但出于它對(duì)源代碼知識(shí)產(chǎn)權(quán)的保護(hù),它價(jià)格十分昂貴,對(duì)一般計(jì)算機(jī)用戶
16、而言,是難以接受的。早期,Linux是由赫爾辛基大學(xué)的一位叫Linus Torvalds的芬蘭大學(xué)生獨(dú)立設(shè)計(jì)的。當(dāng)時(shí)他有一臺(tái)Intel386計(jì)算機(jī),而他手上的Minix卻不能很好地在他的計(jì)算機(jī)上運(yùn)行。于是他開始修改Minix。經(jīng)過幾個(gè)月的努力,基本完成了目標(biāo)。此時(shí)他發(fā)現(xiàn),他幾乎實(shí)現(xiàn)了一個(gè)新操作系統(tǒng)的原型。1991年10月,Linus把Linux(意為L(zhǎng)inus的Unix)放到FTP服務(wù)器上供其他人自由下載。Linus允許他人免費(fèi)使用Linux的源代碼,并且鼓勵(lì)大家對(duì)其進(jìn)行修改和完善。這一舉動(dòng),使得盈千累萬來自不同地區(qū)不同國家程序員的不懈努力下,Linux得到了轉(zhuǎn)折性的發(fā)展。目前,Linux產(chǎn)品
17、存在的版本可謂不勝枚舉,其中比較著名的有Red Hat、Fedora、Debian、Ubuntu、SUSE、Slackware、Mandriva、TurboLinux及Gentoo等。盡管這些系統(tǒng)在安裝操作和界面外部表現(xiàn)等方面有所不同,但其內(nèi)部采用的Linux內(nèi)核、標(biāo)準(zhǔn)實(shí)用程序等基本一致,具有很多共性4。2.1.2 Ubuntu Linux操作系統(tǒng)Ubuntu Linux系統(tǒng)是眾多Linux發(fā)型品牌之一。在Linux領(lǐng)域中,Ubuntu只是一個(gè)后起之秀,是一個(gè)新興且潛力巨大的Linux發(fā)行品牌,用了短短幾年的時(shí)間Ubuntu就發(fā)展成為一個(gè)流行的、成熟的、以及桌面環(huán)境豐富的Linux的系統(tǒng),受到
18、了從Linux初學(xué)者到資深專家的大批Linux用戶的追捧。Ubuntu是一個(gè)古老的非洲詞匯,表示人類之間的關(guān)懷、共享、和諧。它作為一種理念,倡導(dǎo)個(gè)人,文化以及民族之間的融合、博愛與相互合作。2.1.3 Ubuntu Linux的特性1. 多用戶Linux系統(tǒng)具有許多系統(tǒng)都不具有的特性,它可以使許多用戶操作同一臺(tái)電腦,并且他們?cè)谑褂米约旱牟僮鲿r(shí)不會(huì)影響到其他用戶的進(jìn)程。并且用戶與用戶之間都能夠順暢地溝通與交流。但是為了防止在使用過程中,用戶不經(jīng)意或故意地篡改別的使用者的系統(tǒng)資源,所以使用不同功能的用戶具有不同的使用權(quán)限。2. 多任務(wù)支持多個(gè)任務(wù)或多個(gè)進(jìn)程的執(zhí)行是時(shí)下操作系統(tǒng)所必須具備的特點(diǎn)。在用
19、戶操作計(jì)算機(jī)時(shí),能夠順利執(zhí)行多種操作,運(yùn)行更多軟件程序,提高工作效率。而且保證任務(wù)操作及軟件程序很好并行,互不影響。3. 多平臺(tái)作為一種源代碼開放免費(fèi)的操作系統(tǒng),可以很好地移植到各種平臺(tái)。作為一種應(yīng)用廣泛的操作系統(tǒng)它不僅可以在個(gè)人計(jì)算機(jī)上流暢地運(yùn)行,還可以兼容在不同規(guī)模各類設(shè)備上。同時(shí),它的運(yùn)作不受CPU數(shù)量的限制,不論在32位還是64位上都有較為突出的運(yùn)行狀態(tài)。4. 用戶界面為了適用不同的使用范圍,Linux提供了兩種不同的操作界面。當(dāng)我們需要進(jìn)行腳本功能編寫時(shí),可以進(jìn)入字符界面通過鍵盤錄入命令來使計(jì)算機(jī)運(yùn)行。當(dāng)我們需要便捷的操作時(shí),也可以進(jìn)入圖形界面,通過鼠標(biāo)的操作來傳達(dá)指令,完成所需要的
20、用戶操作。5. 網(wǎng)絡(luò)功能因?yàn)長(zhǎng)inux系統(tǒng)強(qiáng)大的內(nèi)置網(wǎng)絡(luò)功能,所以它在信息傳輸和互聯(lián)網(wǎng)功能的使用有著非同尋常的表現(xiàn)。導(dǎo)致越來越多的用戶選擇使用Linux系統(tǒng)。6. 安全性在時(shí)下對(duì)于計(jì)算機(jī)的使用過程中,安全性一直是被人們所重視的問題。在系統(tǒng)的運(yùn)行過程中,使用了各種各樣的措施來保證用戶的隱私和重要資料,提高系統(tǒng)的穩(wěn)定性。在融合了Unix操作系統(tǒng)的優(yōu)勢(shì)后,Linux具有了更穩(wěn)定更高效地運(yùn)行狀態(tài)。所以以這種系統(tǒng)搭建的服務(wù)器平臺(tái)數(shù)量與日俱增。7. 可移植性因?yàn)長(zhǎng)inux系統(tǒng)強(qiáng)大的適應(yīng)能力,使得它可以在各種平臺(tái)上運(yùn)行。為了方便的用戶的使用,它具有了良好的可移植性。這樣就可以輕松地進(jìn)行移植,比如,從一臺(tái)個(gè)人
21、計(jì)算機(jī)上移植到另一臺(tái)硬件設(shè)備上。8. 開放和免費(fèi)為了面向更多的用戶和更廣闊的使用范圍,Linux系統(tǒng)開放了操作代碼,我們可以輕松的在網(wǎng)上查找到Linux的操作核心內(nèi)容,這樣可以根據(jù)自己的需求,去進(jìn)行不同程序的編寫和調(diào)試。相比于其它系統(tǒng)的收費(fèi)使用,無償?shù)腖inux毫無疑問可以讓我們通過更低的代價(jià)來獲取更多的內(nèi)容5-10。2.2 開發(fā)工具2.2.1 VMware workstation簡(jiǎn)介VMware Workstation(中文名“威睿工作站”)是一款功能強(qiáng)大的桌面虛擬計(jì)算機(jī)軟件,提供用戶可在單一的桌面上同時(shí)運(yùn)行不同的操作系統(tǒng),和進(jìn)行開發(fā)、測(cè)試 、部署新的應(yīng)用程序的最佳解決方案。VMware W
22、orkstation可在一部實(shí)體機(jī)器上模擬完整的網(wǎng)絡(luò)環(huán)境,以及可便于攜帶的虛擬機(jī)器,其更好的靈活性與先進(jìn)的技術(shù)勝過了市面上其他的虛擬計(jì)算機(jī)軟件。對(duì)于企業(yè)的 IT開發(fā)人員和系統(tǒng)管理員而言,VMware在虛擬網(wǎng)路,實(shí)時(shí)快照,拖曳共享文件夾,支持 PXE 等方面的特點(diǎn)使它成為必不可少的工具。VMware Workstation作為時(shí)下一款綜合表現(xiàn)優(yōu)異的桌面虛擬計(jì)算機(jī)軟件,以供用戶選擇安裝的操作系統(tǒng)種類繁多,甚至包括每一種操作系統(tǒng)所發(fā)行的各個(gè)版本。在合理分配內(nèi)存的情況下,它還可以在一臺(tái)計(jì)算機(jī)下安裝多個(gè)虛擬化的操作系統(tǒng)。每個(gè)所安裝的虛擬的操作系統(tǒng)可以做到獨(dú)立的運(yùn)行互不干擾。同時(shí),在虛擬機(jī)運(yùn)行的狀態(tài)下,可
23、以簡(jiǎn)單快捷地回到物理機(jī)的操作系統(tǒng),兩個(gè)操作系統(tǒng)直接可以做到很好的隔離。操作界面簡(jiǎn)單明了,支持中文,適用各種計(jì)算機(jī)領(lǐng)域的用戶11。2.2.2 C語言簡(jiǎn)介C語言是最早由貝爾實(shí)驗(yàn)室的Dennis Ritchie設(shè)計(jì)并實(shí)現(xiàn)。同時(shí)Dennis Ritchie也是Unix操作系統(tǒng)的主要設(shè)計(jì)者之一。C語言是目前國際上為萬千程序員廣泛使用并具有完整體系的計(jì)算機(jī)語言。在熟練掌握C語言的情況下,我們不僅可以利用它來編寫一些應(yīng)用軟件,還是進(jìn)行系統(tǒng)的程序開發(fā),完善系統(tǒng)更好地服務(wù)我們的生活與工作。Linux、Unix操作系統(tǒng)本身都是用C語言開發(fā)。我們每天都可以用到的Windows操作系統(tǒng)其大部分代碼也是有C語言進(jìn)行開發(fā)
24、的。C語言的繪圖能力強(qiáng),具備可移植性,編譯方式簡(jiǎn)易,數(shù)據(jù)處理能力強(qiáng),因此適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫。它是一種數(shù)據(jù)類型豐富、應(yīng)用靈活方便的高級(jí)語言。C語言具有以下特點(diǎn):1. 兩重性C語言具有匯編語言的部分特性。它可以對(duì)計(jì)算機(jī)最基本的工作單元(位、字節(jié)、地址)進(jìn)行操作;也可以對(duì)物理地址直接訪問,對(duì)硬件進(jìn)行操作。具有高級(jí)語言的基本結(jié)構(gòu)和語句。2. 結(jié)構(gòu)化結(jié)構(gòu)化語言落實(shí)到軟件的編寫,系統(tǒng)的開發(fā)上就是實(shí)現(xiàn)程序的模塊化,這也是結(jié)構(gòu)化語言的一個(gè)顯著特點(diǎn)。即程序的各個(gè)部分除了必要信息交流外相對(duì)獨(dú)立,因此各個(gè)部分開發(fā)單獨(dú)開發(fā)和測(cè)試,這樣的編程易于他人的閱讀,自身的整改與維護(hù),大大提高工作效率。 3.
25、 與Linux緊密結(jié)合Linux操作系統(tǒng)本身是由C語言開發(fā)的,在Linux上用C語言開發(fā)的程序運(yùn)行效率很高,可以實(shí)現(xiàn)無縫結(jié)合。相比之下,在某些對(duì)性能要求很高的領(lǐng)域,C語言是首選。4. 可移植性C語言編寫的程序基本可以不用做任何修改,就可以在不同硬件平臺(tái)或操作系統(tǒng)上運(yùn)行12-16。2.2.3 GTK簡(jiǎn)介GTK(GIMP Toolkit)是一套跨多種平臺(tái)的圖形工具包,按LGPL許可協(xié)議發(fā)布的。雖然最初是為GIMP寫的,但目前已發(fā)展為一個(gè)功能強(qiáng)大、設(shè)計(jì)靈活的一個(gè)通用圖形庫。特別是被GNOME選中使得GTK+廣為流傳,成為L(zhǎng)inux下開發(fā)圖形界面的應(yīng)用程序的主流開發(fā)工具之一。當(dāng)然,GTK+并不要求必須
26、在Linux上,事實(shí)上,目前GTK+已經(jīng)有了成功的windows版本。GTK雖然是用C語言寫的,但是同樣可以使用你所熟悉的語言來使用GTK,因?yàn)镚TK+已經(jīng)被綁定到幾乎所有流行的語言上,如:C+,PHP, Guile, Perl,Python,TOM, Ada95,Objective C, Free Pascal,and Eiffel。2.2.4 Linux編譯工具GCC簡(jiǎn)介GCC是一個(gè)用于Linux系統(tǒng)下編程的編譯器。GCC=GNU Compiler Collection,是由Stallman所開發(fā)的Linux下的編譯器,可以編譯的語言包括:C,C+,Objective-C, Fortran
27、,Java,Ada等。不過,現(xiàn)在GCC也有了許多Win32下的移植版本。如今的GCC借助于它的特性,具有了交叉編譯器的功能,即在一個(gè)平臺(tái)下編譯另一個(gè)平臺(tái)的代碼。本課題選用Ubuntu Linux操作系統(tǒng),Ubuntu的桌面環(huán)境是gnome,gnome是使用GTK+編寫,所以選用GTK來進(jìn)行環(huán)境的搭建。運(yùn)行環(huán)境不需要另外配置,即可直接安裝開發(fā)所需要的環(huán)境。同時(shí),Ubuntu Linux操作系統(tǒng)是已經(jīng)默然安裝GCC17。3 開發(fā)環(huán)境的建立3.1 Ubuntu Linux的安裝Ubuntu Linux系統(tǒng)既可以獨(dú)立安裝,也可以與Microsoft Windows系統(tǒng)安裝在同一臺(tái)計(jì)算機(jī)中把Ubuntu
28、 Linux安裝到Windows系統(tǒng)未占用的磁盤分區(qū)中。需要注意,在選擇安裝Linux與Windows雙系統(tǒng)時(shí),我們首先要在計(jì)算機(jī)上安裝Windows操作系統(tǒng)并測(cè)試運(yùn)行,再進(jìn)行Linux系統(tǒng)的安裝,否則會(huì)導(dǎo)致所安裝的Ubuntu Linux操作系統(tǒng)無法正常啟動(dòng)使用。考慮到實(shí)用性而言,本課題設(shè)計(jì)以虛擬機(jī)的形式安裝Ubuntu Linux操作系統(tǒng)。安裝前的準(zhǔn)備如下:1. 硬件要求不同的系統(tǒng)與版本對(duì)硬件要求不盡相同。表3-1以桌面版Ubuntu Linux為例,給出相對(duì)合理的基本硬件要求,其中主要包括CPU、內(nèi)存、磁盤空間等。表3.1 硬件系統(tǒng)要求硬件系統(tǒng)要求簡(jiǎn)單說明CPU至少選用1.0GHz的In
29、telx86系列CPU或更快的CPU內(nèi)存至少配備256MB內(nèi)存或更多內(nèi)存磁盤及磁盤分區(qū)68GB的磁盤空間或更多VGA顯卡/顯示分辨率分辨率1024*768像素引導(dǎo)設(shè)備CD/DVD驅(qū)動(dòng),USB移動(dòng)盤或其他安裝方式2. 磁盤分區(qū)安裝Ubuntu Linux系統(tǒng)時(shí),至少需要兩個(gè)磁盤分區(qū),分別用于創(chuàng)建“/”文件系統(tǒng)與交換分區(qū)。如果是一個(gè)多用戶系統(tǒng),且系統(tǒng)配有足夠的磁盤存儲(chǔ)空間,最好劃分多個(gè)磁盤分區(qū),每一個(gè)磁盤分區(qū)創(chuàng)建單獨(dú)的文件系統(tǒng),如/usr、/var和/home等文件系統(tǒng)。表3.2 磁盤分區(qū)的要求文件系統(tǒng)最小容量要求建議容量分配/250MB2GB/usr1.5GB2GB以上/tmp50MB1GB且小
30、于單獨(dú)的文件系統(tǒng)分區(qū)/var500MB2GB以上/home2GB取決于用戶數(shù)量與數(shù)據(jù)空間的要求/boot100MB100MB3. 安裝方式Ubuntu Linux系統(tǒng)的安裝方式尤其靈活,可以采用不同方法的進(jìn)行引導(dǎo)安裝。本課題以虛擬機(jī)的形式進(jìn)行安裝,首先安裝VMware Workstation(中文名“威睿工作站”),在網(wǎng)易開源鏡像站下載ubuntu-12.04.5-desktop-amd64的ISO映像文件。在VMware的基礎(chǔ)上,通過ISO映像文件,安裝Linux系統(tǒng)。運(yùn)行成功截圖如下: 圖3.1 Ubuntu Linux系統(tǒng)運(yùn)行界面3.2 GTK環(huán)境的搭建在Linux系統(tǒng)下的文本編輯器操作
31、方便,對(duì)于習(xí)慣使用Windows系統(tǒng)的用戶來說,是一個(gè)不錯(cuò)的選擇。與在Windows系統(tǒng)的操作大致相同,右鍵選項(xiàng)新建一個(gè)文本即可。對(duì)于編譯器GCC(GNU Compiler Collection)的選擇,除了其功能強(qiáng)大、簡(jiǎn)單靈活的特點(diǎn)之外,還因?yàn)樗苤С指鞣N不同的硬件平臺(tái)。具有了交叉編譯的功能,即在一個(gè)平臺(tái)下編譯另一個(gè)平臺(tái)的代碼,這樣為后期代碼的編譯與調(diào)試提供的便利??梢跃幾g多種語言,包括:C,C+,Objective-C,F(xiàn)ortran,Java,Ada等。由于桌面環(huán)境gnome,運(yùn)行環(huán)境不需要另外配置,要做的是安裝即可18。在終端下輸入這些命令進(jìn)行完善(有網(wǎng)絡(luò)可用狀態(tài)): 1. 安裝gcc
32、/g+/gdb/make等基本編程工具。$sudo apt-get install build-essential2. 安裝 libgtk2.0-dev libglib2.0-dev等開發(fā)相關(guān)的庫文件。$sudo apt-get install gnome-core-devel3. 用于在編譯GTK程序時(shí)自動(dòng)找出頭文件及庫文件位置。$sudo apt-get install pkg-config4. 安裝 devhelp GTK文檔查看程序。$sudo apt-get install devhelp5. 安裝 gtk/glib 的API參考手冊(cè)及其它幫助文檔。$sudo apt-get ins
33、tall libglib2.0-doc libgtk2.0-doc6. 安裝基于GTK的界面GTK是開發(fā)Gnome窗口的c/c+語言圖形庫。$sudo apt-get install glade libglade2-dev或者$sudo apt-get install glade-gnome glade-common glade-doc7. 安裝gtk2.0 或者 將gtk+2.0所需的所有文件統(tǒng)通下載安裝完畢。$sudo apt-get install libgtk2.0-dev或者$sudo apt-get install libgtk2.0*最后,用測(cè)試程序進(jìn)行編譯運(yùn)行。圖3.2 GTK
34、環(huán)境安裝與完善測(cè)試程序:/Helloworld.c#include <gtk/gtk.h>int main(int argc,char *argv) GtkWidget *window; GtkWidget *label; gtk_init(&argc,&argv); /* create the main, top level, window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* give it the title */ gtk_window_set_title(GTK_WINDOW(window),
35、"Hello World"); /* connect the destroy signal of the window to gtk_main_quit * when the window is about to be destroyed we get a notification and * stop the main GTK+ loop*/ g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL); /* create the "Hello, World"
36、label */ label = gtk_label_new("Hello, World"); /* and insert it into the main window */ gtk_container_add(GTK_CONTAINER(window),label); /* make sure that everything, window and label, are visible */ gtk_widget_show_all(window); /* start the main loop, and let it rest until the application
37、 is closed */ gtk_main(); return 0;經(jīng)編譯器GCC無誤,運(yùn)行結(jié)果如下:圖3.3 測(cè)試程序運(yùn)行4 程序設(shè)計(jì)與算法實(shí)現(xiàn)4.1 數(shù)據(jù)定義1. 用一個(gè)二維數(shù)組,表示棋子,首先初始化均為空的。 int i, j; for(i=0; i<NUM;i+) for(j=0; j<NUM;j+) arrayij = EMPTY;2. 程序涉及到的相關(guān)變量定義如下:int play(int, int, int *, int *); /游戲接口int isWin(int ); /判斷獲勝int firstStep(int, int, int *, int *); /首步
38、棋int judge(int, int, int *, int *); /判斷單行連子int judgePoint(int, int , int, int , int , int *, int *); /預(yù)測(cè)雙行連子int forcast(int, int, int *, int *); 4.2 數(shù)據(jù)結(jié)構(gòu)1. 這個(gè)是一個(gè)回調(diào)函數(shù),等于是用戶每放下一個(gè)棋子的時(shí)候,就會(huì)開始執(zhí)行。gint area_redraw(GtkWidget *widget, GdkEventExpose *event, gpointer data)2. 獲取當(dāng)前用戶放棋子的坐標(biāo)。gdk_window_get_pointer
39、(widget->window, &x1, &y1, &state);3. 對(duì)游戲結(jié)果的判定。if(winflag=0) rtn = play(CURTOROW(x1), CURTOROW(y1), &x2, &y2);/如果當(dāng)前沒有誰輸贏的話,就通過play函數(shù),計(jì)算出電腦當(dāng)前應(yīng)該是放什么位置/其中x2,y2就是電腦的坐標(biāo),x1,y1就是用戶的坐標(biāo)。這個(gè)返回值rtn表示比賽結(jié)果,有五種情況 ,小于0表示平局。/等于0,表示當(dāng)前沒有是沒有輸贏,屬于正常情況,還可以繼續(xù)下。等于1表示電腦贏,等于2表示玩家贏。等于3表示用戶放的位置不符合游戲規(guī)則。 i
40、f(rtn<0)/平局 /以下顯示對(duì)話和對(duì)話框界面 memset(words, 0, sizeof(words); snprintf(words,sizeof(words)-1, "電腦說:請(qǐng)重新開始吧!"); gtk_label_set_text(label, words); /*顯示對(duì)話框*/ memset(msg, 0, sizeof(msg); snprintf(msg, sizeof(msg)-1, "可能已平局?!"); dialog=gtk_message_dialog_new(GTK_WINDOW(window),0,GTK_MES
41、SAGE_INFO,GTK_BUTTONS_OK,msg); gtk_dialog_run(GTK_DIALOG(dialog); gtk_widget_destroy(dialog); 4.3 界面模塊1. 初始化界面,對(duì)背景、線條、棋子進(jìn)行顏色選擇及填充。GDK(CIMP繪圖包)是簡(jiǎn)單化編程人員使用X函數(shù)的函數(shù)庫。X庫是低層函數(shù),由許多只做專門和相對(duì)簡(jiǎn)單任務(wù)的函數(shù)組成。GDK創(chuàng)建保存窗口配置信息的數(shù)據(jù)結(jié)構(gòu),并提供使用這些數(shù)據(jù)結(jié)構(gòu)的函數(shù)。例如,色彩保存在一個(gè)GdkColor結(jié)構(gòu)中,函數(shù)可以使用該結(jié)構(gòu)在色彩圖中自動(dòng)分配顏色或定義顏色進(jìn)行分配。如果在色彩圖中沒有可以選擇的顏色,GDK會(huì)尋找一個(gè)與
42、之相近的顏色進(jìn)行填充。int i, j; GdkColor color; GdkDrawable *canvas; GdkGC *gc; canvas = widget->window; gc = widget->style->fg_gcGTK_WIDGET_STATE(widget); color.red = 65535; color.green = 47545; color.blue = 2855; gdk_gc_set_rgb_fg_color (gc, &color); for(i=0;i<DRAWING_AREA_WIDTH;i+) gdk_draw_
43、line (canvas, gc, 0, i, DRAWING_AREA_WIDTH, i); color.red = 25723; color.green = 26985; color.blue = 5140; gdk_gc_set_rgb_fg_color (gc, &color); for(i=0; i<=DRAWING_AREA_WIDTH; i+=SIZE) gdk_draw_line (canvas, gc, i, 0, i, DRAWING_AREA_HEIGHT); for(i=0; i<=DRAWING_AREA_HEIGHT; i+=SIZE) gdk_
44、draw_line (canvas, gc, 0, i, DRAWING_AREA_WIDTH, i); for(i=0; i<NUM; i+) for(j=0; j<NUM; j+) if(arrayij=HUMAN) color.red = 65535; color.green = 65535; color.blue = 65535; gdk_gc_set_rgb_fg_color (gc, &color); gdk_draw_arc (canvas, gc, TRUE, ROWTOPOS(j), ROWTOPOS(i), CMANSIZE, CMANSIZE, 0,
45、360*64); gdk_draw_arc (canvas, gc, FALSE, ROWTOPOS(j), ROWTOPOS(i), CMANSIZE, CMANSIZE, 0, 360*64); 2. 創(chuàng)建游戲?qū)υ捊缑?,設(shè)定棋盤大小,標(biāo)題。GTK+就是GIMP工具包,它把GDK提供的函數(shù)組織成對(duì)象。大部分對(duì)象是可顯示對(duì)象,例如按鈕、標(biāo)題、文本、輸入輸出窗口,其中一類對(duì)象稱作小部件(widget)。帶有標(biāo)準(zhǔn)接口,提供顏色、尺寸、位置、鼠標(biāo)、鍵盤、字體等必須的項(xiàng)目。函數(shù)gtk_window_new執(zhí)行游戲界面創(chuàng)建的命令,在由函數(shù)gtk_widget_set_usize對(duì)所創(chuàng)界的界面進(jìn)行尺寸的設(shè)
46、置。最后再調(diào)用gtk_drawing_area_new()對(duì)所建立的窗口進(jìn)行區(qū)域繪制。 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window, WINWIDTH, WINHEIGHT); gtk_container_set_border_width(GTK_CONTAINER(window), WINDOW_BORDER_WIDTH); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_tit
47、le (GTK_WINDOW(window), "五子棋"); /對(duì)建立窗口進(jìn)行命名 gtk_window_set_resizable(GTK_WINDOW(window), FALSE);g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window); drawing_area = gtk_drawing_area_new();gtk_widget_set_size_request(drawing_area, DRAWIN
48、G_AREA_WIDTH, DRAWING_AREA_HEIGHT);4.4 核心算法根據(jù)棋局的形式,判斷下一次的落子會(huì)形成的棋形,遍歷全盤找出最優(yōu)的落子位置。并且為每一次的可能落子位置計(jì)算其重要程度(用后面所說的分值來替代)。遍歷棋盤未落棋子位置,比較玩家落子的最大分值的點(diǎn)和機(jī)器落子的最大分值的點(diǎn),來找出最佳的落子位置,最重要的落子點(diǎn)。在對(duì)戰(zhàn)進(jìn)行的過程中,如果機(jī)器落子的最大分值比玩家落子的最大分值要小,呈現(xiàn)劣勢(shì)對(duì)局,機(jī)器會(huì)優(yōu)先把棋子落入玩家的最大分值點(diǎn)的位置上(玩家最有可能獲勝的位置),稱其為防守;反而言之,如果機(jī)器落子的最大分值比玩家要大,呈現(xiàn)優(yōu)勢(shì)對(duì)局,機(jī)器就會(huì)將棋子置入自己最有可能獲勝的
49、位置上,稱其為進(jìn)攻。通過調(diào)用judgePoint判斷是否有單行連子、雙行連子。int judge(int player, int num, int *x2, int *y2) int i, j, drY, drX, tmp, op; op = (player=HUMAN) ? COMPUTER:HUMAN); for(i=0; i<NUM; i+) for(j=0; j<NUM; j+) if(arrayij!=player) continue; if(judgePoint(player, num, 1, i, j, x2, y2)=1) return 1; for(i=0; i&
50、lt;NUM; i+) for(j=0; j<NUM; j+) if(arrayij!=player) continue; if(judgePoint(player, num, 3, i, j, x2, y2)=1) return 1; return 0;用戶放了一個(gè)棋子之后,先判斷電腦有沒有4個(gè)連續(xù)單行棋子,有的話就直接放入湊到5個(gè),則電腦獲得勝利;如果等于0,即電腦沒有連續(xù)4個(gè)的單行棋子,再判斷用戶有沒有連續(xù)4個(gè)的,有的話,進(jìn)行防守。如果等于0,則繼續(xù)判斷電腦有沒有連續(xù)3個(gè)的單行棋子,湊成4個(gè)連續(xù)單行棋子,如果沒有,則繼續(xù)判斷用戶有沒有連續(xù)3個(gè)的單行棋子,進(jìn)行防守用戶。反之,如果用戶
51、也沒有,判斷電腦有沒有雙行湊成3個(gè)的棋子,如下雙行湊成三連棋子的情況: 圖4.1 雙行三連子展示如果電腦有,則放入。如果等于0,沒有的話,判斷用戶有沒有這樣的情況,進(jìn)行防守用戶。如果用戶也沒有。接下來可以不用防守用戶,電腦再繼續(xù)下棋,先看是否有雙行2棋子,如果沒有。就看電腦是否有連續(xù)兩個(gè)單行棋子。如果電腦沒有就在用戶的周圍放下一個(gè)位置,即firstStep。如果用戶周邊不能放棋子了,就是平局。說明棋子已經(jīng)滿了。if(judge(COMPUTER, 4, x2, y2)=0) if(judge(HUMAN, 4, x2 , y2)=0) if(judge(COMPUTER, 3 , x2, y2
52、)=0) if(judge(HUMAN, 3, x2 ,y2)=0) if(forcast(COMPUTER, 3, x2, y2)=0) if(forcast(HUMAN, 3, x2, y2)=0) if(forcast(COMPUTER, 2, x2, y2)=0) if(judge(COMPUTER, 2, x2, y2)=0) if(firstStep(x1 ,y1, x2, y2)=0) return -1; if(isWin(HUMAN)/判斷是不是用戶贏了 return HUMAN; if(isWin(COMPUTER)/判斷是不是電腦贏了 return COMPUTER; return 0; int isWin(int player) int i, j, drY, drX; for(i=0; i<NUM; i+) for(j=0; j<NUM; j+) if(arrayij!=player) continue; for(drY=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一職工親子活動(dòng)方案
- 六一資助活動(dòng)方案
- 六一造勢(shì)活動(dòng)方案
- 六下數(shù)學(xué)教研活動(dòng)方案
- 六安幼兒園家長(zhǎng)活動(dòng)方案
- 醫(yī)療設(shè)備制度考試試題及答案
- 一??荚囋囶}及答案美術(shù)
- 安全生產(chǎn)常識(shí)試題及答案
- 藥土考試試題及答案
- 藥品安全考試試題及答案
- 2025年黑龍江、吉林、遼寧、內(nèi)蒙古高考生物真題試卷(解析版)
- 2025年藝術(shù)與數(shù)字藝術(shù)類事業(yè)單位招聘考試綜合類專業(yè)能力測(cè)試試卷
- 阿米巴模式的合同協(xié)議書
- 福建省泉州市晉江市2025屆數(shù)學(xué)七下期末調(diào)研試題含解析
- 技術(shù)員獎(jiǎng)勵(lì)協(xié)議書
- 北京市先農(nóng)壇體育運(yùn)動(dòng)技術(shù)學(xué)校招聘筆試真題2024
- 打破傳統(tǒng)藩籬:小學(xué)高段先寫后教習(xí)作教學(xué)模式的創(chuàng)新與實(shí)踐
- 2025年道德與法治課程考試試卷及答案
- 山西省運(yùn)城市2025年中考一模語文試題(含答案)
- 天津2025年中國醫(yī)學(xué)科學(xué)院放射醫(yī)學(xué)研究所第一批招聘筆試歷年參考題庫附帶答案詳解
- 2025河南中考:政治必背知識(shí)點(diǎn)
評(píng)論
0/150
提交評(píng)論