




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、大 連 民 族 大 學 本 科 畢 業(yè) 設 計(論 文)基于Linux系統(tǒng)的五子棋游戲開發(fā)學 院: 信息與通信工程學院 (系)專 業(yè): 通信工程 學 生 姓 名: 隋志浩 學 號: 2012136219 指 導 教 師: 姚遠 評 閱 教 師: 完 成 日 期: 2016年06月15日 大連民族大學基于Linux系統(tǒng)的五子棋游戲開發(fā)摘 要五子棋是一種兩人對弈的純策略型棋類游戲,通常對戰(zhàn)雙方分別使用黑色與白色兩種棋子,下在棋盤上橫向、縱向和對角線方向,最先完成5枚棋子相連的一方獲得勝利。它最開始出現(xiàn)于古代中國,中期經(jīng)高麗(朝鮮)傳入日本得到了長足發(fā)展,在歐洲倍受人們的青睞。是一種極具趣味性和消遣
2、性的游戲,其游戲規(guī)則通俗易懂,但游戲?qū)?zhàn)中棋局變化無常、難以捉摸,深受廣大人們的喜愛。五子棋不僅能開發(fā)智力,鍛煉我們的邏輯思維,而且蘊涵為人處事的道理,有助于磨煉我們的心性。隨著游戲行業(yè)正在逐漸成熟并多元化,各種類別的游戲被安裝進計算機中,前途一片光明。Linux操作系統(tǒng)圖形化界面的出現(xiàn),其使用越來越廣泛。然而,Linux環(huán)境下的游戲處于一種缺乏狀態(tài),當你在Linux下工作的時候,休息期間玩一下游戲也是一種放松的方式。本系統(tǒng)的設計要求是一個能在Linux操作系統(tǒng)下運行,界面美觀運行穩(wěn)定且將來可能用于嵌入式移植的游戲。Linux操作系統(tǒng)為平臺,使用GTK技術實現(xiàn)五子棋游戲的功能;通過Linux系
3、統(tǒng)編程,GTK編程技術,五子棋游戲算法來實現(xiàn)趣味性地人機對戰(zhàn)。關鍵詞:Linux操作系統(tǒng);GTK;五子棋游戲;人機對戰(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 本課題設計的必要性與可行性21.4 本課題設計概述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 程序設計與算法實現(xiàn)134.1 數(shù)據(jù)定義134.2 數(shù)據(jù)結構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結 論25參 考 文 獻26致 謝27基于Linux系統(tǒng)的五子棋游戲開發(fā)1 緒論1.1 本課題選題依據(jù)五子棋是起源于中國古代的傳統(tǒng)黑白棋游戲之一。五子棋不僅能開發(fā)智力,鍛煉我們的邏輯思維,而且蘊涵為人處事的道理,有助于磨煉我們的心性。隨著Internet的迅速發(fā)展,及市場強勢地帶動游戲產(chǎn)業(yè)的發(fā)展,國家政府部門也越來越重視游戲產(chǎn)業(yè),它漸漸成為建設新文化事業(yè)的任務之一。根據(jù)Linux環(huán)境下游戲的開發(fā)以及五子棋游戲的廣泛受眾和經(jīng)典程度
10、。本課題基于Linux系統(tǒng)下進行開發(fā),實現(xiàn)游戲五子棋的功能。隨著計算機的飛速發(fā)展及游戲產(chǎn)業(yè)的逐漸成熟,各種各樣的游戲被安裝進計算機中。Linux操作系統(tǒng)圖形化界面的出現(xiàn),其使用越來越廣泛。然而,Linux環(huán)境下的游戲處于一種缺乏狀態(tài),在Linux用戶在經(jīng)歷長時間工作時,休息期間沒有很好的游戲使其得以放松,做到勞逸結合,事半功倍。在Linux環(huán)境下開發(fā)游戲(以經(jīng)典的五子棋為例)有其重要的經(jīng)濟價值和戰(zhàn)略意義,與此同時,也可以借此課題對自己所學的知識進行一次綜合的運用與拓展,加強自己的專業(yè)知識水平和綜合運用能力以及實踐動手能力1。1.2 課題國內(nèi)外發(fā)展情況計算機發(fā)明后,人們就嘗試運用其強大的計算與存
11、儲記憶能力來與棋壇高手對弈。1956年美國洛斯阿拉莫斯得研究人員首次編寫了象棋對弈戰(zhàn)勝一個剛?cè)氲?個月的棋手,但已經(jīng)具有劃時代的意義。在國內(nèi)市場,2000年之前,游戲產(chǎn)業(yè)處于一種缺乏創(chuàng)新的狀態(tài)。許許多多游戲廠商都是拿出一種模仿的姿態(tài)在做游戲。導致國外一些先進的發(fā)達的游戲公司迅速進入了中國的游戲市場并占有了很大的份額。此時國內(nèi)游戲廠商不能進行很有效的合作,在外國游戲巨頭的壓力下,內(nèi)部形成強烈的競爭,使得國產(chǎn)游戲的發(fā)展十分緩慢。近年來,隨著政府出臺了各種與游戲產(chǎn)業(yè)相關的條例、法規(guī),作為一種新文化事業(yè)來鼓勵國產(chǎn)游戲的發(fā)展。國內(nèi)游戲開發(fā)商也致力于開發(fā)自主的擁有中國文化的游戲,中國游戲玩家數(shù)量與日俱增,
12、這其中越來越多的玩家開始支持國產(chǎn)游戲,這些都表明著,國產(chǎn)游戲的寒冬已然過去,國內(nèi)娛樂游戲業(yè)的不斷成熟與壯大。在國際上,由獨立自由的軟件和開放免費的源代碼組成的例子就是Linux操作系統(tǒng)?,F(xiàn)在Linux操作系統(tǒng)可以被安裝到多種硬件設備中,從個人PC機到企業(yè)、政府的辦公設備甚至與嵌入式相關的硬件設備。Linux操作系統(tǒng)所具有的優(yōu)勢及潛能不斷被人們開發(fā)利用,在人們的生活中漸漸占據(jù)了一定地位。隨著Linux系統(tǒng)的完善與穩(wěn)定,普通電腦用戶嘗試接觸Linux系統(tǒng)的數(shù)量日益增高,部分電腦廠商發(fā)現(xiàn)商機開始在其銷售的電腦上可以為用戶免費安裝Linux,在桌面電腦操作系統(tǒng)的市場中Linux也慢慢地占據(jù)一席之地。低
13、成本、開放、免費這些都成了Linux操作系統(tǒng)的代名詞,符合嵌入式開發(fā)的理念,在嵌入式市場擁有絕對優(yōu)勢,廣泛地受到了用戶的好評。KED和GNOME等桌面系統(tǒng)使Linux完全不同于依賴CLI(Command Line Interface,命令行界面)控制的Unix操作系統(tǒng),它更像一個Mac或Windows之類的操作系統(tǒng),能提供完善的提醒用戶界面,給用戶更好的桌面體驗2。1.3 本課題設計的必要性與可行性選擇必要性:隨著經(jīng)濟的快速發(fā)展,人們生活的步調(diào)日益加快,計算機的地位在人們的生活中已越來越重要,基于各種操作系統(tǒng)的娛樂游戲也越來越多、越來越大眾化,成為人們?nèi)粘I钪忻懿豢煞值囊徊糠?。而隨著人們生活
14、品質(zhì)的提高,電腦游戲也越來越多元化,五子棋就是其中一種。這一游戲簡單易行,操作方便,娛樂性較強,吸引了不少人。該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對于一直處于高壓下的現(xiàn)代人是很好的放松工具。選題可行性:本系統(tǒng)的設計要求是一個能在Linux操作系統(tǒng)下運行,界面美觀運行穩(wěn)定且將來可能用于嵌入式移植的游戲。綜合考慮選擇C語言與GTK技術來實現(xiàn)本系統(tǒng)。C語言是一門成熟的高級語言,可用于開發(fā)各種系統(tǒng),也可用于開發(fā)游戲系統(tǒng)。GTK是Linux下的一個圖形化編程工具,其開發(fā)出來的程序能在裝有GTK環(huán)境的Linux系統(tǒng)下順利運行3。1.4 本課題設計概述在本課題中,通過對五子棋游戲發(fā)展背景的調(diào)查
15、以及Linux系統(tǒng)下小游戲開發(fā)的了解;以Linux操作系統(tǒng)為平臺,使用GTK技術實現(xiàn)五子棋游戲;通過Linux系統(tǒng)編程,GTK編程技術,五子棋游戲算法來實現(xiàn)趣味性地人機對戰(zhàn)。2 平臺簡介2.1 系統(tǒng)介紹2.1.1 Linux系統(tǒng)發(fā)展歷程Linux是一種類似Unix的操作系統(tǒng),但它具有可以自由傳播和無償使用的特點。它開放全部的源代碼以供用戶進行完善修改并且可以被移植到各種各樣的硬件平臺。Unix作為一種經(jīng)典的操作系統(tǒng),在1969年最開始由貝爾實驗室的計算機科學學者Ken Thompson和Dennis Ritchie提出并研發(fā)成功,但出于它對源代碼知識產(chǎn)權的保護,它價格十分昂貴,對一般計算機用戶
16、而言,是難以接受的。早期,Linux是由赫爾辛基大學的一位叫Linus Torvalds的芬蘭大學生獨立設計的。當時他有一臺Intel386計算機,而他手上的Minix卻不能很好地在他的計算機上運行。于是他開始修改Minix。經(jīng)過幾個月的努力,基本完成了目標。此時他發(fā)現(xiàn),他幾乎實現(xiàn)了一個新操作系統(tǒng)的原型。1991年10月,Linus把Linux(意為Linus的Unix)放到FTP服務器上供其他人自由下載。Linus允許他人免費使用Linux的源代碼,并且鼓勵大家對其進行修改和完善。這一舉動,使得盈千累萬來自不同地區(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)核、標準實用程序等基本一致,具有很多共性4。2.1.2 Ubuntu Linux操作系統(tǒng)Ubuntu Linux系統(tǒng)是眾多Linux發(fā)型品牌之一。在Linux領域中,Ubuntu只是一個后起之秀,是一個新興且潛力巨大的Linux發(fā)行品牌,用了短短幾年的時間Ubuntu就發(fā)展成為一個流行的、成熟的、以及桌面環(huán)境豐富的Linux的系統(tǒng),受到
18、了從Linux初學者到資深專家的大批Linux用戶的追捧。Ubuntu是一個古老的非洲詞匯,表示人類之間的關懷、共享、和諧。它作為一種理念,倡導個人,文化以及民族之間的融合、博愛與相互合作。2.1.3 Ubuntu Linux的特性1. 多用戶Linux系統(tǒng)具有許多系統(tǒng)都不具有的特性,它可以使許多用戶操作同一臺電腦,并且他們在使用自己的操作時不會影響到其他用戶的進程。并且用戶與用戶之間都能夠順暢地溝通與交流。但是為了防止在使用過程中,用戶不經(jīng)意或故意地篡改別的使用者的系統(tǒng)資源,所以使用不同功能的用戶具有不同的使用權限。2. 多任務支持多個任務或多個進程的執(zhí)行是時下操作系統(tǒng)所必須具備的特點。在用
19、戶操作計算機時,能夠順利執(zhí)行多種操作,運行更多軟件程序,提高工作效率。而且保證任務操作及軟件程序很好并行,互不影響。3. 多平臺作為一種源代碼開放免費的操作系統(tǒng),可以很好地移植到各種平臺。作為一種應用廣泛的操作系統(tǒng)它不僅可以在個人計算機上流暢地運行,還可以兼容在不同規(guī)模各類設備上。同時,它的運作不受CPU數(shù)量的限制,不論在32位還是64位上都有較為突出的運行狀態(tài)。4. 用戶界面為了適用不同的使用范圍,Linux提供了兩種不同的操作界面。當我們需要進行腳本功能編寫時,可以進入字符界面通過鍵盤錄入命令來使計算機運行。當我們需要便捷的操作時,也可以進入圖形界面,通過鼠標的操作來傳達指令,完成所需要的
20、用戶操作。5. 網(wǎng)絡功能因為Linux系統(tǒng)強大的內(nèi)置網(wǎng)絡功能,所以它在信息傳輸和互聯(lián)網(wǎng)功能的使用有著非同尋常的表現(xiàn)。導致越來越多的用戶選擇使用Linux系統(tǒng)。6. 安全性在時下對于計算機的使用過程中,安全性一直是被人們所重視的問題。在系統(tǒng)的運行過程中,使用了各種各樣的措施來保證用戶的隱私和重要資料,提高系統(tǒng)的穩(wěn)定性。在融合了Unix操作系統(tǒng)的優(yōu)勢后,Linux具有了更穩(wěn)定更高效地運行狀態(tài)。所以以這種系統(tǒng)搭建的服務器平臺數(shù)量與日俱增。7. 可移植性因為Linux系統(tǒng)強大的適應能力,使得它可以在各種平臺上運行。為了方便的用戶的使用,它具有了良好的可移植性。這樣就可以輕松地進行移植,比如,從一臺個人
21、計算機上移植到另一臺硬件設備上。8. 開放和免費為了面向更多的用戶和更廣闊的使用范圍,Linux系統(tǒng)開放了操作代碼,我們可以輕松的在網(wǎng)上查找到Linux的操作核心內(nèi)容,這樣可以根據(jù)自己的需求,去進行不同程序的編寫和調(diào)試。相比于其它系統(tǒng)的收費使用,無償?shù)腖inux毫無疑問可以讓我們通過更低的代價來獲取更多的內(nèi)容5-10。2.2 開發(fā)工具2.2.1 VMware workstation簡介VMware Workstation(中文名“威睿工作站”)是一款功能強大的桌面虛擬計算機軟件,提供用戶可在單一的桌面上同時運行不同的操作系統(tǒng),和進行開發(fā)、測試 、部署新的應用程序的最佳解決方案。VMware W
22、orkstation可在一部實體機器上模擬完整的網(wǎng)絡環(huán)境,以及可便于攜帶的虛擬機器,其更好的靈活性與先進的技術勝過了市面上其他的虛擬計算機軟件。對于企業(yè)的 IT開發(fā)人員和系統(tǒng)管理員而言,VMware在虛擬網(wǎng)路,實時快照,拖曳共享文件夾,支持 PXE 等方面的特點使它成為必不可少的工具。VMware Workstation作為時下一款綜合表現(xiàn)優(yōu)異的桌面虛擬計算機軟件,以供用戶選擇安裝的操作系統(tǒng)種類繁多,甚至包括每一種操作系統(tǒng)所發(fā)行的各個版本。在合理分配內(nèi)存的情況下,它還可以在一臺計算機下安裝多個虛擬化的操作系統(tǒng)。每個所安裝的虛擬的操作系統(tǒng)可以做到獨立的運行互不干擾。同時,在虛擬機運行的狀態(tài)下,可
23、以簡單快捷地回到物理機的操作系統(tǒng),兩個操作系統(tǒng)直接可以做到很好的隔離。操作界面簡單明了,支持中文,適用各種計算機領域的用戶11。2.2.2 C語言簡介C語言是最早由貝爾實驗室的Dennis Ritchie設計并實現(xiàn)。同時Dennis Ritchie也是Unix操作系統(tǒng)的主要設計者之一。C語言是目前國際上為萬千程序員廣泛使用并具有完整體系的計算機語言。在熟練掌握C語言的情況下,我們不僅可以利用它來編寫一些應用軟件,還是進行系統(tǒng)的程序開發(fā),完善系統(tǒng)更好地服務我們的生活與工作。Linux、Unix操作系統(tǒng)本身都是用C語言開發(fā)。我們每天都可以用到的Windows操作系統(tǒng)其大部分代碼也是有C語言進行開發(fā)
24、的。C語言的繪圖能力強,具備可移植性,編譯方式簡易,數(shù)據(jù)處理能力強,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫。它是一種數(shù)據(jù)類型豐富、應用靈活方便的高級語言。C語言具有以下特點:1. 兩重性C語言具有匯編語言的部分特性。它可以對計算機最基本的工作單元(位、字節(jié)、地址)進行操作;也可以對物理地址直接訪問,對硬件進行操作。具有高級語言的基本結構和語句。2. 結構化結構化語言落實到軟件的編寫,系統(tǒng)的開發(fā)上就是實現(xiàn)程序的模塊化,這也是結構化語言的一個顯著特點。即程序的各個部分除了必要信息交流外相對獨立,因此各個部分開發(fā)單獨開發(fā)和測試,這樣的編程易于他人的閱讀,自身的整改與維護,大大提高工作效率。 3.
25、 與Linux緊密結合Linux操作系統(tǒng)本身是由C語言開發(fā)的,在Linux上用C語言開發(fā)的程序運行效率很高,可以實現(xiàn)無縫結合。相比之下,在某些對性能要求很高的領域,C語言是首選。4. 可移植性C語言編寫的程序基本可以不用做任何修改,就可以在不同硬件平臺或操作系統(tǒng)上運行12-16。2.2.3 GTK簡介GTK(GIMP Toolkit)是一套跨多種平臺的圖形工具包,按LGPL許可協(xié)議發(fā)布的。雖然最初是為GIMP寫的,但目前已發(fā)展為一個功能強大、設計靈活的一個通用圖形庫。特別是被GNOME選中使得GTK+廣為流傳,成為Linux下開發(fā)圖形界面的應用程序的主流開發(fā)工具之一。當然,GTK+并不要求必須
26、在Linux上,事實上,目前GTK+已經(jīng)有了成功的windows版本。GTK雖然是用C語言寫的,但是同樣可以使用你所熟悉的語言來使用GTK,因為GTK+已經(jīng)被綁定到幾乎所有流行的語言上,如:C+,PHP, Guile, Perl,Python,TOM, Ada95,Objective C, Free Pascal,and Eiffel。2.2.4 Linux編譯工具GCC簡介GCC是一個用于Linux系統(tǒng)下編程的編譯器。GCC=GNU Compiler Collection,是由Stallman所開發(fā)的Linux下的編譯器,可以編譯的語言包括:C,C+,Objective-C, Fortran
27、,Java,Ada等。不過,現(xiàn)在GCC也有了許多Win32下的移植版本。如今的GCC借助于它的特性,具有了交叉編譯器的功能,即在一個平臺下編譯另一個平臺的代碼。本課題選用Ubuntu Linux操作系統(tǒng),Ubuntu的桌面環(huán)境是gnome,gnome是使用GTK+編寫,所以選用GTK來進行環(huán)境的搭建。運行環(huán)境不需要另外配置,即可直接安裝開發(fā)所需要的環(huán)境。同時,Ubuntu Linux操作系統(tǒng)是已經(jīng)默然安裝GCC17。3 開發(fā)環(huán)境的建立3.1 Ubuntu Linux的安裝Ubuntu Linux系統(tǒng)既可以獨立安裝,也可以與Microsoft Windows系統(tǒng)安裝在同一臺計算機中把Ubuntu
28、 Linux安裝到Windows系統(tǒng)未占用的磁盤分區(qū)中。需要注意,在選擇安裝Linux與Windows雙系統(tǒng)時,我們首先要在計算機上安裝Windows操作系統(tǒng)并測試運行,再進行Linux系統(tǒng)的安裝,否則會導致所安裝的Ubuntu Linux操作系統(tǒng)無法正常啟動使用??紤]到實用性而言,本課題設計以虛擬機的形式安裝Ubuntu Linux操作系統(tǒng)。安裝前的準備如下: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像素引導設備CD/DVD驅(qū)動,USB移動盤或其他安裝方式2. 磁盤分區(qū)安裝Ubuntu Linux系統(tǒng)時,至少需要兩個磁盤分區(qū),分別用于創(chuàng)建“/”文件系統(tǒng)與交換分區(qū)。如果是一個多用戶系統(tǒng),且系統(tǒng)配有足夠的磁盤存儲空間,最好劃分多個磁盤分區(qū),每一個磁盤分區(qū)創(chuàng)建單獨的文件系統(tǒng),如/usr、/var和/home等文件系統(tǒng)。表3.2 磁盤分區(qū)的要求文件系統(tǒng)最小容量要求建議容量分配/250MB2GB/usr1.5GB2GB以上/tmp50MB1GB且小
30、于單獨的文件系統(tǒng)分區(qū)/var500MB2GB以上/home2GB取決于用戶數(shù)量與數(shù)據(jù)空間的要求/boot100MB100MB3. 安裝方式Ubuntu Linux系統(tǒng)的安裝方式尤其靈活,可以采用不同方法的進行引導安裝。本課題以虛擬機的形式進行安裝,首先安裝VMware Workstation(中文名“威睿工作站”),在網(wǎng)易開源鏡像站下載ubuntu-12.04.5-desktop-amd64的ISO映像文件。在VMware的基礎上,通過ISO映像文件,安裝Linux系統(tǒng)。運行成功截圖如下: 圖3.1 Ubuntu Linux系統(tǒng)運行界面3.2 GTK環(huán)境的搭建在Linux系統(tǒng)下的文本編輯器操作
31、方便,對于習慣使用Windows系統(tǒng)的用戶來說,是一個不錯的選擇。與在Windows系統(tǒng)的操作大致相同,右鍵選項新建一個文本即可。對于編譯器GCC(GNU Compiler Collection)的選擇,除了其功能強大、簡單靈活的特點之外,還因為它能支持各種不同的硬件平臺。具有了交叉編譯的功能,即在一個平臺下編譯另一個平臺的代碼,這樣為后期代碼的編譯與調(diào)試提供的便利。可以編譯多種語言,包括:C,C+,Objective-C,F(xiàn)ortran,Java,Ada等。由于桌面環(huán)境gnome,運行環(huán)境不需要另外配置,要做的是安裝即可18。在終端下輸入這些命令進行完善(有網(wǎng)絡可用狀態(tài)): 1. 安裝gcc
32、/g+/gdb/make等基本編程工具。$sudo apt-get install build-essential2. 安裝 libgtk2.0-dev libglib2.0-dev等開發(fā)相關的庫文件。$sudo apt-get install gnome-core-devel3. 用于在編譯GTK程序時自動找出頭文件及庫文件位置。$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*最后,用測試程序進行編譯運行。圖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無誤,運行結果如下:圖3.3 測試程序運行4 程序設計與算法實現(xiàn)4.1 數(shù)據(jù)定義1. 用一個二維數(shù)組,表示棋子,首先初始化均為空的。 int i, j; for(i=0; i<NUM;i+) for(j=0; j<NUM;j+) arrayij = EMPTY;2. 程序涉及到的相關變量定義如下: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 *); /預測雙行連子int forcast(int, int, int *, int *); 4.2 數(shù)據(jù)結構1. 這個是一個回調(diào)函數(shù),等于是用戶每放下一個棋子的時候,就會開始執(zhí)行。gint area_redraw(GtkWidget *widget, GdkEventExpose *event, gpointer data)2. 獲取當前用戶放棋子的坐標。gdk_window_get_pointer
39、(widget->window, &x1, &y1, &state);3. 對游戲結果的判定。if(winflag=0) rtn = play(CURTOROW(x1), CURTOROW(y1), &x2, &y2);/如果當前沒有誰輸贏的話,就通過play函數(shù),計算出電腦當前應該是放什么位置/其中x2,y2就是電腦的坐標,x1,y1就是用戶的坐標。這個返回值rtn表示比賽結果,有五種情況 ,小于0表示平局。/等于0,表示當前沒有是沒有輸贏,屬于正常情況,還可以繼續(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. 初始化界面,對背景、線條、棋子進行顏色選擇及填充。GDK(CIMP繪圖包)是簡單化編程人員使用X函數(shù)的函數(shù)庫。X庫是低層函數(shù),由許多只做專門和相對簡單任務的函數(shù)組成。GDK創(chuàng)建保存窗口配置信息的數(shù)據(jù)結構,并提供使用這些數(shù)據(jù)結構的函數(shù)。例如,色彩保存在一個GdkColor結構中,函數(shù)可以使用該結構在色彩圖中自動分配顏色或定義顏色進行分配。如果在色彩圖中沒有可以選擇的顏色,GDK會尋找一個與
42、之相近的顏色進行填充。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ū)υ捊缑妫O定棋盤大小,標題。GTK+就是GIMP工具包,它把GDK提供的函數(shù)組織成對象。大部分對象是可顯示對象,例如按鈕、標題、文本、輸入輸出窗口,其中一類對象稱作小部件(widget)。帶有標準接口,提供顏色、尺寸、位置、鼠標、鍵盤、字體等必須的項目。函數(shù)gtk_window_new執(zhí)行游戲界面創(chuàng)建的命令,在由函數(shù)gtk_widget_set_usize對所創(chuàng)界的界面進行尺寸的設
46、置。最后再調(diào)用gtk_drawing_area_new()對所建立的窗口進行區(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), "五子棋"); /對建立窗口進行命名 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)的落子位置。并且為每一次的可能落子位置計算其重要程度(用后面所說的分值來替代)。遍歷棋盤未落棋子位置,比較玩家落子的最大分值的點和機器落子的最大分值的點,來找出最佳的落子位置,最重要的落子點。在對戰(zhàn)進行的過程中,如果機器落子的最大分值比玩家落子的最大分值要小,呈現(xiàn)劣勢對局,機器會優(yōu)先把棋子落入玩家的最大分值點的位置上(玩家最有可能獲勝的位置),稱其為防守;反而言之,如果機器落子的最大分值比玩家要大,呈現(xiàn)優(yōu)勢對局,機器就會將棋子置入自己最有可能獲勝的
49、位置上,稱其為進攻。通過調(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;用戶放了一個棋子之后,先判斷電腦有沒有4個連續(xù)單行棋子,有的話就直接放入湊到5個,則電腦獲得勝利;如果等于0,即電腦沒有連續(xù)4個的單行棋子,再判斷用戶有沒有連續(xù)4個的,有的話,進行防守。如果等于0,則繼續(xù)判斷電腦有沒有連續(xù)3個的單行棋子,湊成4個連續(xù)單行棋子,如果沒有,則繼續(xù)判斷用戶有沒有連續(xù)3個的單行棋子,進行防守用戶。反之,如果用戶
51、也沒有,判斷電腦有沒有雙行湊成3個的棋子,如下雙行湊成三連棋子的情況: 圖4.1 雙行三連子展示如果電腦有,則放入。如果等于0,沒有的話,判斷用戶有沒有這樣的情況,進行防守用戶。如果用戶也沒有。接下來可以不用防守用戶,電腦再繼續(xù)下棋,先看是否有雙行2棋子,如果沒有。就看電腦是否有連續(xù)兩個單行棋子。如果電腦沒有就在用戶的周圍放下一個位置,即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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自考行政管理職業(yè)道德考量試題及答案
- 2025年主管護師護患關系試題及答案
- 行政管理??苾?yōu)化策略試題及答案總結
- 衛(wèi)生資格考試策略分享試題及答案
- 人文精神與行政管理試題及答案
- 深入理解護師知識的試題及答案
- 2025年執(zhí)業(yè)醫(yī)師考試主題復習試題及答案
- 執(zhí)業(yè)藥師的溝通能力培養(yǎng)試題及答案
- 自考行政管理??骑L險管理策略試題答案
- 2025主管護師考試規(guī)律總結試題及答案
- 介紹錢三強的
- 動車乘務員和動車餐吧乘務員培訓內(nèi)容
- 危險性較大的分部分項工程一覽表(建辦質(zhì)〔2018〕31號)
- 高中政治課時作業(yè)(必修第四冊)第二課 周練過關(二)
- 腦缺血再灌注損傷與腦復蘇課件
- 汽車主動安全與被動安全系統(tǒng)培訓課件
- 畜牧微生物學課件
- 個人租車簡易協(xié)議書電子版
- 加油站安全管理制度匯編
- 金工實習報告 金工實習(9篇)
- 丘市天資報廢汽車回收拆解無害化處理項目環(huán)境影響報告
評論
0/150
提交評論