版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)號(hào):2008840217本 科 畢 業(yè) 論 文(設(shè) 計(jì))基于qt的黑白棋游戲程序設(shè)計(jì)與實(shí)現(xiàn)作者姓名指導(dǎo)教師所學(xué)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)所屬院系信息學(xué)院學(xué)習(xí)年限2008年9月至2012年7月二一二年六月目 錄1 引言11.1 系統(tǒng)開發(fā)背景11.2 黑白棋簡(jiǎn)介21.2.1 黑白棋游戲規(guī)則21.2.2 黑白棋游戲簡(jiǎn)介21.3 相關(guān)實(shí)現(xiàn)環(huán)境31.3.1 開發(fā)環(huán)境31.3.2 運(yùn)行環(huán)境31.4 主要研究?jī)?nèi)容31.5 系統(tǒng)開發(fā)的現(xiàn)實(shí)意義32 開發(fā)工具qt421 qt簡(jiǎn)介422信號(hào)與槽43. 黑白棋需求分析731 黑白棋程序界面的需求73. 2黑白棋游戲規(guī)則的需求7第4章 黑白棋總體設(shè)計(jì)84.1 程序流程
2、圖84.2 主要模塊簡(jiǎn)介85. 程序?qū)崿F(xiàn)105.1 界面實(shí)現(xiàn)105.2 功能按鈕的實(shí)現(xiàn)115.3主要函數(shù)125.4 電腦戰(zhàn)術(shù)分析145.4.1 棋盤掃描145.4.2判斷行動(dòng)力145.4.3選擇最佳位置落子156.系統(tǒng)測(cè)試166.1雙人模式下的測(cè)試166.1.1 悔棋和悔棋恢復(fù)測(cè)試166.1.2 pass情況下的悔棋恢復(fù)166.2 單人模式下的測(cè)試166.2.1 pass情況的測(cè)試166.2.2 游戲正常測(cè)試176.2.3 悔棋測(cè)試176.3 綜合測(cè)試報(bào)告177. 總結(jié)和展望187.1 總結(jié)187.2展望18致謝19參考文獻(xiàn)20othello game based on the qt deve
3、lopment21基于qt的黑白棋游戲開發(fā) 學(xué)生姓名: 指導(dǎo)教師: 內(nèi)容提要 本程序使用的是面向?qū)ο蟮膓t庫的c+語言開發(fā),可以同時(shí)運(yùn)行于linux和windows環(huán)境下的游戲程序。有雙人對(duì)弈,人機(jī)對(duì)弈,無限悔棋等功能,其中人機(jī)對(duì)弈包含難度選擇和先后手選擇。本論文首先指出了黑白棋游戲、linux桌面環(huán)境、qt開發(fā)環(huán)境的發(fā)展現(xiàn)狀,然后重點(diǎn)介紹了qt開發(fā)工具的使用、黑白棋的常見戰(zhàn)術(shù)、黑白棋程序的界面設(shè)計(jì)、規(guī)則設(shè)計(jì)、算法設(shè)計(jì)(包含搜索算法、局面估值、-減枝、散列表、mtd等當(dāng)今主流算法)、終局搜索、以及作為一款游戲的其他必須功能,最后介紹了linux桌面環(huán)境 gui的發(fā)展趨勢(shì)。 本設(shè)計(jì)通過一個(gè)棋類游
4、戲的開發(fā),闡述了棋類游戲的開發(fā)過程,包括軟件開發(fā)的邏輯分析,程序設(shè)計(jì),軟件實(shí)現(xiàn)和軟件測(cè)試幾個(gè)步驟。關(guān)鍵詞 黑白棋 linux 人工智能 qti山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計(jì))1 引言本章概述了黑白棋游戲開發(fā),對(duì)黑白棋的基本知識(shí)和相關(guān)開發(fā)環(huán)境做了一個(gè)簡(jiǎn)介1.1 系統(tǒng)開發(fā)背景隨著網(wǎng)絡(luò)技術(shù)的日新月異和計(jì)算機(jī)的普及,當(dāng)今的計(jì)算機(jī)技術(shù)也走上了平民化和娛樂化的時(shí)代,計(jì)算機(jī)技術(shù)再也不是只能由少數(shù)人掌握的深不可測(cè)的學(xué)問;同時(shí)個(gè)人計(jì)算機(jī)也由原來單純的數(shù)值計(jì)算和工業(yè)應(yīng)用逐漸轉(zhuǎn)變成像電視機(jī)一樣的家庭娛樂中心,伴隨著這種巨大的轉(zhuǎn)變計(jì)算機(jī)軟件的發(fā)展也走向了娛樂化。 尤其是游戲產(chǎn)業(yè)的發(fā)展已經(jīng)成為信息產(chǎn)業(yè)中發(fā)展勢(shì)頭最猛
5、烈最具前景的一個(gè)分支,而游戲廳也漸漸被網(wǎng)吧擠出了正常的營(yíng)業(yè)市場(chǎng),游戲除了單純的個(gè)人娛樂功能之外,也逐漸向互動(dòng)的方向發(fā)展。游戲的功能不斷按照玩家的需求和愛好擴(kuò)展延伸進(jìn)化,如今運(yùn)行在各種平臺(tái)上不同名稱,不同內(nèi)容,不同形式的游戲不僅僅為廣大游戲愛好者提供了豐富的選擇,而且為游戲開發(fā)商帶來了豐厚的回報(bào),游戲產(chǎn)業(yè)吸引著許多程序員去開發(fā)更多更新的游戲。 基于游戲發(fā)展的歷史和前景,我決定用c+語言開發(fā)一款小游戲,游戲內(nèi)容來自網(wǎng)絡(luò)上日漸流行的一種智力游戲黑白棋。我希望把平時(shí)界面簡(jiǎn)單、選項(xiàng)復(fù)雜的游戲,在linux里面做成漂亮的、簡(jiǎn)單的游戲程序,以給linux玩家一個(gè)新的選擇。隨著計(jì)算機(jī)處理速度的飛速提高,人們很
6、早就提出了疑問:計(jì)算機(jī)是否會(huì)超越人類?世界國(guó)際象棋棋王卡斯帕羅夫與美國(guó)ibm公司的rs6000(深藍(lán))計(jì)算機(jī)系統(tǒng)于1997年5月11日進(jìn)行了六局“人機(jī)大戰(zhàn)”,結(jié)果“深藍(lán)”以3.5比2.5的總比分獲勝。比賽結(jié)束了給人們留下了深刻的思考;下棋要獲勝要求選手要有很強(qiáng)的思維能力、記憶能力、豐富的下棋經(jīng)驗(yàn),還得及時(shí)做出反應(yīng),迅速進(jìn)行有效的處理,否則一著出錯(cuò)滿盤皆輸,這顯然是個(gè)“智能”問題。盡管開發(fā)“深藍(lán)”計(jì)算機(jī)的ibm專家也認(rèn)為它離智能計(jì)算機(jī)還相差甚遠(yuǎn),但它以高速的并行的計(jì)算能力(20108步秒棋的計(jì)算速度)。實(shí)現(xiàn)了人類智力的計(jì)算機(jī)上的部分模擬。那么計(jì)算機(jī)已經(jīng)超過了人類嗎?本文著重介紹了黑白棋的設(shè)計(jì)與開
7、發(fā),讓您對(duì)計(jì)算機(jī)棋手的智能有更深入的了解。11.2 黑白棋簡(jiǎn)介黑白棋,又叫反棋(reversi)、奧賽羅棋(othello),蘋果棋,翻轉(zhuǎn)棋。黑白棋起源中世紀(jì)的英國(guó),18世紀(jì)傳入日本,并在日本得到了發(fā)展。現(xiàn)在,黑白棋在西方和日本很流行。游戲通過相互翻轉(zhuǎn)對(duì)方的棋子,最后以棋盤上誰的棋子多來判斷勝負(fù)。它的游戲規(guī)則簡(jiǎn)單,因此上手很容易,但是它的變化又非常復(fù)雜。有一種說法是:只需要幾分鐘學(xué)會(huì)它,卻需要一生的時(shí)間去精通它。 黑白棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。黑白棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜
8、聞樂見,又有深?yuàn)W的技巧和高水平的國(guó)際性比賽;它的棋文化源淵流長(zhǎng),具有東方的神秘和西方的直觀;既有“場(chǎng)”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。1.2.1 黑白棋游戲規(guī)則(1)兩人對(duì)弈,以輪流方式持黑子與白子。(2)開辟新局者持白子,加入者持黑子, 之后以輪流方式將棋子置于棋盤格子中。若無地方可下子,則跳過一回,由對(duì)方下子。(3)在提示的格子中,選擇一個(gè)格子下子, 當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子變?yōu)榕c我方一樣顏色。(4)當(dāng)下滿64個(gè)棋子,棋子多者為勝。1.2.2 黑白棋游戲簡(jiǎn)介黑白棋規(guī)則規(guī)定對(duì)局結(jié)束時(shí)子多的一方為勝方,于是初學(xué)者通常會(huì)一開始
9、使勁吃子,這實(shí)際上是犯了短視的錯(cuò)誤。每一步都盡可能吃更多的子,我們把這種下法叫做大食策略(maximum disc strategy)。除了大食策略以外,還有其它幾種常用的策略以及重要位置和術(shù)語,它們是:穩(wěn)定子 - 位置策略(stable discs - positional strategy)楔入(wedges)行動(dòng)力策略(mobility)余裕手(tempo,waiting moves)爬邊(creeping along edges) 奇偶性(parity) 非平衡邊(unbalanced edges)四通陷阱(stoner traps) 從黑白棋的游戲規(guī)則上看,應(yīng)該盡量使自己的棋子多于對(duì)
10、手的,很容易就得到了一個(gè)戰(zhàn)術(shù),就是每步棋都落在能吃掉對(duì)手棋子最多的位置,但是經(jīng)過幾局后,你就會(huì)發(fā)現(xiàn)這并不是一個(gè)好的方法。1.3 相關(guān)實(shí)現(xiàn)環(huán)境本程序采用qt庫及其開發(fā)環(huán)境,使用c+語言開發(fā)運(yùn)行于linux系統(tǒng)kde桌面環(huán)境下的黑白棋游戲。 經(jīng)過實(shí)際檢測(cè),qt強(qiáng)大的跨平臺(tái)性,已經(jīng)保證了同樣的代碼在windows xp下、linux gnome下、linux kde下,幾乎不用修改就能正常運(yùn)行。1.3.1 開發(fā)環(huán)境 qt 4.7.4 (4.7.4) mingw編譯器1.3.2 運(yùn)行環(huán)境microsoft® windows xppentium(r) dual-core cpu 250g硬盤1
11、.4 主要研究?jī)?nèi)容本文將對(duì)計(jì)算機(jī)棋手下黑白棋做一個(gè)全面綜述,介紹計(jì)算機(jī)對(duì)黑白棋戰(zhàn)術(shù)分析的全過程,包括對(duì)圖形和動(dòng)畫的處理、對(duì)棋盤搜索的算法、對(duì)棋局做出正確的估計(jì)、并生成最佳走法,并將介紹其中各個(gè)流程的研究狀況及實(shí)用技術(shù)。本文的重點(diǎn)放在計(jì)算機(jī)對(duì)當(dāng)前棋局的分析,并做出最佳的選擇。介紹搜索算法,棋類游戲不可能一步就決出勝負(fù),象棋中不可能第一步就將對(duì)方將死;而對(duì)某個(gè)棋局的判斷也不可能完全精確,在黑白棋中,初局時(shí)棋子多并不一定最終取得勝利,因?yàn)閷?duì)手可能在后面的博弈過程中將局面扭轉(zhuǎn)。想想人類下棋時(shí),一般會(huì)假設(shè)我走這步,那么對(duì)手會(huì)怎,樣回應(yīng),如果對(duì)手回應(yīng)了某一步,我再走哪一步,如果對(duì)手回應(yīng)了另外某一步,我又該
12、怎么走;然后再假設(shè)我走另外的某一步,如此反復(fù)下去。這個(gè)過程叫做搜索。1.5 系統(tǒng)開發(fā)的現(xiàn)實(shí)意義利用這次畢業(yè)設(shè)計(jì)的機(jī)會(huì)可以熟悉c+語言的各種特性,鍛煉程序設(shè)計(jì)的實(shí)踐能力,熟悉c+語言linux下的開發(fā)環(huán)境,熟悉前沿的linux圖形用戶界面的開發(fā),以及鞏固數(shù)據(jù)結(jié)構(gòu)和算法等課程的學(xué)習(xí)成果,并深入理解數(shù)據(jù)結(jié)構(gòu)和算法在程序設(shè)計(jì)中的核心地位。 同時(shí),借助開發(fā)本游戲的過程,可以熟悉人工智能的程序?qū)崿F(xiàn),有助于掌握棋類所需人工智能的常見算法,隨著游戲產(chǎn)業(yè)的日益壯大,人工智能在游戲中的突出表現(xiàn),人工智能越來越得到世人的重視。在這次的人機(jī)對(duì)戰(zhàn)算法中,通過一定的算法,實(shí)現(xiàn)電腦的下棋及走棋運(yùn)作,加深了對(duì)人工智能工作原理
13、的了解。 綜上所述,通過每次黑白棋的開發(fā),可以深入了解linux編程方法、加深了解算法。2 開發(fā)工具qt21 qt簡(jiǎn)介qt是一個(gè)跨平臺(tái)的c+圖形用戶界面庫,由挪威trolltech公司出品,目前包括qt, 基于framebuffer的qt embedded,快速開發(fā)工具qt designer,國(guó)際化工具 qt linguist等部分qt支持所有unix系統(tǒng),當(dāng)然也包括 linux,還支持 winnt/win2k,win95/98 平臺(tái)。1 qt是一個(gè)多平臺(tái)的c+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。qt是完全面向?qū)ο蟮暮苋菀讛U(kuò)展,并且允許真正地
14、組件編程。自從1996年早些時(shí)候,qt進(jìn)入商業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。qt也是流行的linux桌面環(huán)境kde 的基礎(chǔ),kde是所有主要的linux發(fā)行版的一個(gè)標(biāo)準(zhǔn)組件。基本上,qt同x window上的motif、openwin、gtk等圖形界面庫和windows 平臺(tái)上的mfc、owl、vcl、atl是同類型的東西,但是qt具有下列優(yōu)點(diǎn):優(yōu)良的跨平臺(tái)特性: qt支持下列操作系統(tǒng): microsoft windows 95/98、 microsoft windows nt、 linux、solaris、sunos、hp-ux、digital unix (osf/
15、1、tru64)、irix、freebsd, bsd/os、sco、aix、os390、qnx 等等。面向?qū)ο螅?qt 的良好封裝機(jī)制使得qt的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來說是非常方便的。qt提供了一種稱為signals/slots的安全類型來替代 callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單。豐富的api: qt 包括多達(dá)250個(gè)以上的c+類,還提供基于模板的collections、 serialization、file、i/o device、directory management、date/time 類。甚至還包括正則表達(dá)式的處理功能。支持2d/3d圖形渲
16、染,支持opengl。22信號(hào)與槽qt不同于其他開發(fā)工具的一個(gè)重要特點(diǎn),就是信號(hào)與槽。信號(hào)和槽用于對(duì)象間的通訊。信號(hào)/槽機(jī)制是qt的一個(gè)中心特征并且也許是qt與其它工具包的最不相同的部分。 在圖形用戶界面編程中,我們經(jīng)常希望一個(gè)窗口部件的一個(gè)變化被通知給另一個(gè)窗口部件。更一般地,我們希望任何一類的對(duì)象可以和其它對(duì)象進(jìn)行通訊。例如,如果我們正在解析一個(gè)xml文件,當(dāng)我們遇到一個(gè)新的標(biāo)簽時(shí),我們也許希望通知列表視圖我們正在用來表達(dá)xml文件的結(jié)構(gòu)。圖 2-1 一個(gè)關(guān)于一些信號(hào)和槽連接的摘要圖 在qt中我們有一種可以替代回調(diào)的技術(shù)。我們使用信號(hào)和槽。當(dāng)一個(gè)特定事件發(fā)生的時(shí)候,一個(gè)信號(hào)被發(fā)射。qt的窗
17、口部件有很多預(yù)定義的信號(hào),但是我們總是可以通過繼承來加入我們自己的信號(hào)。槽就是一個(gè)可以被調(diào)用處理特定信號(hào)的函數(shù)。qt的窗口部件又很多預(yù)定義的槽,但是通常的習(xí)慣是你可以加入自己的槽,這樣你就可以處理你所感興趣的信號(hào)。 信號(hào)和槽的機(jī)制是類型安全的:一個(gè)信號(hào)的簽名必須與它的接收槽的簽名相匹配。(實(shí)際上一個(gè)槽的簽名可以比它接收的信號(hào)的簽名少,因?yàn)樗梢院雎灶~外的簽名。)因?yàn)楹灻且恢碌?,編譯器就可以幫助我們檢測(cè)類型不匹配。信號(hào)和槽是寬松地聯(lián)系在一起的:一個(gè)發(fā)射信號(hào)的類不用知道也不用注意哪個(gè)槽要接收這個(gè)信號(hào)。qt的信號(hào)和槽的機(jī)制可以保證如果你把一個(gè)信號(hào)和一個(gè)槽連接起來,槽會(huì)在正確的時(shí)間使用信號(hào)的參數(shù)而被
18、調(diào)用。信號(hào)和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的:不會(huì)再有回調(diào)核心轉(zhuǎn)儲(chǔ)(core dump)。 圖 2-2 一個(gè)信號(hào)和槽連接的例子 信號(hào)與槽機(jī)制是一個(gè)函數(shù),原型如下:qobject:connect( &a, signal(funtiona(), &b, slot(funtionb() ) 這一行在兩個(gè)qt對(duì)象(直接或間接繼承qobject對(duì)象的對(duì)象)中建立了一種單向的連接。每一個(gè)qt對(duì)象都有signals(發(fā)送消息)和slots(接收消息)。所有窗口部件都是qt對(duì)象。它們繼承qwidget,而qwidget繼承qobject。該函數(shù)意思是a部件發(fā)出 funt
19、iona()消息,b部件執(zhí)行funtionb()函數(shù)。3. 黑白棋需求分析為了開發(fā)出真正滿足用戶需求的程序,尤其是游戲程序,首先必須知道用戶的需求。把用戶需求作為前提條件,來指導(dǎo)程序的開發(fā)31 黑白棋程序界面的需求通過上述網(wǎng)上常見的一些具有代表性的黑白棋程序的對(duì)比分析,現(xiàn)在一個(gè)基于界面上的用戶需求已經(jīng)基本確立。該需求包含以下幾點(diǎn):1. 作為按鈕出現(xiàn)在主界面上的:先后手選擇、單人雙人模式、悔棋和悔棋恢復(fù)、難度選擇、開始新游戲。2. 能夠直觀顯示在游戲界面上的:棋子數(shù)目顯示、顯示上步棋位置、提示下棋點(diǎn)、動(dòng)畫翻轉(zhuǎn)棋子。 3. 2黑白棋游戲規(guī)則的需求第二章中已經(jīng)介紹了黑白棋游戲的規(guī)則,主要有如下規(guī)則:
20、1兩人對(duì)弈,以輪流方式持黑子與白子。2開辟新局者持黑子,加入者持白子, 之后以輪流方式將棋子置于棋盤格子中。若無地方可下子,則跳過一回,由對(duì)方下子。3在提示的格子中,選擇一個(gè)格子下子, 當(dāng)下子的位置與離最近的同色旗子中, 若有其他棋子則中間的棋子變?yōu)榕c我方一樣顏色。4當(dāng)下滿64個(gè)棋子,棋子多者為勝。5雙方都無棋可走的其他局面,游戲結(jié)束,以子多者為勝。黑白棋游戲規(guī)則,是程序設(shè)計(jì)是需要考慮的內(nèi)部需求,該部分需求,和前面的游戲界面需求,以及下小節(jié)的其他需求,功能構(gòu)成了黑白棋程序的基本需求。 第4章 黑白棋總體設(shè)計(jì)本模塊建立在第3章需求分析基礎(chǔ)之上,把用戶的需求轉(zhuǎn)換為程序的藍(lán)圖,作為后面編碼過程中的依
21、據(jù)。4.1 程序流程圖程序所需執(zhí)行的流程見圖4-1,該圖表示出了程序執(zhí)行的流程,也基本表示出了程序的各個(gè)模塊和相互關(guān)系,后面的詳細(xì)設(shè)計(jì)和代碼實(shí)現(xiàn),就是基于本圖設(shè)計(jì)的。 圖4-1 黑白棋流程圖4.2 主要模塊簡(jiǎn)介為了實(shí)現(xiàn)黑白棋游戲的開發(fā),通過流程圖的分析,計(jì)劃采用以下幾大模塊:繪圖模塊 本模塊用來負(fù)責(zé)主界面的繪制,包括棋盤、棋子、個(gè)數(shù)統(tǒng)計(jì)、時(shí)間顯示、以及其它需要顯示的部分的繪圖。繪圖模塊的實(shí)現(xiàn),主要通過重載qt庫中自帶的繪圖函數(shù)來實(shí)現(xiàn)。初始化模塊 初始化模塊是一個(gè)函數(shù),用來負(fù)責(zé)開局時(shí)的棋盤初始化,主要負(fù)責(zé)把程序代碼中各變量值初始化。初始化函數(shù)再程序首次執(zhí)行時(shí)自動(dòng)調(diào)用,中途通過點(diǎn)擊新游戲按鍵調(diào)用。
22、雙人模塊 雙人模塊是本程序得以運(yùn)行的基礎(chǔ),本模塊通過判斷用戶鼠標(biāo)點(diǎn)擊位置,判斷出該坐標(biāo)所處棋盤中響應(yīng)位置,并通過后面的規(guī)則模塊決定能否下子,如果能下子就下己方棋子,并交換為對(duì)手走棋。單人模塊 單人模塊是基于雙人模塊的,當(dāng)玩家點(diǎn)擊棋盤并成功走棋后,把交換對(duì)手部分,變?yōu)榻粨Q至電腦走棋,電腦則通過算法模塊走出電腦認(rèn)為最佳位置,并等待玩家繼續(xù)走棋。因此,本黑白棋開發(fā)過程中,把單人模塊看成是雙人模塊的一部分來處理。規(guī)則模塊 走棋模塊是黑白棋的基礎(chǔ),它負(fù)責(zé)判斷哪些位置能走棋,并在成功走棋后,翻轉(zhuǎn)所需棋子后,并再次負(fù)責(zé)判斷出對(duì)方可走棋位置。 本模塊包括翻轉(zhuǎn)函數(shù)、以及判斷可下子位置函數(shù)。悔棋和悔棋恢復(fù)模塊 本
23、模塊通過每次走棋記錄棋譜,以便用戶能夠全局悔棋,并全局恢復(fù),但是當(dāng)悔棋過程中,用戶再次走棋,則后繼步數(shù)不能恢復(fù)。 5. 程序?qū)崿F(xiàn)通過第3章和第4章的描述,黑白棋設(shè)計(jì)思路已經(jīng)確定,現(xiàn)在要做的就是把設(shè)計(jì)結(jié)果翻譯成專用的程序設(shè)計(jì)語言所書寫的程序。編碼是對(duì)設(shè)計(jì)的進(jìn)一步具體化,本部分的質(zhì)量取決于前期設(shè)計(jì)的質(zhì)量,但是,所選設(shè)計(jì)語言的特點(diǎn)及編碼風(fēng)格也會(huì)對(duì)程序的可靠性、可讀性、可測(cè)試性和可維護(hù)性產(chǎn)生影響。5.1 界面實(shí)現(xiàn)為了增加游戲的美觀,界面采用專業(yè)繪圖工具制作出來的漂亮圖片作為程序背景和棋盤背景。本程序利用fireworks對(duì)網(wǎng)絡(luò)上的一些圖片做了修改,并作為程序背景使用。界面的顯示,是把上述背景圖作為資源
24、文件,通過重載qt庫自帶的paintevent(qpaintevent *e)函數(shù),來繪制背景棋盤。 葉子狀的是程序背景,紅色底紋的是棋盤背景。之所以不作為一個(gè)圖片保存背景,是為了便于以后棋盤改變布局位置。 在左邊有總用時(shí)和本步用時(shí)兩個(gè)小模塊,這是用qtdesigner自帶的控件繪制的,計(jì)劃用于上方走棋時(shí)間統(tǒng)計(jì)。 為了使這兩個(gè)小模塊好看些,也加上了背景,同時(shí)背景的上半部分,用來標(biāo)示黑白雙方,以及顯示雙方當(dāng)前局面棋子個(gè)數(shù),并用高亮方式,表示出當(dāng)前該哪一方走棋。背景界面設(shè)計(jì)好了,再加上常用功能鍵、其它選擇按鈕等,一個(gè)程序打開的初始界面就確定了,見圖5-1圖5-1 黑白棋主界面 重載qt庫自帶的pa
25、intevent(qpaintevent *e)函數(shù)的方法如下,首先定義用來統(tǒng)計(jì)黑白兩色棋子個(gè)數(shù),初始值為0,接著生成繪圖對(duì)象,并加載需要繪制的各個(gè)元素,然后并繪制出來,以及繪制其他相關(guān)元素。5.2 功能按鈕的實(shí)現(xiàn)用qt開發(fā)gui程序,不如mfc容易,但只要掌握了qt的方法,還是很輕松的。如圖5-1的上方部分的按鈕,可以用qtdesigner里面的控件直接繪制出來。 然而這是顯性的繪制,點(diǎn)擊該按鈕并不能直接執(zhí)行相應(yīng)的函數(shù)。而是通過信號(hào)與槽機(jī)制響應(yīng)相關(guān)函數(shù)。信號(hào)與槽的機(jī)制在2.3節(jié)中有介紹。再次我們要給新游戲按鈕與初始化函數(shù)建立聯(lián)系,即:qobject:connect(pushbutton_ne
26、w, signal(clicked(), form, slot(initialize();pushbutton_new為新游戲部件名稱,本句話意思是點(diǎn)擊新游戲按鈕,程序執(zhí)行初始化(initialize())函數(shù)。 其他按鈕已通過信號(hào)與槽機(jī)制和相關(guān)功能的函數(shù)連接起來,具體連接請(qǐng)參照附錄一主要代碼部分。本程序使用到的信號(hào)與槽。結(jié)合著相關(guān)函數(shù)介紹實(shí)現(xiàn)代碼: 本部分主要是把信號(hào)和槽進(jìn)行部件之間的連接,這部分在designer里面會(huì)自動(dòng)生成。但是自定義的槽函數(shù),要聲明稱public slots形式。本程序用到的信號(hào)槽代碼和功能如下: qobject:connect(pushbutton_new, sig
27、nal(clicked(), form, slot(initialize(),點(diǎn)擊開始按鈕,程序初始化。 qobject:connect(pushbutton_backward, signal(clicked(), form, slot(backward(),點(diǎn)擊后退按鈕,執(zhí)行后退相關(guān)函數(shù)。 qobject:connect(pushbutton_forward, signal(clicked(), form, slot(forward(),點(diǎn)擊前進(jìn)按鈕執(zhí)行前進(jìn)函數(shù) qobject:connect(checkbox_tip, signal(clicked(), form, slot(update
28、(),點(diǎn)擊tip按鈕,執(zhí)行刷新函數(shù),刷新過程中,根據(jù)該組件是否被選中,決定時(shí)候繪制提示點(diǎn)。 qobject:connect(radio_single, signal(clicked(bool), checkbox_2, slot(setenabled(bool),點(diǎn)擊單人游戲按鈕,改變?cè)摻M件狀態(tài)為選中模式,從而決定在mousepressevent(qmouseevent *e)里面執(zhí)行單人模式。 qobject:connect(radio_double, signal(clicked(bool), checkbox_2, slot(setdisabled(bool) ,點(diǎn)擊單人游戲按鈕,改變?cè)?/p>
29、組件狀態(tài)為選中模式,從而決定在mousepressevent(qmouseevent *e)里面執(zhí)行雙人模式。 qobject:connect(radio_single, signal(clicked(bool), radiobutton_lv1, slot(setenabled(bool),點(diǎn)擊單人游戲按鈕,如果該按鈕被選中,則難度選擇按鈕為可更改狀態(tài),下面兩個(gè)相同。qobject:connect(radio_single, signal(clicked(bool), radiobutton_lv2, slot(setenabled(bool)。qobject:connect(radio_s
30、ingle, signal(clicked(bool), radiobutton_lv3, slot(setenabled(bool)。qobject:connect(radio_double, signal(clicked(bool), radiobutton_lv1, slot(setdisabled(bool) 點(diǎn)擊 雙人游戲按鈕,如果該按鈕被選中,則難度選擇按鈕為不可更改狀態(tài),下面兩個(gè)相同。qobject:connect(radio_double, signal(clicked(bool), radiobutton_lv2, slot(setdisabled(bool)。qobject
31、:connect(radio_double, signal(clicked(bool), radiobutton_lv3, slot(setdisabled(bool)。qobject:connect(checkbox_2, signal(clicked(), form, slot(update(),該處選中,執(zhí)行動(dòng)畫效果。qobject:connect(radio_single, signal(clicked(), form, slot(doubletosingle(),該處選中,執(zhí)行雙人到單人模式切換函數(shù)doubletosingle(),判斷如果該電腦走棋,則電腦走一步棋。5.3主要函數(shù)從
32、程序看,這是一個(gè)二維平面圖,所以數(shù)據(jù)用二維數(shù)組類來表示,數(shù)組兩個(gè)下標(biāo)可以表示棋盤上的位置,數(shù)組元素的值代表棋格上的狀態(tài),共有五種情況,分別是0代表可下子格,1代表黑棋,-1代表黑棋,-2代表絕對(duì)不能下的位置,2代表需要判斷才知道能否下的位置。 程序首次打開,執(zhí)行initialize()函數(shù)初始化棋局,用戶可以直接走棋或者選擇單人模式等一些功能,當(dāng)用戶點(diǎn)擊棋盤某一位置時(shí),響應(yīng)mousepressevent(qmouseevent *e)函數(shù),判斷鼠標(biāo)點(diǎn)擊位置,如果能下棋則執(zhí)行onestep(int x,int y)函數(shù)在該方格內(nèi)走一步棋。并交由對(duì)方(可能是另一名玩家,或者電腦走棋。) mouse
33、pressevent(qmouseevent *e)函數(shù)的執(zhí)行過程如下:首先通過點(diǎn)擊鼠標(biāo)位置獲取點(diǎn)擊坐標(biāo),并判斷該處是否能下子,不能下子退出該函數(shù)。該位置能下子,執(zhí)行onestep(judgepos(x),judgepos(y)走一步棋。玩家走一步棋之后,如果是單人模式執(zhí)行,則交由電腦走棋。電腦走棋首先進(jìn)行難度判斷,并結(jié)合著棋局步數(shù)判斷,選擇不同的函數(shù)進(jìn)行搜索,搜索結(jié)束,電腦執(zhí)行onestep(judgepos(x),judgepos(y)走一步棋,退出該函數(shù)。在調(diào)用onestep(int x,int y)函數(shù)時(shí),程序首先通過mousepressevent(qmouseevent *e)函數(shù)獲
34、得的(x,y)坐標(biāo),在棋盤(x,y)位置放置一枚該方棋子,然后檢測(cè)周圍能翻轉(zhuǎn)的棋子并翻轉(zhuǎn)(reverse(int x,int y,int whom))、之后判斷出對(duì)方可走棋位置(canbedrop(int x,int y,int whom)),并交由對(duì)方走棋。 reverse(int x,int y,int whom)翻轉(zhuǎn)函數(shù)會(huì)對(duì)該位置的八個(gè)方向做出判斷,選擇能翻轉(zhuǎn)的棋子,并進(jìn)行翻轉(zhuǎn),為了節(jié)省篇幅,再次舉出12點(diǎn)鐘方向的翻轉(zhuǎn)過程,其他方向類似。if (y>1 && weizhixy-1.state = (-1)*whom) /
35、0; for (int k=2;k<=y;k+) if (weizhixy-k.state = 0 | weizhixy-k.state = -2 |weizhixy-k.state = 2) break; &
36、#160; if (weizhixy-k.state = whom) for (int i = 1; i<k;i+)
37、0; weizhixy-i.state = whom; &
38、#160; break; 而判斷可下子位置函數(shù)canbedrop(int x,int y,int whom)的思路和翻轉(zhuǎn)函數(shù)類似,也是進(jìn)行8方向的判斷。 為了使判斷可走棋位置的循環(huán)減少,在此增加了一個(gè)cube(int x,int y)函數(shù)的處理,黑白棋只能在有子位置的相鄰位置才可能放置棋子,開局時(shí)棋子周圍的8
39、個(gè)相鄰格子為cube狀態(tài)(2),然后每走一步棋,把該步棋周圍的8個(gè)子,和之前標(biāo)記為2和0的位置,全部標(biāo)記為2,然后進(jìn)行canbedrop(int x,int y,int whom)搜索時(shí),就只需要在標(biāo)記為2的格子內(nèi)進(jìn)行8方向判斷,并把該處位置標(biāo)記為0,等待對(duì)方下棋。 走棋行進(jìn)過程中,可隨時(shí)通過點(diǎn)擊棋盤上方的功能控制菜單,進(jìn)行悔棋(backward())、悔棋回復(fù)(forward())、單人雙人模式切換(doubletosingle())、難度選擇、顯示提示位置等功能?;谄搴突谄寤貜?fù)函數(shù),實(shí)質(zhì)上建立一個(gè)數(shù)組,記錄每步棋全盤棋子的各個(gè)位置的狀態(tài)值,并進(jìn)行悔棋和恢復(fù)。 每走一步棋,自動(dòng)調(diào)用繪圖函數(shù)(
40、paintevent(qpaintevent *e))進(jìn)行界面重繪。如果是單人模式,前面的mousepressevent(qmouseevent *e)有介紹,玩家走完會(huì)判斷,如果輪到電腦走棋,則執(zhí)行響應(yīng)的ai算法,選擇最佳走棋位置,并在該處走一步棋,交由玩家繼續(xù)走棋。ai算法分為startserch(),負(fù)責(zé)開局1-10步,middleserch()負(fù)責(zé)11-50步,50步以后直至終局由endserch()負(fù)責(zé)。 startserch()函數(shù)主要通過對(duì)程序中搜集的棋譜進(jìn)行比較,如果有該開局模式,則按棋譜走棋,沒有則自動(dòng)調(diào)用middleserch()的方法進(jìn)行搜索。 在這些算法中還會(huì)用到如下一
41、些子函數(shù):count(int x)統(tǒng)計(jì)標(biāo)記為x的一方棋子個(gè)數(shù);middlemain(int x)中期搜索函數(shù)的主要搜索過程;endmain()終局搜索函數(shù)的主要搜索過程;valuemiddle()中期搜索的綜合估值函數(shù);mobility()行動(dòng)力函數(shù);danger()危險(xiǎn)位置函數(shù)。實(shí)際游戲開發(fā)中,高質(zhì)量的ai程序,都會(huì)再加有一些其他子函數(shù)來更好的實(shí)現(xiàn)ai算法,在我的程序中,缺少這些高級(jí)算法。 游戲結(jié)束時(shí),直觀顯示雙方棋子個(gè)數(shù),由于黑白棋是靠子數(shù)多少?zèng)Q定勝負(fù),因此為了美觀我沒有加入對(duì)話框提示輸贏。此時(shí)可以點(diǎn)擊新游戲重新開局,或選擇退出。5.4 電腦戰(zhàn)術(shù)分析在這一節(jié)中將介紹計(jì)算機(jī)是如何對(duì)棋盤進(jìn)行分
42、析,然后選擇一個(gè)合理的位置進(jìn)行下棋的。5.4.1 棋盤掃描想要計(jì)算機(jī)能夠與人對(duì)弈黑白棋,對(duì)棋盤的掃描是最基本的操作。前面已經(jīng)介紹了通過cube(int x,int y)和canbedrop(int x,int y,int whom)進(jìn)行掃描的方法,對(duì)棋盤的掃描工作就比較簡(jiǎn)單了,這里就不再累述。5.4.2判斷行動(dòng)力在前面的章節(jié)分析中已經(jīng)提到,黑白棋的正確戰(zhàn)術(shù)應(yīng)該是盡量削弱對(duì)手的行動(dòng)力,讓對(duì)手全無好棋可下,同時(shí)增加自己的行動(dòng)力。那么如何能讓計(jì)算機(jī)懂得這個(gè)道理呢?這就要求計(jì)算機(jī)具有“思考”的能力。首先計(jì)算機(jī)調(diào)用檢測(cè)行動(dòng)力的函數(shù)mobility(),檢測(cè)自己的行動(dòng)力,也就是將當(dāng)前棋盤所有能落子的位置找
43、出來,然后在對(duì)這些位置逐步進(jìn)行分析。分析的過程就是先假設(shè)計(jì)算機(jī)在某個(gè)位置上落子,然后馬上再次調(diào)用檢測(cè)行動(dòng)力函數(shù),不過這次是檢測(cè)對(duì)手的行動(dòng)力。意思就是如果計(jì)算機(jī)在這里落子,看看對(duì)手的行動(dòng)力如何,如果對(duì)手的行動(dòng)力太大,對(duì)手有很多位置可以選擇,那么就不應(yīng)該在這里落子。如此對(duì)所有能落子的位置進(jìn)行檢測(cè),找出一個(gè)能讓對(duì)手行動(dòng)力變得最小的位置落子,該函數(shù)mobility()原理為對(duì)棋盤進(jìn)行搜索,找出所有標(biāo)志為0的格子的個(gè)數(shù),即為該處行動(dòng)力。該函數(shù)原型如下:int myform:mobility() int move = 0; for (
44、int i=0;i<8;i+) for (int j=0;j<8;j+) if (weizhiij.state=0) move+; return move;5.4.3選擇最佳位置落子使用了一些戰(zhàn)術(shù),使計(jì)算機(jī)能夠了解當(dāng)前棋局的情況,最終的目的讓計(jì)算機(jī)能夠選擇一個(gè)合理的位置落子。在本程序里在棋局的不同時(shí)期,所采用的選擇方法也是不同的,在程序開局時(shí),優(yōu)先選擇棋譜庫中的固定套路。 而在中期時(shí)則以多
45、種估值通過賦予權(quán)值,統(tǒng)計(jì)出綜合估值,選取最大估值位置落棋。到了后期,局面已經(jīng)完全可以窮舉,采用最大食子法,以能吃掉對(duì)手最多棋子為準(zhǔn)。 6.系統(tǒng)測(cè)試系統(tǒng)測(cè)試的目的主要在于發(fā)現(xiàn)錯(cuò)誤,找出軟件的缺陷和隱患,是確保軟件質(zhì)量的重要方法。在完成黑白棋游戲之后,分別對(duì)游戲中各個(gè)進(jìn)行了測(cè)試,主要是檢驗(yàn)該游戲在各種情況下中的功能能否實(shí)現(xiàn),是否滿足黑白棋游戲規(guī)則的走棋,從而驗(yàn)證該系統(tǒng)確實(shí)符合預(yù)訂的需求, 軟件測(cè)試就是在軟件投入運(yùn)行前,對(duì)軟件需求分析、設(shè)計(jì)規(guī)格說明和編碼的最終復(fù)查,是軟件質(zhì)量保證的關(guān)鍵步驟。早在1973年, w.hetael曾經(jīng)指出,測(cè)試是對(duì)程序或系統(tǒng)能否完成特定任務(wù)建立信心的過程。 系統(tǒng)在開發(fā)過程
46、中采用了多種措施保證軟件質(zhì)量,但是實(shí)際開發(fā)過程中還是不可避免地會(huì)產(chǎn)生差錯(cuò)。系統(tǒng)中通??赡茈[藏著錯(cuò)誤和缺陷,若將未經(jīng)周密測(cè)試的系統(tǒng)投入運(yùn)行,將會(huì)造成難以想象的后果。因此系統(tǒng)測(cè)試是管理系統(tǒng)開發(fā)過程中為保證軟件質(zhì)量必須進(jìn)行的工作。大量統(tǒng)計(jì)資料表明,系統(tǒng)測(cè)試的工作量往往占管理系統(tǒng)開發(fā)總工作量的40%以上。因此必須重視測(cè)試工作。6.1雙人模式下的測(cè)試雙人模式是游戲進(jìn)行的基礎(chǔ),因此此部分的測(cè)試較多,且具有代表性。6.1.1 悔棋和悔棋恢復(fù)測(cè)試正常情況下,黑白棋雙人模式中悔棋可以悔棋至初始棋局,并能恢復(fù)至玩家最后一次落子的棋局。在悔棋中途,如果玩家改變落子,則只能恢復(fù)至該處,不能也不應(yīng)該繼續(xù)回復(fù)原本沒有恢復(fù)
47、的棋步。6.1.2 pass情況下的悔棋恢復(fù)pass情況下的悔棋恢復(fù),就要先設(shè)計(jì)出一個(gè)有pass情況的棋局出來,然后選擇悔棋,看是否正?;谄?。6.2 單人模式下的測(cè)試單人模式是雙人模式的一個(gè)特殊情況,因此有些測(cè)試和雙人模式相同,不用反復(fù)測(cè)試,只需測(cè)試對(duì)方走棋是否符合規(guī)則就行。 備注,單人模式測(cè)試由于是電腦配合走棋,因此某些環(huán)境不容易還原,在程序開發(fā)中進(jìn)行過測(cè)試,并將測(cè)試結(jié)果統(tǒng)計(jì)如下,在此就另外不附圖說明。6.2.1 pass情況的測(cè)試由于單人模式需要進(jìn)行思考,所以中途可能會(huì)造成遇到pass情況,致使該步走棋方發(fā)生錯(cuò)誤,比如本來該白棋走的結(jié)果卻是黑棋走。經(jīng)過測(cè)試,測(cè)試失敗。 查找原因,每次電腦思
48、考都是固定套用每次落子切換走棋方的方法,致使一方pass,本不該切換走棋方的,仍然切換的錯(cuò)誤情況,后經(jīng)改進(jìn)為每步棋由哪方走棋的數(shù)組記錄,錯(cuò)誤得以解決。6.2.2 游戲正常測(cè)試本測(cè)試,測(cè)試電腦ai是否能選擇正確位置走棋,結(jié)果發(fā)現(xiàn)在某些未知情況下,電腦會(huì)在本不能下子處下子。 測(cè)試失敗。 查找原因,暫時(shí)為查明,但該bug位于ai算法函數(shù)中,這點(diǎn)是確定的,因此程序ai算法部分,有待改進(jìn)。6.2.3 悔棋測(cè)試由于單人模式每次需要同時(shí)悔棋兩步,因此也要單獨(dú)測(cè)試,經(jīng)過測(cè)試,符合要求,測(cè)試成功!6.3 綜合測(cè)試報(bào)告從以上的測(cè)試方法和測(cè)試結(jié)果可以看出,該游戲的在雙人模式下能完全正確的運(yùn)行,與當(dāng)初的預(yù)想一致?;?/p>
49、上實(shí)現(xiàn)了需求分析和系統(tǒng)設(shè)計(jì)中所提到的所有功能(計(jì)時(shí)功能暫未開發(fā))。單人模式下存在一處bug,但影響到程序的可執(zhí)行性,應(yīng)該得到修正。7. 總結(jié)和展望7.1 總結(jié)本程序能以友好的界面運(yùn)行于windows系統(tǒng)、linux系統(tǒng)的兩大桌面環(huán)境(gnome和kde)、以及mac系統(tǒng)(mac系統(tǒng)未經(jīng)測(cè)試,官方聲明說可以)。本程序可以實(shí)現(xiàn)雙人對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)、全局棋盤悔棋等黑白棋功能,界面友好。 雖然作為畢業(yè)設(shè)計(jì)的部分本設(shè)計(jì)已經(jīng)接近尾聲,但作為我的一個(gè)程序它僅僅是一個(gè)開始,本程序如果作為一個(gè)可發(fā)行版,還有以下幾部分需要完善:1. 加入計(jì)時(shí)功能 2.增加先后手選擇 3.完善ai算法。 對(duì)于計(jì)時(shí)功能和先后手選擇,很
50、容易實(shí)現(xiàn)。但考慮到實(shí)際應(yīng)用中這兩個(gè)也不是黑白棋必須的功能,就把時(shí)間主要放在了ai的開發(fā),而沒有完善這個(gè)細(xì)節(jié)。我們專業(yè)并未開設(shè)過與人工智能相關(guān)的課程,但由于我對(duì)此感興趣,在論文選題時(shí)毅然選擇了這個(gè)挑戰(zhàn)非常大的關(guān)于人工智能的題目,由于我自學(xué)能力和時(shí)間有限,現(xiàn)在的黑白棋ai部分還處于初級(jí)階段,但我會(huì)堅(jiān)持不懈的努力,將黑白棋程序不斷完善。7.2展望計(jì)算機(jī)下棋是近年來人工智能領(lǐng)域的一個(gè)研究熱點(diǎn),許多新的技術(shù)層出不窮,世界級(jí)的棋類大師被計(jì)算機(jī)打敗的例子屢見不鮮,隨著人工智能在計(jì)算機(jī)中的廣泛應(yīng)用,人們對(duì)計(jì)算機(jī)的棋力提出了更高的要求。 人工智能下棋技術(shù)經(jīng)過十余年的發(fā)展,取得了很多非常優(yōu)秀的研究成果。但無論是什
51、么樣的算法,計(jì)算機(jī)運(yùn)算的速度都是一個(gè)不可回避的問題,深藍(lán)雖然戰(zhàn)勝了世界國(guó)際象棋棋王卡斯帕羅夫,為了提高深藍(lán)的下棋速度,所耗費(fèi)的資源也是非常大的。那么提高算法的精確度,避免無謂的搜索是計(jì)算機(jī)下棋技術(shù)下一個(gè)需要解決的問題。 就像第一章提到的那樣,人工智能技術(shù)在不斷的發(fā)展、不斷前進(jìn),那么是否會(huì)有一天計(jì)算機(jī)的智慧超越人類?那時(shí)人類會(huì)處于怎樣的地位?會(huì)像電影里演的那樣電腦控制了地球,而人類成為奴隸嗎?這一切都不得而知,答案就由未來幾十年的計(jì)算機(jī)工程師來揭開。致謝必須感謝老師對(duì)我學(xué)習(xí)的支持,精神的支持。沒有他們的汗水,我是無法完成本科的學(xué)業(yè)的。感謝我的指導(dǎo)老師:張、劉老師。劉老師嚴(yán)謹(jǐn)求實(shí)、謙遜和藹、平易近人、處處為學(xué)生著想,令我敬佩。如果沒老師們的悉心指導(dǎo)也不會(huì)寫出本程序,更不會(huì)學(xué)到linux的編程和相關(guān)知識(shí)。我所取得的每一點(diǎn)進(jìn)步都包含了張老師的心血。 感謝四年來教我知識(shí)的其他老師,在即將完成學(xué)業(yè)的時(shí)刻,我向所有教過我的老師表示衷心的感謝和崇高的敬意。 感謝同組的同學(xué),雖然我們的畢業(yè)設(shè)計(jì)是彼此獨(dú)立開發(fā),但在畢業(yè)設(shè)計(jì)期間,經(jīng)常和他一起討論,相處的很融洽。 感謝所有幫助過我的其他人。四年的本科求學(xué)生涯使我完成了學(xué)士論文課題的研究工作和本文的撰寫工作,在這段期間得到了很多人的關(guān)懷和幫助,沒有他們的關(guān)懷和幫助很難想象能順
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年技術(shù)合同違約責(zé)任
- 2024年快速消費(fèi)品訂購(gòu)合同
- 04年軟件開發(fā)與技術(shù)轉(zhuǎn)讓合同
- 2024年房產(chǎn)交易安全保障協(xié)議
- 如何申請(qǐng)勞動(dòng)合同仲裁(范文格式7篇)
- 學(xué)生會(huì)網(wǎng)絡(luò)技術(shù)部工作計(jì)劃范文(4篇)
- 《礦渣粒徑對(duì)磷酸鉀鎂水泥水化性能的影響》
- 衛(wèi)生院護(hù)理年度工作計(jì)劃(3篇)
- 《基于數(shù)據(jù)交換的電力交易服務(wù)平臺(tái)的實(shí)現(xiàn)》
- 《數(shù)據(jù)中心三維可視化運(yùn)行服務(wù)平臺(tái)編譯器的設(shè)計(jì)與實(shí)現(xiàn)》
- 【初中化學(xué)】二氧化碳的實(shí)驗(yàn)室制取課件-2024-2025學(xué)年九年級(jí)化學(xué)人教版上冊(cè)
- 2024年湖北省公務(wù)員考試《行測(cè)》真題及答案解析
- 第4章《一元一次方程》-2024-2025學(xué)年七年級(jí)數(shù)學(xué)上冊(cè)單元測(cè)試卷(蘇科版2024新教材)
- DB3502T 148-2024中小型水庫生產(chǎn)運(yùn)行標(biāo)準(zhǔn)化管理規(guī)程
- 公司組織機(jī)構(gòu)管理制度
- 預(yù)習(xí)-21《蟬》導(dǎo)學(xué)案
- 四年級(jí)數(shù)學(xué)上冊(cè) 第4章《運(yùn)算律》單元測(cè)評(píng)必刷卷(北師大版)
- 期中測(cè)試卷(試題)-2024-2025學(xué)年數(shù)學(xué)五年級(jí)上冊(cè)北師大版
- GB/T 44672-2024體外診斷醫(yī)療器械建立校準(zhǔn)品和人體樣品賦值計(jì)量溯源性的國(guó)際一致化方案的要求
- 新人教版七年級(jí)上冊(cè)生物全冊(cè)知識(shí)點(diǎn)(期末復(fù)習(xí)用)
- 2023烏魯木齊法院書記員真題
評(píng)論
0/150
提交評(píng)論