




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、大 連 民 族 大 學(xué) 本 科 畢 業(yè) 設(shè) 計(jì)(論 文)基于Linux系統(tǒng)的五子棋游戲開發(fā)學(xué) 院: 信息與通信工程學(xué)院 (系)專 業(yè): 通信工程 學(xué) 生 姓 名: 隋志浩 學(xué) 號: 2012136219 指 導(dǎo) 教 師: 姚遠(yuǎn) 評 閱 教 師: 完 成 日 期: 2016年06月15日 大連民族大學(xué)基于Linux系統(tǒng)的五子棋游戲開發(fā)摘 要五子棋是一種兩人對弈的純策略型棋類游戲,通常對戰(zhàn)雙方分別使用黑色與白色兩種棋子,下在棋盤上橫向、縱向和對角線方向,最先完成5枚棋子相連的一方獲得勝利。它最開始出現(xiàn)于古代中國,中期經(jī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)為平臺,使用GTK技術(shù)實(shí)現(xiàn)五子棋游戲的功能;通過Linux系
3、統(tǒng)編程,GTK編程技術(shù),五子棋游戲算法來實(shí)現(xiàn)趣味性地人機(jī)對戰(zhàn)。關(guān)鍵詞:Linux操作系統(tǒng);GTK;五子棋游戲;人機(jī)對戰(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 平臺簡介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簡介52.2.2 C語言簡介62.2.3 GTK簡介62.2.4 Linux編譯工具GCC簡介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)測試與成果展示215.1 系統(tǒng)流程215.2 系統(tǒng)測試215.2.1 界面功能測試215.2.2 輸入功能測試225.2.3 游戲功能測試225.3 成果展示22結(jié) 論25參 考 文 獻(xiàn)26致 謝27基于Linux系統(tǒng)的五子棋游戲開發(fā)1 緒論1.1 本課題選題依據(jù)五子棋是起源于中國古代的傳統(tǒng)黑白棋游戲之一。五子棋不僅能開發(fā)智力,鍛煉我們的邏輯思維,而且蘊(yùn)涵為人處事的道理,有助于磨煉我們的心性。隨著Internet的迅速發(fā)展,及市場強(qiá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)歷長時(shí)間工作時(shí),休息期間沒有很好的游戲使其得以放松,做到勞逸結(jié)合,事半功倍。在Linux環(huán)境下開發(fā)游戲(以經(jīng)典的五子棋為例)有其重要的經(jīng)濟(jì)價(jià)值和戰(zhàn)略意義,與此同時(shí),也可以借此課題對自己所學(xué)的知識進(jìn)行一次綜合的運(yùn)用與拓展,加強(qiáng)自己的專業(yè)知識水平和綜合運(yùn)用能力以及實(shí)踐動手能力1。1.2 課題國內(nèi)外發(fā)展情況計(jì)算機(jī)發(fā)明后,人們就嘗試運(yùn)用其強(qiáng)大的計(jì)算與存
11、儲記憶能力來與棋壇高手對弈。1956年美國洛斯阿拉莫斯得研究人員首次編寫了象棋對弈戰(zhàn)勝一個(gè)剛?cè)氲?個(gè)月的棋手,但已經(jīng)具有劃時(shí)代的意義。在國內(nèi)市場,2000年之前,游戲產(chǎn)業(yè)處于一種缺乏創(chuàng)新的狀態(tài)。許許多多游戲廠商都是拿出一種模仿的姿態(tài)在做游戲。導(dǎo)致國外一些先進(jìn)的發(fā)達(dá)的游戲公司迅速進(jìn)入了中國的游戲市場并占有了很大的份額。此時(shí)國內(nèi)游戲廠商不能進(jìn)行很有效的合作,在外國游戲巨頭的壓力下,內(nèi)部形成強(qiáng)烈的競爭,使得國產(chǎn)游戲的發(fā)展十分緩慢。近年來,隨著政府出臺了各種與游戲產(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)?,F(xiàn)在Linux操作系統(tǒng)可以被安裝到多種硬件設(shè)備中,從個(gè)人PC機(jī)到企業(yè)、政府的辦公設(shè)備甚至與嵌入式相關(guān)的硬件設(shè)備。Linux操作系統(tǒng)所具有的優(yōu)勢及潛能不斷被人們開發(fā)利用,在人們的生活中漸漸占據(jù)了一定地位。隨著Linux系統(tǒng)的完善與穩(wěn)定,普通電腦用戶嘗試接觸Linux系統(tǒng)的數(shù)量日益增高,部分電腦廠商發(fā)現(xiàn)商機(jī)開始在其銷售的電腦上可以為用戶免費(fèi)安裝Linux,在桌面電腦操作系統(tǒng)的市場中Linux也慢慢地占據(jù)一席之地。低
13、成本、開放、免費(fèi)這些都成了Linux操作系統(tǒng)的代名詞,符合嵌入式開發(fā)的理念,在嵌入式市場擁有絕對優(yōu)勢,廣泛地受到了用戶的好評。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ì)的提高,電腦游戲也越來越多元化,五子棋就是其中一種。這一游戲簡單易行,操作方便,娛樂性較強(qiáng),吸引了不少人。該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對于一直處于高壓下的現(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語言是一門成熟的高級語言,可用于開發(fā)各種系統(tǒng),也可用于開發(fā)游戲系統(tǒng)。GTK是Linux下的一個(gè)圖形化編程工具,其開發(fā)出來的程序能在裝有GTK環(huán)境的Linux系統(tǒng)下順利運(yùn)行3。1.4 本課題設(shè)計(jì)概述在本課題中,通過對五子棋游戲發(fā)展背景的調(diào)查
15、以及Linux系統(tǒng)下小游戲開發(fā)的了解;以Linux操作系統(tǒng)為平臺,使用GTK技術(shù)實(shí)現(xiàn)五子棋游戲;通過Linux系統(tǒng)編程,GTK編程技術(shù),五子棋游戲算法來實(shí)現(xiàn)趣味性地人機(jī)對戰(zhàn)。2 平臺簡介2.1 系統(tǒng)介紹2.1.1 Linux系統(tǒng)發(fā)展歷程Linux是一種類似Unix的操作系統(tǒng),但它具有可以自由傳播和無償使用的特點(diǎn)。它開放全部的源代碼以供用戶進(jìn)行完善修改并且可以被移植到各種各樣的硬件平臺。Unix作為一種經(jīng)典的操作系統(tǒng),在1969年最開始由貝爾實(shí)驗(yàn)室的計(jì)算機(jī)科學(xué)學(xué)者Ken Thompson和Dennis Ritchie提出并研發(fā)成功,但出于它對源代碼知識產(chǎn)權(quán)的保護(hù),它價(jià)格十分昂貴,對一般計(jì)算機(jī)用戶
16、而言,是難以接受的。早期,Linux是由赫爾辛基大學(xué)的一位叫Linus Torvalds的芬蘭大學(xué)生獨(dú)立設(shè)計(jì)的。當(dāng)時(shí)他有一臺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(意為Linus的Unix)放到FTP服務(wù)器上供其他人自由下載。Linus允許他人免費(fèi)使用Linux的源代碼,并且鼓勵(lì)大家對其進(jìn)行修改和完善。這一舉動,使得盈千累萬來自不同地區(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)都不具有的特性,它可以使許多用戶操作同一臺電腦,并且他們在使用自己的操作時(shí)不會影響到其他用戶的進(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. 多平臺作為一種源代碼開放免費(fèi)的操作系統(tǒng),可以很好地移植到各種平臺。作為一種應(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)長inux系統(tǒng)強(qiáng)大的內(nèi)置網(wǎng)絡(luò)功能,所以它在信息傳輸和互聯(lián)網(wǎng)功能的使用有著非同尋常的表現(xiàn)。導(dǎo)致越來越多的用戶選擇使用Linux系統(tǒng)。6. 安全性在時(shí)下對于計(jì)算機(jī)的使用過程中,安全性一直是被人們所重視的問題。在系統(tǒng)的運(yùn)行過程中,使用了各種各樣的措施來保證用戶的隱私和重要資料,提高系統(tǒng)的穩(wěn)定性。在融合了Unix操作系統(tǒng)的優(yōu)勢后,Linux具有了更穩(wěn)定更高效地運(yùn)行狀態(tài)。所以以這種系統(tǒng)搭建的服務(wù)器平臺數(shù)量與日俱增。7. 可移植性因?yàn)長inux系統(tǒng)強(qiáng)大的適應(yīng)能力,使得它可以在各種平臺上運(yùn)行。為了方便的用戶的使用,它具有了良好的可移植性。這樣就可以輕松地進(jìn)行移植,比如,從一臺個(gè)人
21、計(jì)算機(jī)上移植到另一臺硬件設(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簡介VMware Workstation(中文名“威睿工作站”)是一款功能強(qiáng)大的桌面虛擬計(jì)算機(jī)軟件,提供用戶可在單一的桌面上同時(shí)運(yùn)行不同的操作系統(tǒng),和進(jìn)行開發(fā)、測試 、部署新的應(yīng)用程序的最佳解決方案。VMware W
22、orkstation可在一部實(shí)體機(jī)器上模擬完整的網(wǎng)絡(luò)環(huán)境,以及可便于攜帶的虛擬機(jī)器,其更好的靈活性與先進(jìn)的技術(shù)勝過了市面上其他的虛擬計(jì)算機(jī)軟件。對于企業(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)存的情況下,它還可以在一臺計(jì)算機(jī)下安裝多個(gè)虛擬化的操作系統(tǒng)。每個(gè)所安裝的虛擬的操作系統(tǒng)可以做到獨(dú)立的運(yùn)行互不干擾。同時(shí),在虛擬機(jī)運(yùn)行的狀態(tài)下,可
23、以簡單快捷地回到物理機(jī)的操作系統(tǒng),兩個(gè)操作系統(tǒng)直接可以做到很好的隔離。操作界面簡單明了,支持中文,適用各種計(jì)算機(jī)領(lǐng)域的用戶11。2.2.2 C語言簡介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),具備可移植性,編譯方式簡易,數(shù)據(jù)處理能力強(qiáng),因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫。它是一種數(shù)據(jù)類型豐富、應(yīng)用靈活方便的高級語言。C語言具有以下特點(diǎn):1. 兩重性C語言具有匯編語言的部分特性。它可以對計(jì)算機(jī)最基本的工作單元(位、字節(jié)、地址)進(jìn)行操作;也可以對物理地址直接訪問,對硬件進(jìn)行操作。具有高級語言的基本結(jié)構(gòu)和語句。2. 結(jié)構(gòu)化結(jié)構(gòu)化語言落實(shí)到軟件的編寫,系統(tǒng)的開發(fā)上就是實(shí)現(xiàn)程序的模塊化,這也是結(jié)構(gòu)化語言的一個(gè)顯著特點(diǎn)。即程序的各個(gè)部分除了必要信息交流外相對獨(dú)立,因此各個(gè)部分開發(fā)單獨(dú)開發(fā)和測試,這樣的編程易于他人的閱讀,自身的整改與維護(hù),大大提高工作效率。 3.
25、 與Linux緊密結(jié)合Linux操作系統(tǒng)本身是由C語言開發(fā)的,在Linux上用C語言開發(fā)的程序運(yùn)行效率很高,可以實(shí)現(xiàn)無縫結(jié)合。相比之下,在某些對性能要求很高的領(lǐng)域,C語言是首選。4. 可移植性C語言編寫的程序基本可以不用做任何修改,就可以在不同硬件平臺或操作系統(tǒng)上運(yùn)行12-16。2.2.3 GTK簡介GTK(GIMP Toolkit)是一套跨多種平臺的圖形工具包,按LGPL許可協(xié)議發(fā)布的。雖然最初是為GIMP寫的,但目前已發(fā)展為一個(gè)功能強(qiáng)大、設(shè)計(jì)靈活的一個(gè)通用圖形庫。特別是被GNOME選中使得GTK+廣為流傳,成為Linux下開發(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簡介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è)平臺下編譯另一個(gè)平臺的代碼。本課題選用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)安裝在同一臺計(jì)算機(jī)中把Ubuntu
28、 Linux安裝到Windows系統(tǒng)未占用的磁盤分區(qū)中。需要注意,在選擇安裝Linux與Windows雙系統(tǒng)時(shí),我們首先要在計(jì)算機(jī)上安裝Windows操作系統(tǒng)并測試運(yùn)行,再進(jìn)行Linux系統(tǒng)的安裝,否則會導(dǎo)致所安裝的Ubuntu Linux操作系統(tǒng)無法正常啟動使用??紤]到實(shí)用性而言,本課題設(shè)計(jì)以虛擬機(jī)的形式安裝Ubuntu Linux操作系統(tǒng)。安裝前的準(zhǔn)備如下:1. 硬件要求不同的系統(tǒng)與版本對硬件要求不盡相同。表3-1以桌面版Ubuntu Linux為例,給出相對合理的基本硬件要求,其中主要包括CPU、內(nèi)存、磁盤空間等。表3.1 硬件系統(tǒng)要求硬件系統(tǒng)要求簡單說明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ū)動,USB移動盤或其他安裝方式2. 磁盤分區(qū)安裝Ubuntu Linux系統(tǒng)時(shí),至少需要兩個(gè)磁盤分區(qū),分別用于創(chuàng)建“/”文件系統(tǒng)與交換分區(qū)。如果是一個(gè)多用戶系統(tǒng),且系統(tǒng)配有足夠的磁盤存儲空間,最好劃分多個(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、方便,對于習(xí)慣使用Windows系統(tǒng)的用戶來說,是一個(gè)不錯(cuò)的選擇。與在Windows系統(tǒng)的操作大致相同,右鍵選項(xiàng)新建一個(gè)文本即可。對于編譯器GCC(GNU Compiler Collection)的選擇,除了其功能強(qiáng)大、簡單靈活的特點(diǎn)之外,還因?yàn)樗苤С指鞣N不同的硬件平臺。具有了交叉編譯的功能,即在一個(gè)平臺下編譯另一個(gè)平臺的代碼,這樣為后期代碼的編譯與調(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í)自動找出頭文件及庫文件位置。$sudo apt-get install pkg-config4. 安裝 devhelp GTK文檔查看程序。$sudo apt-get install devhelp5. 安裝 gtk/glib 的API參考手冊及其它幫助文檔。$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*最后,用測試程序進(jìn)行編譯運(yùn)行。圖3.2 GTK
34、環(huán)境安裝與完善測試程序:/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 測試程序運(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ù)測雙行連子int forcast(int, int, int *, int *); 4.2 數(shù)據(jù)結(jié)構(gòu)1. 這個(gè)是一個(gè)回調(diào)函數(shù),等于是用戶每放下一個(gè)棋子的時(shí)候,就會開始執(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. 對游戲結(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)/平局 /以下顯示對話和對話框界面 memset(words, 0, sizeof(words); snprintf(words,sizeof(words)-1, "電腦說:請重新開始吧!"); gtk_label_set_text(label, words); /*顯示對話框*/ 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. 初始化界面,對背景、線條、棋子進(jìn)行顏色選擇及填充。GDK(CIMP繪圖包)是簡單化編程人員使用X函數(shù)的函數(shù)庫。X庫是低層函數(shù),由許多只做專門和相對簡單任務(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)在色彩圖中自動分配顏色或定義顏色進(jìn)行分配。如果在色彩圖中沒有可以選擇的顏色,GDK會尋找一個(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ù)組織成對象。大部分對象是可顯示對象,例如按鈕、標(biāo)題、文本、輸入輸出窗口,其中一類對象稱作小部件(widget)。帶有標(biāo)準(zhǔn)接口,提供顏色、尺寸、位置、鼠標(biāo)、鍵盤、字體等必須的項(xiàng)目。函數(shù)gtk_window_new執(zhí)行游戲界面創(chuàng)建的命令,在由函數(shù)gtk_widget_set_usize對所創(chuàng)界的界面進(jìn)行尺寸的設(shè)
46、置。最后再調(diào)用gtk_drawing_area_new()對所建立的窗口進(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), "五子棋"); /對建立窗口進(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ù)棋局的形式,判斷下一次的落子會形成的棋形,遍歷全盤找出最優(yōu)的落子位置。并且為每一次的可能落子位置計(jì)算其重要程度(用后面所說的分值來替代)。遍歷棋盤未落棋子位置,比較玩家落子的最大分值的點(diǎn)和機(jī)器落子的最大分值的點(diǎn),來找出最佳的落子位置,最重要的落子點(diǎn)。在對戰(zhàn)進(jìn)行的過程中,如果機(jī)器落子的最大分值比玩家落子的最大分值要小,呈現(xiàn)劣勢對局,機(jī)器會優(yōu)先把棋子落入玩家的最大分值點(diǎn)的位置上(玩家最有可能獲勝的位置),稱其為防守;反而言之,如果機(jī)器落子的最大分值比玩家要大,呈現(xiàn)優(yōu)勢對局,機(jī)器就會將棋子置入自己最有可能獲勝的
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等.壓縮文件請下載最新的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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司新年開班活動方案
- 公司福利拼圖活動方案
- 公司組織打排球活動方案
- 公司現(xiàn)場搶紅包活動方案
- 公司春節(jié)團(tuán)隊(duì)活動方案
- 2025年影響力與傳播學(xué)綜合能力考試試題及答案
- 2025年文化遺產(chǎn)保護(hù)與管理考試題及答案
- 2025年摩托車駕駛技術(shù)培訓(xùn)和考核試卷及答案
- 2025年農(nóng)村經(jīng)濟(jì)管理考試試卷及答案
- 2025年計(jì)算機(jī)設(shè)計(jì)師職業(yè)資格考試題及答案
- 【低保政策執(zhí)行過程中產(chǎn)生的消極效果及優(yōu)化建議分析11000字(論文)】
- 醫(yī)院護(hù)理培訓(xùn)課件:《妊娠劇吐的護(hù)理查房》
- 深圳小學(xué)六年級下冊英語單詞表(帶音標(biāo))
- 幼兒園小班數(shù)學(xué)《圖形王國歷險(xiǎn)記》課件
- GB/T 22461.1-2023表面化學(xué)分析詞匯第1部分:通用術(shù)語及譜學(xué)術(shù)語
- 造林(喬木林、灌木林、經(jīng)濟(jì)林)單元工程質(zhì)量評定表(2023版)
- 必修2冊重點(diǎn)知識點(diǎn)提綱 高中地湘教版
- 2023春國開個(gè)人與團(tuán)隊(duì)管理1-32章自測試題及答案
- 2023-2024學(xué)年四川省涼山州小學(xué)數(shù)學(xué)五年級下冊期末自測試卷
- 微小病變腎病指南解讀
- GB/T 9113-2010整體鋼制管法蘭
評論
0/150
提交評論