版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 程序使用面向?qū)ο蟮腝T庫的C++語言,開發(fā)于可以同時運行于Linux和Windows環(huán)境下的游戲程序。有雙人對弈,人機(jī)對弈,無限悔棋等功能,其中人機(jī)對弈包含難度選擇和先后手選擇。</p><p> 論文首先指出了黑白棋游戲、Linux桌面環(huán)境、QT開發(fā)環(huán)境的發(fā)展現(xiàn)狀,然后重點介紹了QT開發(fā)工具的使
2、用、黑白棋的常見戰(zhàn)術(shù)、黑白棋程序的界面設(shè)計、規(guī)則設(shè)計、算法設(shè)計(包含搜索算法、局面估值、α-β減枝、散列表、MTD等當(dāng)今主流算法)、終局搜索、以及作為一款游戲的其他必須功能,最后介紹了Linux桌面環(huán)境 GUI的發(fā)展趨勢。</p><p> 設(shè)計通過一個棋類游戲的開發(fā),闡述了棋類游戲的開發(fā)過程,包括軟件開發(fā)的邏輯分析,程序設(shè)計,軟件實現(xiàn)和軟件測試幾個步驟。</p><p> 關(guān)鍵詞:黑
3、白棋;Linux;人工智能;QT</p><p><b> ABSTRACT</b></p><p> This programmer used QT Object-Oriented Database C++ language, develops the game which can be run on Linux and Windows environments
4、. has doubles plays , man-machine plays, retract a false move in a chess game boundlessly waiting for a function. Single mode contains degree of difficulty choosing and choosing successively personally.</p><p&
5、gt; The thesis has pointed out first the Othello, the Linux desktop environment, the development status of QT develop. Then, focuses on the use of QT development tools, Othello common tactical, Othello program interface
6、 design, design of rules, algorithm design (including search algorithms, the valuation of the situation, α-β by sticks, Hash table, MTD algorithm, such as today's mainstream), final search, and as well as other games
7、’ functions. Finally, introduce the GUI desktop environment for Linux</p><p> This design through the development of a chess game, described the development of chess games, including logic analyzer of softw
8、are development, programming, software achieve and Software Testing, and so on.</p><p> Key Words :black & white chess; Linux; </p><p><b> 目 錄</b></p><p><b&
9、gt; 緒 論1</b></p><p> 第1章 程序開發(fā)技術(shù)介紹4</p><p> 1.1 黑白棋戰(zhàn)略4</p><p> 1.1.1黑白棋規(guī)則4</p><p> 1.1.2黑白棋戰(zhàn)術(shù)分析4</p><p> 1.2相關(guān)實現(xiàn)環(huán)境8</p><p>
10、1.2.1 開發(fā)環(huán)境8</p><p> 1.2.2 運行環(huán)境8</p><p> 1.2.3 硬件環(huán)境9</p><p> 1.3 主要研究內(nèi)容9</p><p> 1.4系統(tǒng)開發(fā)的現(xiàn)實意義9</p><p> 第2章 開發(fā)工具QT10</p><p> 2.1 QT簡
11、介10</p><p> 2.2 QT的使用10</p><p> 2.3 信號與槽12</p><p> 第3章 黑白棋需求分析14</p><p> 3.1 黑白棋程序界面的需求14</p><p> 3.1.1 調(diào)查對比同類軟件14</p><p> 3.1.2 確
12、定需求16</p><p> 3.2 黑白棋游戲規(guī)則的需求16</p><p> 3.3 黑白棋程序的其它需求17</p><p> 第4章 黑白棋程序設(shè)計18</p><p> 4.1 程序流程圖18</p><p> 4.2 主要模塊簡介18</p><p> 4.2
13、.1繪圖模塊18</p><p> 4.2.2初始化模塊19</p><p> 4.2.3雙人模塊19</p><p> 4.2.4單人模塊19</p><p> 4.2.5規(guī)則模塊19</p><p> 4.2.6悔棋和悔棋恢復(fù)模塊19</p><p> 4.2.7算法
14、模塊19</p><p> 第5章 程序?qū)崿F(xiàn)20</p><p> 5.1 界面實現(xiàn)20</p><p> 5.2 功能按鈕的實現(xiàn)21</p><p> 5.3 程序主要函數(shù)23</p><p> 5.4 電腦戰(zhàn)術(shù)分析25</p><p> 5.4.1 棋盤掃描25&l
15、t;/p><p> 5.4.2判斷行動力25</p><p> 5.4.3 四角優(yōu)先戰(zhàn)術(shù)26</p><p> 5.4.4 選擇最佳位置落子27</p><p> 第6章 系統(tǒng)測試28</p><p> 6.1雙人模式下的測試28</p><p> 6.1.1 悔棋和悔棋恢復(fù)測
16、試28</p><p> 6.1.2 PASS情況下的悔棋恢復(fù)29</p><p> 6.1.3 游戲規(guī)則測試31</p><p> 6.1.4 終局測試31</p><p> 6.2 單人模式下的測試31</p><p> 6.2.1 PASS情況的測試31</p><p&g
17、t; 6.2.2 游戲正常測試31</p><p> 6.2.3 悔棋測試32</p><p> 第7章 總結(jié)和展望33</p><p><b> 7.1 總結(jié)33</b></p><p><b> 7.2展望33</b></p><p> 7.2.1
18、人工智能展望33</p><p> 7.2.2 Linux GUI展望34</p><p><b> 致 謝35</b></p><p><b> 參考文獻(xiàn)36</b></p><p><b> 緒 論</b></p><p><b
19、> 黑白棋開發(fā)背景</b></p><p> 隨著網(wǎng)絡(luò)技術(shù)的日新月異和計算機(jī)的普及,當(dāng)今的計算機(jī)技術(shù)也走上了平民化和娛樂化的時代,計算機(jī)技術(shù)再也不是只能由少數(shù)人掌握的深不可測的學(xué)問;同時個人計算機(jī)也由原來單純的數(shù)值計算和工業(yè)應(yīng)用逐漸轉(zhuǎn)變成像電視機(jī)一樣的家庭娛樂中心,伴隨著這種巨大的轉(zhuǎn)變計算機(jī)軟件的發(fā)展也走向了娛樂化。</p><p> 尤其是游戲產(chǎn)業(yè)的發(fā)展已經(jīng)成為信
20、息產(chǎn)業(yè)中發(fā)展勢頭最猛烈最具前景的一個分支,而游戲廳也漸漸被網(wǎng)吧擠出了正常的營業(yè)市場,游戲除了單純的個人娛樂功能之外,也逐漸向互動的方向發(fā)展。游戲的功能不斷按照玩家的需求和愛好擴(kuò)展延伸進(jìn)化,如今運行在各種平臺上不同名稱,不同內(nèi)容,不同形式的游戲不僅僅為廣大游戲愛好者提供了豐富的選擇,而且為游戲開發(fā)商帶來了豐厚的回報,游戲產(chǎn)業(yè)吸引著許多程序員去開發(fā)更多更新的游戲。</p><p> 基于游戲發(fā)展的歷史和前景,我決定
21、用C++語言開發(fā)一款小游戲,游戲內(nèi)容來自網(wǎng)絡(luò)上日漸流行的一種智力游戲。我希望把平時界面簡單、選項復(fù)雜的游戲,在Linux里面做成漂亮的、簡單的游戲程序,以給Linux玩家一個新的選擇。</p><p> 人工智能是一門極富挑戰(zhàn)性的科學(xué),包括十分廣泛的科學(xué),它由不同的領(lǐng)域組成,如機(jī)器學(xué)習(xí),計算機(jī)視覺等等,總的說來,人工智能研究的一個主要目標(biāo)是使機(jī)器能夠勝任一些通常需要人類智能才能完成的復(fù)雜工作。但不同的時代、不同
22、的人對這種“復(fù)雜工作”的理解是不同的。例如繁重的科學(xué)和工程計算本來是要人腦來承擔(dān)的, 現(xiàn)在計算機(jī)不但能完成這種計算, 而且能夠比人腦做得更快、更準(zhǔn)確, 因而當(dāng)代人已不再把這種計算看作是“需要人類智能才能完成的復(fù)雜任務(wù)”, 可見復(fù)雜工作的定義是隨著時代的發(fā)展和技術(shù)的進(jìn)步而變化的, 人工智能這門科學(xué)的具體目標(biāo)也自然隨著時代的變化而發(fā)展。它一方面不斷獲得新的進(jìn)展, 一方面又轉(zhuǎn)向更有意義、更加困難的目標(biāo)。目前能夠用來研究人工智能的主要物質(zhì)手段以
23、及能夠?qū)崿F(xiàn)人工智能技術(shù)的機(jī)器就是計算機(jī), 人工智能的發(fā)展歷史是和計算機(jī)科學(xué)與技術(shù)的發(fā)展史聯(lián)系在一起的。除了計算機(jī)科學(xué)以外, 人工智能還涉及信息論、控制論、自動化、仿生學(xué)、生物學(xué)、心理學(xué)、數(shù)理邏輯、語言學(xué)、醫(yī)學(xué)和哲學(xué)等多門學(xué)科。</p><p> 隨著計算機(jī)處理速度的飛速提高,人們很早就提出了疑問:計算機(jī)是否會超越人類?世界國際象棋棋王卡斯帕羅夫與美國IBM公司的RS/6000(深藍(lán))計算機(jī)系統(tǒng)于1997年5月1
24、1日進(jìn)行了六局“人機(jī)大戰(zhàn)”,結(jié)果“深藍(lán)”以3.5比2.5的總比分獲勝。比賽結(jié)束了給人們留下了深刻的思考;下棋要獲勝要求選手要有很強(qiáng)的思維能力、記憶能力、豐富的下棋經(jīng)驗,還得及時做出反應(yīng),迅速進(jìn)行有效的處理,否則一著出錯滿盤皆輸,這顯然是個“智能”問題。盡管開發(fā)“深藍(lán)”。</p><p> 計算機(jī)的IBM專家也認(rèn)為它離智能計算機(jī)還相差甚遠(yuǎn),但它以高速的并行的計算能力(2r108步/秒棋的計算速度)。實現(xiàn)了人類智力
25、的計算機(jī)上的部分模擬。那么計算機(jī)已經(jīng)超過了人類嗎?看完本文,相信你會對計算機(jī)棋手的智能有所了解。</p><p><b> 課題研究目的和意義</b></p><p> 黑白棋,又叫反棋(Reversi)、奧賽羅棋(Othello),蘋果棋,翻轉(zhuǎn)棋。黑白棋起源中世紀(jì)的英國,18世紀(jì)傳入日本,并在日本得到了發(fā)展。現(xiàn)在,黑白棋在西方和日本很流行。游戲通過相互翻轉(zhuǎn)對方的
26、棋子,最后以棋盤上誰的棋子多來判斷勝負(fù)。</p><p> 它的游戲規(guī)則簡單,因此上手很容易,但是它的變化又非常復(fù)雜。有一種說法是:只需要幾分鐘學(xué)會它,卻需要一生的時間去精通它。</p><p> 黑白棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。黑白棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,
27、又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。</p><p> 中國最早出現(xiàn)黑白棋是在80年代的任天堂游戲機(jī)和蘋果II個人電腦游戲里,但從那時一直玩到現(xiàn)在的人已經(jīng)寥寥可數(shù)了,我們只能說,從那時起,中國第一次出現(xiàn)了黑白棋;然后就是1990年的Windows 3.0的推出,當(dāng)時Windows自帶的游戲
28、就是黑白棋,由于當(dāng)時電腦還比較少,沒等到黑白棋傳開,Windows 3.1推出,把自帶游戲換成現(xiàn)在大家見到的踩地雷和接龍;讓大量人認(rèn)識黑白棋的是文曲星,文曲星的黑白棋棋力很低,一個人下了幾盤以后就可以輕易把它打敗,棋力之低簡直可以說是誤人子弟的地步,讓人一葉障目,不見森林,以為黑白棋不過爾爾;在90年代中期流行的任天堂Gameboy當(dāng)中也有一款黑白棋游戲,棋力甚為不錯,比起以上提及的游戲強(qiáng)很多。黑白棋真正發(fā)展起來還是在互聯(lián)網(wǎng)普及以后(下
29、述:網(wǎng)上黑白棋的興起),黑白棋作為一種經(jīng)典的策略性游戲,受到了廣大網(wǎng)友,特別是得到了希望鍛煉智力的網(wǎng)友的喜愛。</p><p> 在90年代中期互聯(lián)網(wǎng)開始普及,亦冒起了一些大型游戲網(wǎng)站。最先出現(xiàn)的是微軟的Microsoft Games網(wǎng)站,被吸引進(jìn)去下黑白棋的都是各國的好手,因為是外國網(wǎng)站,當(dāng)時下棋的華人還是比較少。及后紛紛出現(xiàn)其他網(wǎng)站,具代表性的有: 多國棋手網(wǎng)站:Playsite、VOG、Yahoo! Ga
30、mes、新浪網(wǎng)、Kurnik(現(xiàn)為PlayOK) 以香港棋手為主:Cybercity 以臺灣棋手為主:宏碁戲谷、CYC游戲大聯(lián)盟 以大陸棋手為主:Chinaren、聯(lián)眾世界、中國游戲中心、邊峰網(wǎng)絡(luò)游戲 純學(xué)術(shù)性網(wǎng)站。</p><p> 值得一提的是微軟的Windows XP里自帶了網(wǎng)絡(luò)黑白棋,由于XP的普及讓很多電腦初學(xué)者第一次嘗試真人對戰(zhàn)?,F(xiàn)今在搜尋引擎能找到的下棋網(wǎng)站已多不勝數(shù)! </p>&
31、lt;p> 原先黑白棋在國內(nèi)集中在3個游戲?qū)?zhàn)平臺——中游、聯(lián)眾和邊鋒。黑白棋的發(fā)展實際上是伴隨著中國網(wǎng)絡(luò)的發(fā)展。三大平臺鼎盛時期也是中國黑白棋的鼎盛時期。期間高手輩出,新人不斷?,F(xiàn)在國內(nèi)最強(qiáng)的一批高手都是那個時期成長起來的。 </p><p> 由于網(wǎng)絡(luò)下棋可以通過一些手段作弊,導(dǎo)致人類黑白棋玩家積極性下降。大事件后,不少黑白棋玩家的積極性大大受挫。加之各個平臺對于程序沒有很好的控制。導(dǎo)致高手流向國外
32、較好的平臺下棋。國內(nèi)三大平臺漸漸衰落。 </p><p> 最近,qq游戲推出了黑白棋游戲?;趒q用戶的基數(shù)龐大,在線下黑白棋的玩家數(shù)量達(dá)到了前所未有的地步。原先消失的高手們也紛紛出現(xiàn)。中國黑白棋出現(xiàn)了欣欣向榮的景象。 </p><p> 但值得注意的是,qq黑白棋對于外掛和程序也沒有較好的控制。平臺上的玩家水平較低。不少玩家對于黑白棋尚未真正了解。希望qq游戲可以借鑒前人,完善自我
33、。中國黑白棋也可以有更好的發(fā)展。 </p><p> 第1章 程序開發(fā)技術(shù)介紹</p><p><b> 1.1 黑白棋戰(zhàn)略</b></p><p> 1.1.1黑白棋規(guī)則</p><p> ?。?)兩人對弈,以輪流方式持黑子與白子。</p><p> (2)開辟新局者持白子,加入者持黑子
34、, 之后以輪流方式將棋子置于棋盤格子中。若無地方可下子,則跳過一回,由對方下子。</p><p> (3)在提示的格子中,選擇一個格子下子, 當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子變?yōu)榕c我方一樣顏色。</p><p> ?。?)當(dāng)下滿64個棋子,棋子多者為勝。</p><p> 1.1.2黑白棋戰(zhàn)術(shù)分析</p><p&g
35、t; 黑白棋規(guī)則規(guī)定對局結(jié)束時子多的一方為勝方,于是初學(xué)者通常會一開始使勁吃子,這實際上是犯了短視的錯誤。每一步都盡可能吃更多的子,我們把這種下法叫做大食策略(MAXIMUM DISC STRATEGY)。除了大食策略以外,還有其它幾種常用的策略以及重要位置和術(shù)語,它們是:</p><p> (1) 爬邊(CREEPING ALONG EDGES) </p>
36、;<p> 余裕手戰(zhàn)術(shù)運用到極致就是爬邊戰(zhàn)術(shù),下棋的一方?jīng)Q定放棄對中間的控制,而多在邊上下子,出現(xiàn)的情況經(jīng)常和圖1-1類似。 </p><p> 圖1-1爬邊戰(zhàn)術(shù)圖一</p><p> 爬邊戰(zhàn)術(shù)的使用者通常占一條邊或兩條相鄰邊,而把中間和前線留給對手。</p><p> 圖1-2爬邊戰(zhàn)術(shù)圖二</p><p>
37、 爬邊戰(zhàn)術(shù)成功時,對方由于不能吃你邊上的子,而會發(fā)現(xiàn)無子可下。在圖26中,黑h7,白c7必然,黑c8,白棋就不得不下g7讓角了(見圖1-2)。 </p><p> 一般來說,爬邊戰(zhàn)術(shù)能快速消耗對方行動力,但它同時會引起不平衡邊、弱勢邊、影響將來吃子等諸多問題。該戰(zhàn)術(shù)一旦失敗就不可挽回,所以爬邊戰(zhàn)術(shù)是一種不成功便成仁的戰(zhàn)術(shù)。 </p><p> ?。?)奇偶性(P
38、ARITY) </p><p> 奇偶性是行動力理論中不可或缺的一部分,如果在對局過程中,雙方都沒有pass,則當(dāng)黑方下棋時,棋盤上的空格數(shù)目總是偶數(shù),當(dāng)白方下棋時,空格數(shù)總是奇數(shù),白方總是下到最后的一顆子,最后一步的白子和所吃的子都不會再被對方吃掉,所以后下的一方占一些便宜??匆幌聢D1-3的例子,如果黑先,黑g8白h8,勝如果白先,則無論白先下g8還是h8,黑棋都將獲勝!</p>&
39、lt;p> 圖1-3奇偶性戰(zhàn)術(shù)圖一</p><p> 圖1-4奇偶性戰(zhàn)術(shù)圖二</p><p> 如果在好幾個區(qū)域(每個區(qū)域里的空格都是偶數(shù))白棋都后下時,這種優(yōu)勢將十分明顯??磮D30的例子,有4個空兩格的區(qū)域,每個區(qū)域黑棋都是先下,白棋后下,那么正常次序就是g2-h1-g7-h8-b7-a8-b1-a1,白40-24勝。 </p><p>
40、 由于奇偶性原理,白棋在后盤戰(zhàn)斗中有先天優(yōu)勢,但黑棋有辦法把這種奇偶性優(yōu)勢轉(zhuǎn)換成自己的優(yōu)勢:如果在對局過程中,有一方pass,奇偶性情況就發(fā)生一次轉(zhuǎn)換,pass兩次,奇偶性又回到有利于白棋的狀態(tài),所以黑要想辦法讓對局過程發(fā)生奇數(shù)次pass。 </p><p> ?。?)四通陷阱(STONER TRAPS) </p><p> 對非平衡邊的攻擊,并不總是引起換角,
41、被攻擊方有選擇的權(quán)利。下面我們看一個強(qiáng)制轉(zhuǎn)換的例子,這個例子和非平衡邊一樣,一方先發(fā)起攻擊,但是跟非平衡邊不一樣的時,被攻擊方除了讓對方進(jìn)角外,別無它法。 </p><p> 四通陷阱的形成分兩個步驟,首先,攻擊方下X-格后獲得對角線的控制,然后攻擊不平衡邊,準(zhǔn)備進(jìn)角。這時,被攻擊方一旦吃回,就會同時吃掉前面一步所下的X格,圖36給出了一個例子。 </p><p> 圖1-
42、5四通陷阱戰(zhàn)術(shù)圖一</p><p> 這里,黑棋南邊有弱點,白下b7取得e4-b7對角線的控制(見圖1-5),黑棋不能馬上進(jìn)a8角,黑棋會盡量搶占對角線上點以進(jìn)角,應(yīng)f3為正常次序。但在這時,白下d8(見圖38),黑棋已經(jīng)沒有辦法來阻止白棋下h8進(jìn)角了。</p><p> 圖1-6四通陷阱戰(zhàn)術(shù)圖二</p><p> 如果黑應(yīng)b8,那么黑棋會吃掉b7,從而把a(bǔ)8
43、和h8拱手相讓。如果黑下a8,白棋可以馬上下h8,或者在b8楔入而保留以后下h8的權(quán)利。如果黑方不應(yīng),白棋仍然可以下h8進(jìn)角(這就是四通陷阱和一般非平衡邊的不同之處)。 </p><p> 圖1-7四通陷阱戰(zhàn)術(shù)圖三</p><p> 通過上述黑白棋戰(zhàn)術(shù)的簡單描述,希望能對您理解黑白棋的復(fù)雜性有所幫助。黑白棋的規(guī)則雖然很簡單,但它的變化卻非常復(fù)雜,不愧是經(jīng)典的益智游戲。這里小
44、小的篇幅不能無法涵蓋黑白棋在法國和世界上幾十年的發(fā)展,我們只是希望通過這個入門教材,能幫你更好地享受黑白棋的樂趣。如果你希望得到更多的內(nèi)容,歡迎訪問法國黑白棋協(xié)會,這里有論壇、有關(guān)書籍、俱樂部、比賽。</p><p><b> 1.2相關(guān)實現(xiàn)環(huán)境</b></p><p> 本程序采用QT庫及其開發(fā)環(huán)境,使用C++語言開發(fā)運行于Linux系統(tǒng)KDE桌面環(huán)境下的黑白棋
45、游戲。</p><p> 經(jīng)過實際檢測,QT強(qiáng)大的跨平臺性,已經(jīng)保證了同樣的代碼在Windows XP下、Linux GNOME下、Linux KDE下,幾乎不用修改就能正常運行。</p><p> 1.2.1 開發(fā)環(huán)境</p><p> qt-sdk-linux-x86-opensource-2009.01</p><p><b
46、> MinGW編譯器</b></p><p> 1.2.2 運行環(huán)境</p><p> (1)Linux環(huán)境</p><p> ?。?)Fedora 10 ? Linux with KDE</p><p> ?。?)Fedora 10 ? Linux with Gnome</p><p> ?。?/p>
47、4)Windows環(huán)境</p><p> ?。?)Microsoft® Windows XP sp2</p><p> 1.2.3 硬件環(huán)境</p><p> AMD® Sempron® 2600+,1024M內(nèi)存,160G硬盤。</p><p> 1.3 主要研究內(nèi)容</p><p&g
48、t; 本文將對計算機(jī)棋手下黑白棋做一個全面綜述,介紹計算機(jī)對黑白棋戰(zhàn)術(shù)分析的全過程,包括對圖形和動畫的處理、對棋盤搜索的算法、對棋局做出正確的估計、并生成最佳走法,并將介紹其中各個流程的研究狀況及實用技術(shù)。本文的重點放在計算機(jī)對當(dāng)前棋局的分析,并做出最佳的選擇。</p><p> 介紹搜索算法,棋類游戲不可能一步就決出勝負(fù),象棋中不可能第一步就將對方將死;而對某個棋局的判斷也不可能完全精確,在黑白棋中,初局時
49、棋子多并不一定最終取得勝利,因為對手可能在后面的博弈過程中將局面扭轉(zhuǎn)。想想人類下棋時,一般會假設(shè)我走這步,那么對手會怎樣回應(yīng),如果對手回應(yīng)了某一步,我再走哪一步,如果對手回應(yīng)了另外某一步,我又該怎么走;然后再假設(shè)我走另外的某一步,如此反復(fù)下去。這個過程叫做搜索。</p><p> 1.4系統(tǒng)開發(fā)的現(xiàn)實意義</p><p> 利用這次畢業(yè)設(shè)計的機(jī)會可以熟悉c++語言的各種特性,鍛煉程序設(shè)
50、計的實踐能力,熟悉c++語言Linux下的開發(fā)環(huán)境,熟悉前沿的Linux圖形用戶界面的開發(fā),以及鞏固數(shù)據(jù)結(jié)構(gòu)和算法等課程的學(xué)習(xí)成果,并深入理解數(shù)據(jù)結(jié)構(gòu)和算法在程序設(shè)計中的核心地位。</p><p> 同時,借助開發(fā)本游戲的過程,可以熟悉人工智能的程序?qū)崿F(xiàn),有助于掌握棋類所需人工智能的常見算法,隨著游戲產(chǎn)業(yè)的日益壯大,人工智能在游戲中的突出表現(xiàn),人工智能越來越得到世人的重視。在這次的人機(jī)對戰(zhàn)算法中,通過一定的算法
51、,實現(xiàn)電腦的下棋及走棋運作,加深了對人工智能工作原理的了解。 </p><p> 綜上所述,通過每次黑白棋的開發(fā),可以深入了解Linux編程方法、加深了解AI算法。</p><p> 第2章 開發(fā)工具QT</p><p><b> 2.1 QT簡介</b></p><p> Qt是一個跨平臺的C++圖形用戶界面庫
52、,由挪威TrollTech公司出品,目前包括Qt,基于Framebuffer的Qt Embedded,快速開發(fā)工具Qt Designer,國際化工具 Qt Linguist等部分Qt支持所有Unix系統(tǒng),當(dāng)然也包括 Linux,還支持 WinNT/Win2k,Win95/98 平臺。</p><p> Qt是一個多平臺的C++圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的所用功能
53、。Qt是完全面向?qū)ο蟮暮苋菀讛U(kuò)展,并且允許真正地組件編程。</p><p> 自從1996年早些時候,Qt進(jìn)入商業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt也是流行的Linux桌面環(huán)境KDE 的基礎(chǔ),KDE是所有主要的Linux發(fā)行版的一個標(biāo)準(zhǔn)組件。</p><p> 基本上,Qt同X Window上的Motif、Openwin、GTK等圖形界面庫和Windows 平
54、臺上的MFC、OWL、VCL、ATL是同類型的東西,但是Qt具有下列優(yōu)點:</p><p> (1)優(yōu)良的跨平臺特性:</p><p> Qt支持下列操作系統(tǒng): Microsoft Windows 95/98、 Microsoft Windows NT、 linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD,
55、 BSD/OS、SCO、AIX、OS390、QNX 等等。</p><p><b> (2)面向?qū)ο螅?lt;/b></p><p> Qt 的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signals/slots的安全類型來替代 callback,這使得各個元件之間的協(xié)同工作變得十分簡單。</p>
56、<p> ?。?)豐富的API:</p><p> Qt 包括多達(dá)250個以上的C++類,還提供基于模板的collections、 serialization、file、I/O device、Directory management、date/time 類。甚至還包括正則表達(dá)式的處理功能。</p><p> ?。?)支持2D/3D圖形渲染,支持OpenGL。</p>
57、;<p><b> 2.2 QT的使用</b></p><p> 本文以一個最常用的例子HelloWorld的開發(fā)過程,作為QT編程的入門。</p><p><b> 需要的代碼如下:</b></p><p> #include <qapplication.h></p>&l
58、t;p> #include <qpushbutton.h></p><p> Int main( int argc, char **argv )</p><p><b> { </b></p><p> QApplication a( argc, argv ); </p><p> QPush
59、Button hello( "Hello world!", 0 ); </p><p> hello.resize( 300, 100 ); </p><p> a.setMainWidget( &hello ); </p><p> hello.show(); </p><p> return a.exe
60、c(); </p><p><b> }</b></p><p> #include <qapplication.h></p><p><b> 代碼解釋:</b></p><p> 這一行包含了QApplication類的定義。在每一個使用Qt的應(yīng)用程序中都必須使用一個QApp
61、lication對象。QApplication管理了各種各樣的應(yīng)用程序的廣泛資源,比如默認(rèn)的字體和光標(biāo)。 </p><p> #include <qpushbutton.h></p><p> 這一行包含了QPushButton類的定義。參考文檔的文件的最上部分提到了使用哪個類就必須包含哪個頭文件的說明。 </p><p> QPushButton
62、是一個經(jīng)典的圖形用戶界面按鈕,用戶可以按下去,也可以放開。它管理自己的觀感,就像其它每一個QWidget。一個窗口部件就是一個可以處理用戶輸入和繪制圖形的用戶界面對象。程序員可以改變它的全部觀感和它的許多主要的屬性(比如顏色),還有這個窗口部件的內(nèi)容。一個QPushButton可以顯示一段文本或者一個QPixmap。</p><p> int main( int argc, char **argv )</
63、p><p> main()函數(shù)是程序的入口。幾乎在使用Qt的所有情況下,main()只需要在把控制轉(zhuǎn)交給Qt庫之前執(zhí)行一些初始化,然后Qt庫通過事件來向程序告知用戶的行為。</p><p> argc是命令行變量的數(shù)量,argv是命令行變量的數(shù)組。這是一個C/C++特征。它不是Qt專有的,無論如何Qt需要處理這些變量。 </p><p> QApplication
64、 a( argc, argv )</p><p> a是這個程序的QApplication。它在這里被創(chuàng)建并且處理這些命令行變量(比如在X窗口下的-display)。請注意,所有被Qt識別的命令行參數(shù)都會從argv中被移除(并且argc也因此而減少)。</p><p><b> 接下來是編譯:</b></p><p> 編譯一個C++應(yīng)用
65、程序,你需要創(chuàng)建一個makefile。創(chuàng)建一個Qt的makefile的最容易的方法是使用Qt提供的連編工具qmake。如果你已經(jīng)把main.cpp保存到它自己的目錄了,你所要做的就是這些: </p><p> qmake *.pro</p><p><b> make </b></p><p> 第一個命令調(diào)用qmake來生成一個.pro
66、(項目)文件。第二個命令根據(jù)這個項目文件來生成一個(系統(tǒng)相關(guān)的)makefile。你現(xiàn)在可以輸入make,然后運行你的第一個Qt應(yīng)用程序! </p><p> 運行后效果如圖2-1所示</p><p> 圖2-1 QT開發(fā)的Hello World</p><p><b> 2.3 信號與槽</b></p><p>
67、 QT不同于其他開發(fā)工具的一個重要特點,就是信號與槽。</p><p> 信號和槽用于對象間的通訊。信號/槽機(jī)制是Qt的一個中心特征并且也許是Qt與其它工具包的最不相同的部分。</p><p> 在圖形用戶界面編程中,我們經(jīng)常希望一個窗口部件的一個變化被通知給另一個窗口部件。更一般地,我們希望任何一類的對象可以和其它對象進(jìn)行通訊。例如,如果我們正在解析一個XML文件,當(dāng)我們遇到一個新
68、的標(biāo)簽時,我們也許希望通知列表視圖我們正在用來表達(dá)XML文件的結(jié)構(gòu)。</p><p> 圖 2-2 一個關(guān)于一些信號和槽連接的摘要圖</p><p> 在Qt中我們有一種可以替代回調(diào)的技術(shù)。我們使用信號和槽。當(dāng)一個特定事件發(fā)生的時候,一個信號被發(fā)射。Qt的窗口部件有很多預(yù)定義的信號,但是我們總是可以通過繼承來加入我們自己的信號。槽就是一個可以被調(diào)用處理特定信號的函數(shù)。Qt的窗口部件又很
69、多預(yù)定義的槽,但是通常的習(xí)慣是你可以加入自己的槽,這樣你就可以處理你所感興趣的信號。 信號和槽的機(jī)制是類型安全的:一個信號的簽名必須與它的接收槽的簽名相匹配。(實際上一個槽的簽名可以比它接收的信號的簽名少,因為它可以忽略額外的簽名。)因為簽名是一致的,編譯器就可以幫助我們檢測類型不匹配。信號和槽是寬松地聯(lián)系在一起的:一個發(fā)射信號的類不用知道也不用注意哪個槽要接收這個信號。Qt的信號和槽的機(jī)制可以保證如果你把一個信號和一個槽連接起來,槽會
70、在正確的時間使用信號的參數(shù)而被調(diào)用。信號和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的:不會再有回調(diào)核心轉(zhuǎn)儲(core dump)。</p><p> 圖 2-3 一個信號和槽連接的例子 </p><p> 信號與插槽機(jī)制是一個函數(shù),原型如下:</p><p> QObject::connect( &a, SIGNAL(funtionA()
71、), &b, SLOT(funtionB()) )</p><p> 這一行在兩個Qt對象(直接或間接繼承QObject對象的對象)中建立了一種單向的連接。每一個Qt對象都有signals(發(fā)送消息)和slots(接收消息)。所有窗口部件都是Qt對象。它們繼承QWidget,而QWidget繼承QObject。該函數(shù)意思是a部件發(fā)出 funtionA()消息,b部件執(zhí)行funtionB()函數(shù)。<
72、/p><p> 第3章 黑白棋需求分析</p><p> 3.1 黑白棋程序界面的需求</p><p> 3.1.1 調(diào)查對比同類軟件</p><p> 為了獲取一款黑白棋程序需要滿足的功能,我在網(wǎng)上查閱了大量前人做好的黑白棋程序。</p><p> 具有可比性的黑白棋程序有如下幾款,傷心黑白棋(見圖3-1)、億
73、唯黑白棋1.35(見圖3-2)、Monkey黑白棋1.0(見圖3-3)、以及大名鼎鼎的WZebra(見圖3-4)。</p><p> 圖3-1 傷心黑白棋</p><p> 圖3-2 億唯黑白棋1.35</p><p> 圖3-3 Monkey黑白棋1.0</p><p> 圖3-4 WZebra</p><p&g
74、t; 這四款游戲程序都能滿足玩家游戲的基本需求,但是使用起來還是帶給用戶以不同的體驗。</p><p><b> ?。?)傷心黑白棋:</b></p><p> 界面簡潔、游戲棋力強(qiáng),具有棋子數(shù)目顯示、顯示上步棋位置、先后手選擇、單人雙人模式、悔棋和悔棋恢復(fù)、難度選擇、提示下棋點、聲音提示、棋盤翻轉(zhuǎn)、棋局保存及讀取等功能。</p><p>
75、 不足之處:悔棋、開局等常用設(shè)置主界面不顯示,使用過程中要在菜單欄尋找。作為一款游戲,沒有考慮到程序的便捷性。作為一款游戲,界面不夠美觀。</p><p> ?。?)億唯黑白棋1.35:</p><p> 界面較為簡潔、游戲棋力較強(qiáng),具有棋子數(shù)目顯示、顯示上步棋位置、先后手選擇、單人雙人模式、悔棋和悔棋恢復(fù)、難度選擇、提示下棋點、聲音提示、棋盤翻轉(zhuǎn)、棋局保存及讀取、動畫翻轉(zhuǎn)棋子、本局棋
76、譜顯示等功能。并在主界面上放置了常用功能按鈕,為用戶操作提供便捷性。</p><p> 不足之處:常用快捷鍵有點多,降低游戲開發(fā)簡單為好的原則。作為一款游戲,界面不夠美觀。</p><p> ?。?)Monkey黑白棋1.0:</p><p> 界面另類,給人以耳目一新的感覺,人機(jī)對戰(zhàn)中會給玩家提示電腦認(rèn)為較好的位置。程序功能直觀。沒有菜單欄等的干擾。具有棋子數(shù)
77、目顯示、顯示上步棋位置、先后手選擇、悔棋和悔棋恢復(fù)、難度選擇、提示下棋點、聲音提示等功能。</p><p> 不足之處:作為一款游戲,大膽使用透明界面,無形中就增加了游戲的樂趣,但布局有些亂,背景透明和其他背景融合一起,長時間游戲會對該界面產(chǎn)生反感。 實際調(diào)查中,本點已被程序作者接受,在Monkey黑白棋2.0中,已經(jīng)取消透明背景。</p><p> ?。?)WZebra:<
78、/p><p> WZebra功能齊全、算法優(yōu)異、棋力深厚、電腦思考速度快,在黑白棋中處于老大的地位。其他黑白棋中有的功能本游戲中都有。</p><p> 不足之處:作為一款程序,他當(dāng)之無愧很成功,但作為一款游戲,它主界面上豐富的按鈕,并不會帶給玩家良好的用戶體驗。</p><p> 3.1.2 確定需求</p><p> 通過上述網(wǎng)上常見
79、的一些具有代表性的黑白棋程序的對比分析,現(xiàn)在一個基于界面上的用戶需求已經(jīng)基本確立。該需求包含以下幾點:</p><p> ?。?)作為按鈕出現(xiàn)在主界面上的:</p><p> 先后手選擇、單人雙人模式、悔棋和悔棋恢復(fù)、難度選擇、開始新游戲。</p><p> ?。?)能夠直觀顯示在游戲界面上的:</p><p> 棋子數(shù)目顯示、顯示上步棋
80、位置、提示下棋點、動畫翻轉(zhuǎn)棋子。</p><p> 3.2 黑白棋游戲規(guī)則的需求</p><p> 第二章中已經(jīng)介紹了黑白棋游戲的規(guī)則,主要有如下規(guī)則:</p><p> (1)兩人對弈,以輪流方式持黑子與白子。</p><p> ?。?)開辟新局者持黑子,加入者持白子, 之后以輪流方式將棋子置于棋盤格子中。若無地方可下子,則跳過一回,
81、由對方下子。</p><p> ?。?)在提示的格子中,選擇一個格子下子, 當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子變?yōu)榕c我方一樣顏色。</p><p> ?。?)當(dāng)下滿64個棋子,棋子多者為勝。</p><p> ?。?)雙方都無棋可走的其他局面,游戲結(jié)束,以子多者為勝。</p><p> 黑白棋游戲規(guī)則,是程序設(shè)計是
82、需要考慮的內(nèi)部需求,該部分需求,和前面的游戲界面需求,以及下小節(jié)的其他需求,功能構(gòu)成了黑白棋程序的基本需求。</p><p> 3.3 黑白棋程序的其它需求</p><p> 一個良好的游戲不僅要有一個好的界面來吸引用戶興趣,還需要把凡是不是必須有用戶做出選擇的地方都去掉。</p><p> 比如,在雙方下棋中,一方無棋可走,切換到另一方,這時只需要在界面上給
83、出提示即可,不需要彈出一個對話框的形式,告訴本步棋要pass,并提示玩家點擊該對話框來繼續(xù)游戲,這樣會降低游戲的可玩性。</p><p> 同樣的問題也出現(xiàn)在用戶點擊退出時,不少程序會彈出圖3-5的對話框來要求用戶確認(rèn)。這是見仁見智的選擇,本文認(rèn)為不符合用戶的需求,因此也去掉了。</p><p> 第4章 黑白棋程序設(shè)計</p><p><b> 4
84、.1 程序流程圖</b></p><p> 程序所需執(zhí)行的流程見圖4-1,該圖表示出了程序執(zhí)行的流程,也基本表示出了程序的各個模塊和相互關(guān)系,后面的詳細(xì)設(shè)計和代碼實現(xiàn),就是基于本圖設(shè)計的。</p><p> 圖4-1 黑白棋流程圖</p><p> 4.2 主要模塊簡介</p><p> 為了實現(xiàn)黑白棋游戲的開發(fā),通過流程
85、圖的分析,計劃采用以下幾大模塊。</p><p><b> 4.2.1繪圖模塊</b></p><p> 本模塊用來負(fù)責(zé)主界面的繪制,包括棋盤、棋子、個數(shù)統(tǒng)計、時間顯示、以及其它需要顯示的部分的繪圖。</p><p> 繪圖模塊的實現(xiàn),主要通過重載QT庫中自帶的繪圖函數(shù)來實現(xiàn)。</p><p> 4.2.2初始化
86、模塊</p><p> 初始化模塊是一個函數(shù),用來負(fù)責(zé)開局時的棋盤初始化,主要負(fù)責(zé)把程序代碼中各變量值初始化。初始化函數(shù)再程序首次執(zhí)行時自動調(diào)用,中途通過點擊新游戲按鍵調(diào)用。</p><p><b> 4.2.3雙人模塊</b></p><p> 雙人模塊是本程序得以運行的基礎(chǔ),本模塊通過判斷用戶鼠標(biāo)點擊位置,判斷出該坐標(biāo)所處棋盤中響應(yīng)位
87、置,并通過后面的規(guī)則模塊決定能否下子,如果能下子就下己方棋子,并交換為對手走棋。</p><p><b> 4.2.4單人模塊</b></p><p> 單人模塊是基于雙人模塊的,當(dāng)玩家點擊棋盤并成功走棋后,把交換對手部分,變?yōu)榻粨Q至電腦走棋,電腦則通過算法模塊走出電腦認(rèn)為最佳位置,并等待玩家繼續(xù)走棋。</p><p> 因此,本黑白棋開
88、發(fā)過程中,把單人模塊看成是雙人模塊的一部分來處理。</p><p><b> 4.2.5規(guī)則模塊</b></p><p> 走棋模塊是黑白棋的基礎(chǔ),它負(fù)責(zé)判斷哪些位置能走棋,并在成功走棋后,翻轉(zhuǎn)所需棋子后,并再次負(fù)責(zé)判斷出對方可走棋位置。</p><p> 本模塊包括翻轉(zhuǎn)函數(shù)、以及判斷可下子位置函數(shù)。</p><p&g
89、t; 4.2.6悔棋和悔棋恢復(fù)模塊</p><p> 本模塊通過每次走棋記錄棋譜,以便用戶能夠全局悔棋,并全局恢復(fù),但是當(dāng)悔棋過程中,用戶再次走棋,則后繼步數(shù)不能恢復(fù)。</p><p> 人機(jī)對弈模式下,只允許玩家悔當(dāng)前的兩步棋(計算機(jī)一步,玩家一步)。</p><p> 雙人網(wǎng)絡(luò)對弈模式下,悔棋的過程為:首先由玩家向?qū)Ψ桨l(fā)送悔棋請求(悔棋消息),然后由對方
90、決定是否允許玩家悔棋,在玩家得到對方的響應(yīng)消息(允許或者拒絕)之后,才進(jìn)行悔棋與否的操作。這是應(yīng)該做到的,但實際編碼中,沒有開發(fā)網(wǎng)絡(luò)對弈,因此雙人悔棋無需確認(rèn),但每次只悔一步棋。</p><p><b> 4.2.7算法模塊</b></p><p> 算法模塊是人機(jī)對戰(zhàn)的關(guān)鍵,是AI函數(shù)的具體設(shè)計部分。考慮到黑白棋的實際情況,決定把算法分成三大部分:開局算法、中局
91、算法和終局算法。</p><p> 開局算法首先通過棋譜庫調(diào)用已有棋譜,如果棋譜庫中沒有該棋譜,則自動調(diào)用中局算法。開局算法由于采用棋譜庫,程序執(zhí)行較快。</p><p> 中局算法采用減枝和棋盤位置估值以及其他黑白棋常用估值方法,并給每種不同估值賦一權(quán)值,進(jìn)行估值合并,選擇出估值最高的位置,并在該處下棋。中局算法由于棋局中期可走位置較多,致使中局算法執(zhí)行較慢。</p>
92、<p> 終局算法,終局算法是窮舉某一步到棋局結(jié)束的所有可能走法,選出對自己最有利的位置,并走棋。由于臨近終局,最后位置較少,因此程序執(zhí)行較快。</p><p><b> 第5章 程序?qū)崿F(xiàn)</b></p><p> 通過第3章和第4章的描述,黑白棋設(shè)計思路已經(jīng)確定,現(xiàn)在要做的就是把設(shè)計結(jié)果翻譯成專用的程序設(shè)計語言所書寫的程序。編碼是對設(shè)計的進(jìn)一步具體化
93、,本部分的質(zhì)量取決于前期設(shè)計的質(zhì)量,但是,所選設(shè)計語言的特點及編碼風(fēng)格也會對程序的可靠性、可讀性、可測試性和可維護(hù)性產(chǎn)生影響。</p><p><b> 5.1 界面實現(xiàn)</b></p><p> 為了增加游戲的美觀,界面采用專業(yè)繪圖工具制作出來的漂亮圖片作為程序背景和棋盤背景。本程序利用FireWorks對網(wǎng)絡(luò)上的一些圖片做了修改,并作為程序背景使用。</
94、p><p> 界面的顯示,是把上述背景圖作為資源文件,通過重載QT庫自帶的paintEvent(QPaintEvent *e)函數(shù),來繪制背景棋盤。 效果見圖5-1。</p><p> 圖5-1 黑白棋背景圖</p><p> 葉子狀的是程序背景,木紋狀的是棋盤背景。之所以不作為一個圖片保存背景,是為了便于以后棋盤改變布局位置。</p><p&
95、gt; 在左邊有總用時和本步用時兩個小模塊,這是用QTDesigner自帶的控件繪制的,計劃用于上方走棋時間統(tǒng)計。</p><p> 為了使這兩個小模塊好看些,也加上了背景,同時背景的上半部分,用來標(biāo)示黑白雙方,以及顯示雙方當(dāng)前局面棋子個數(shù),并用高亮方式,表示出當(dāng)前該哪一方走棋。</p><p> 背景界面設(shè)計好了,再加上常用功能鍵、其它選擇按鈕等,一個程序打開的初始界面就確定了,見
96、圖5-2</p><p> 圖5-2 黑白棋主界面</p><p> 重載QT庫自帶的paintEvent(QPaintEvent *e)函數(shù)的方法如下,首先定義用來統(tǒng)計黑白兩色棋子個數(shù),初始值為0,接著生成繪圖對象,并加載需要繪制的各個元素,然后并繪制出來,以及繪制其他相關(guān)元素。</p><p> 5.2 功能按鈕的實現(xiàn)</p><p&g
97、t; 用QT開發(fā)GUI程序,不如MFC容易,但只要掌握了QT的方法,還是很輕松的。如圖5-2的上方部分的按鈕,可以用QTDesigner里面的控件直接繪制出來。</p><p> 然而這是顯性的繪制,點擊該按鈕并不能直接執(zhí)行相應(yīng)的函數(shù)。而是通過信號與槽機(jī)制響應(yīng)相關(guān)函數(shù)。</p><p> 信號與槽的機(jī)制在2.3節(jié)中有介紹。再次我們要給新游戲按鈕與初始化函數(shù)建立聯(lián)系,即:</p&
98、gt;<p> QObject::connect(pushButton_new, SIGNAL(clicked()), Form, SLOT(initialize()))。</p><p> pushButton_new為新游戲部件名稱,本句話意思是點擊新游戲按鈕,程序執(zhí)行初始化(initialize())函數(shù)。</p><p> 其他按鈕已通過信號與槽機(jī)制和相關(guān)功能的
99、函數(shù)連接起來,具體連接請參照附錄一主要代碼部分。</p><p> 本程序使用到的信號與槽,見圖5-3所示。同時,圖5-3也標(biāo)識出QTDesigne在本程序開發(fā)中所能發(fā)揮的全部作用。</p><p> 圖5-3 QTDesigner完成的作用</p><p> Designer不能顯示白色的文本內(nèi)容(見圖5-3左下角數(shù)字2),但為了標(biāo)示白棋的顏色,需要在代碼部
100、分借助QPalette類的setColor函數(shù)來改變本控件的文本顏色,相關(guān)實現(xiàn)代碼見附錄一 主要代碼部分。</p><p> 結(jié)合著相關(guān)函數(shù)介紹實現(xiàn)代碼:</p><p> 本部分主要是把信號和槽進(jìn)行部件之間的連接,這部分在Designer里面會自動生成。但是自定義的槽函數(shù),要聲明稱public slots形式。</p><p> 對應(yīng)圖5-3,本程序用到的信
101、號槽代碼和功能如下:</p><p> QObject::connect(pushButton_new, SIGNAL(clicked()), Form, SLOT(initialize())),點擊開始按鈕,程序初始化。</p><p> QObject::connect(pushButton_backward, SIGNAL(clicked()), Form, SLOT(backw
102、ard())),點擊后退按鈕,執(zhí)行后退相關(guān)函數(shù)。</p><p> QObject::connect(pushButton_forward, SIGNAL(clicked()), Form, SLOT(forward())),點擊前進(jìn)按鈕執(zhí)行前進(jìn)函數(shù)。</p><p> QObject::connect(checkBox_tip, SIGNAL(clicked()), Form, SL
103、OT(update())),點擊tip按鈕,執(zhí)行刷新函數(shù),刷新過程中,根據(jù)該組件是否被選中,決定時候繪制提示點。</p><p> QObject::connect(radio_single, SIGNAL(clicked(bool)), checkBox_2, SLOT(setEnabled(bool))),點擊單人游戲按鈕,改變該組件狀態(tài)為選中模式,從而決定在mousePressEvent(QMouseEv
104、ent *e)里面執(zhí)行單人模式。</p><p> QObject::connect(radio_double, SIGNAL(clicked(bool)), checkBox_2, SLOT(setDisabled(bool))) ,點擊單人游戲按鈕,改變該組件狀態(tài)為選中模式,從而決定在mousePressEvent(QMouseEvent *e)里面執(zhí)行雙人模式。</p><p>
105、 QObject::connect(radio_single, SIGNAL(clicked(bool)), radioButton_lv1, SLOT(setEnabled(bool))),點擊單人游戲按鈕,如果該按鈕被選中,則難度選擇按鈕為可更改狀態(tài),下面兩個相同。</p><p> QObject::connect(radio_single, SIGNAL(clicked(bool)), radioBut
106、ton_lv2, SLOT(setEnabled(bool)))。</p><p> QObject::connect(radio_single, SIGNAL(clicked(bool)), radioButton_lv3, SLOT(setEnabled(bool)))。</p><p> QObject::connect(radio_double, SIGNAL(clicked(
107、bool)), radioButton_lv1, SLOT(setDisabled(bool))) 點擊雙人游戲按鈕,如果該按鈕被選中,則難度選擇按鈕為不可更改狀態(tài),下面兩個相同。</p><p> QObject::connect(radio_double, SIGNAL(clicked(bool)), radioButton_lv2, SLOT(setDisabled(bool)))。</p>
108、<p> QObject::connect(radio_double, SIGNAL(clicked(bool)), radioButton_lv3, SLOT(setDisabled(bool)))。</p><p> QObject::connect(checkBox_2, SIGNAL(clicked()), Form, SLOT(update())),該處選中,執(zhí)行動畫效果。</p&
109、gt;<p> QObject::connect(radio_single, SIGNAL(clicked()), Form, SLOT(doubletosingle())),該處選中,執(zhí)行雙人到單人模式切換函數(shù)doubletosingle(),判斷如果該電腦走棋,則電腦走一步棋。</p><p> 5.3 程序主要函數(shù)</p><p> 從程序表面看,這是一個二維平面
110、圖,所以數(shù)據(jù)用二維數(shù)組類來表示,數(shù)組兩個下標(biāo)可以表示棋盤上的位置,數(shù)組元素的值代表棋格上的狀態(tài),共有五種情況,分別是0代表可下子格,1代表黑棋,-1代表黑棋,-2代表絕對不能下的位置,2代表需要判斷才知道能否下的位置。</p><p> 程序首次打開,執(zhí)行initialize()函數(shù)初始化棋局,用戶可以直接走棋或者選擇單人模式等一些功能。</p><p> 當(dāng)用戶點擊棋盤某一位置時,響
111、應(yīng)mousePressEvent(QMouseEvent *e)函數(shù),判斷鼠標(biāo)點擊位置,如果能下棋則執(zhí)行onestep(int x,int y)函數(shù)在該方格內(nèi)走一步棋。并交由對方可能是另一名玩家,或者電腦走棋。</p><p> mousePressEvent(QMouseEvent *e)函數(shù)的執(zhí)行過程如下:首先通過點擊鼠標(biāo)位置獲取點擊坐標(biāo),并判斷該處是否能下子,不能下子退出該函數(shù)。該位置能下子,執(zhí)行ones
112、tep(judgepos(x),judgepos(y))走一步棋。玩家走一步棋之后,如果是單人模式執(zhí)行,則交由電腦走棋。電腦走棋首先進(jìn)行難度判斷,并結(jié)合著棋局步數(shù)判斷,選擇不同的函數(shù)進(jìn)行搜索,搜索結(jié)束,電腦執(zhí)行onestep(judgepos(x), judgepos(y))走一步棋,退出該函數(shù)。 </p><p> 在調(diào)用onestep(int x,int y)函數(shù)時,程序首先通過mousePressEven
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑白棋畢業(yè)論文---黑白棋游戲設(shè)計與開發(fā)(含外文翻譯)
- 黑白棋游戲設(shè)計與開發(fā)畢業(yè)論文
- 黑白棋游戲畢業(yè)設(shè)計
- 黑白棋游戲課程設(shè)計
- 基于qt的黑白棋游戲
- 基于qt的黑白棋游戲開發(fā)(論文)
- vb黑白棋游戲課程設(shè)計報告
- c語言課程設(shè)計---黑白棋游戲
- c語言課程設(shè)計--黑白棋游戲
- 黑白棋游戲數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 基于Qt的黑白棋游戲(終稿).doc
- 基于java me的黑白棋游戲設(shè)計及實現(xiàn)畢業(yè)設(shè)計
- 基于java me的黑白棋游戲設(shè)計及實現(xiàn)畢業(yè)設(shè)計
- c語言程序設(shè)計課程設(shè)計(論文)-黑白棋
- c語言課程設(shè)計報告--黑白棋
- 基于Alpha-Btea剪枝算法的黑白棋游戲的設(shè)計與開發(fā).pdf
- 嵌入式wince課程設(shè)計報告(黑白棋)
- 畢業(yè)設(shè)計----黑白棋子的識別與分揀輸送裝置的設(shè)計
- 黑白棋盤網(wǎng)格中的直線檢測方法研究.pdf
- 計算機(jī)技術(shù)基礎(chǔ)課程設(shè)計---黑白棋
評論
0/150
提交評論