基于QT的俄羅斯方塊游戲的設(shè)計與實現(xiàn)(論文修改版)_第1頁
基于QT的俄羅斯方塊游戲的設(shè)計與實現(xiàn)(論文修改版)_第2頁
基于QT的俄羅斯方塊游戲的設(shè)計與實現(xiàn)(論文修改版)_第3頁
基于QT的俄羅斯方塊游戲的設(shè)計與實現(xiàn)(論文修改版)_第4頁
基于QT的俄羅斯方塊游戲的設(shè)計與實現(xiàn)(論文修改版)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)作者姓名作者姓名 指指導(dǎo)導(dǎo)教教師師所學(xué)所學(xué)專業(yè)專業(yè)計算機科學(xué)與技術(shù)班班級級 08 計 2所屬院系所屬院系 信息學(xué)院學(xué)學(xué)習(xí)習(xí)年限年限2008 年年 9月至月至 2012 年年 7 月月二 一二 年七 月學(xué)號:學(xué)號:20088402052008840205本 科 畢 業(yè) 論 文(設(shè) 計)目目 錄錄內(nèi)容提要 .I1引言 .11.1 游戲的歷史 .11.2 游戲的組成要素 .21.2.1 行為模式 .21.2.2 條件規(guī)則 .21.2.3 娛樂身心 .21.2.4 輸贏 .31.2.5 小結(jié) .32. 可行性研究 .32.1 設(shè)計目的 .32.2 可行性研究前提 .32

2、.2.1 基本需求 .32.2.2 主要開發(fā)目標(biāo) .32.2.3 條件假定和限制 .32.2.4 方法及步驟 .42.3 可行性分析 .42.3.1 管理可行性 .42.3.2 經(jīng)濟可行性 .42.3.3 技術(shù)可行性 .42.3.4 社會可行性 .42.4 結(jié)論 .43需求分析 .53.1 引言 .53.2 游戲需求 .53.3 游戲設(shè)計的必要性 .54. 游戲的基本功能 .54.1 方塊類定義函數(shù) .64.2 程序核心函數(shù) .75程序主要功能設(shè)計及按鍵事件的控制 .75.1 建立工程 .75.2 添加定時器和開始按鈕 .75.3 添加暫停和重新開始按鈕,完成基本的控制功能 .95.4 改變顏

3、色和給方塊添加圖片 .95.5 是否顯示背景網(wǎng)格和下一個要出現(xiàn)的方塊 .105.6 添加向下按鈕步數(shù)設(shè)置 .115.7 添加方塊 .115.8 設(shè)置旋轉(zhuǎn)游戲區(qū) .115.9 程序設(shè)計思想流程圖.126關(guān)鍵技術(shù)和難題解決 .126.1 游戲?qū)崿F(xiàn)的核心方法 .126.2 游戲是實現(xiàn)顯示現(xiàn)在和已有的圖形的方法 .126.3 游戲是判斷方塊已經(jīng)重合的方法 .136.4 游戲消行的方法 .136.5 對于改變圖形后越界或和別的圖形重合的處理方法 .146.6 按鍵事件 .147游戲測試 .157.1 游戲測試 .157.2 游戲性能分析 .15結(jié)語 .17致謝 .18參考文獻 .19ABSTRACT .

4、20IQT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)學(xué)生姓名:樊超指導(dǎo)教師:張永奎 朱君亮 劉忠寶內(nèi)容提要 俄羅斯方塊是個老幼皆宜的小游戲,它實現(xiàn)由四塊正方形的色塊組成,然后存儲在一個數(shù)組的四個元素中,計算機隨機產(chǎn)生不同七種類型的方塊,根據(jù)計算機定時器控制它在一定的時間不停的產(chǎn)生,用戶根據(jù)鍵盤的四個方向鍵控制翻轉(zhuǎn)、向左、向右和向下操作, (用信號和槽函數(shù)的關(guān)聯(lián)來實現(xiàn)對按鍵事件的控制)。然后程序根據(jù)這七種方塊堆疊成各種不同的模型。Qt 是諾基亞開發(fā)的一個跨平臺的C+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的所用功能。論文描述了游戲的歷史,開發(fā)此游戲的環(huán)境,游戲開發(fā)的意義。遵

5、循軟件工程的知識,從軟件問題定義開始,接著進行可行性研究、需求分析、概要設(shè)計、詳細設(shè)計,整個開發(fā)過程貫穿軟件工程的知識體系。本設(shè)計基于用 QT 這種流行的軟件制作大眾喜愛的俄羅斯方塊游戲,以 QT+Creator 為開發(fā)語言,使用 C+和 QT 庫來進行游戲的設(shè)計與實現(xiàn)。采用信號和槽函數(shù)的關(guān)聯(lián)來實現(xiàn)對按鍵事件的控制,實現(xiàn)鍵盤的控制。需要解決的難題是方塊的移動和消行的方法,解決的方法是用判斷是否重合的方法來決定方塊的移動,用讓已滿的行和它上面的所有的行均等于其上面的一行來實現(xiàn)消行。最終實現(xiàn)了游戲功能和主要的控制功能,具有一定的實用和推廣價值。關(guān)鍵詞: QT 定時器 信號 槽函數(shù) 隨機函數(shù) 山西大

6、學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)11引言引言在現(xiàn)今電子信息高速發(fā)展的時代,電子游戲已經(jīng)深入人們的日常生活,成為老少皆宜的娛樂方式。俄羅斯方塊是一款風(fēng)靡全球的電視游戲機和掌上游戲機游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人 Alex Pajitnov 制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在 PC 機上,而我國的用戶都是通過紅白機了解、喜歡上它的?,F(xiàn)在 QQ 等游戲平臺又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對一般用戶來說,它的規(guī)則簡單,容

7、易上手,且游戲過程變化無窮,而在游戲平臺上的對戰(zhàn)模式更增加了它的娛樂性和挑戰(zhàn)性,使用戶既能感受到游戲中的樂趣,也給用戶提供了一個展現(xiàn)自己高超技藝的場所。俄羅斯方塊游戲可以說是隨計算機的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲, 深受廣大玩家喜愛。這個游戲有的簡單, 有的復(fù)雜, 但其根本原理是一樣的都是對運動的方塊進行組合, 來訓(xùn)練玩家的反應(yīng)能力。談到游戲軟件, 大多數(shù)人都認(rèn)為其神妙莫測, 高不可及。而一般游戲軟件也確實具有很高的技術(shù)難度, 隨著開發(fā)工具及軟件開發(fā)方法學(xué)的不斷發(fā)展, 動手開發(fā)游戲也不是十分困難的。俄羅斯方塊游戲是一種古老而又有趣的游戲, 游戲軟件不計其數(shù), 網(wǎng)上就有好多關(guān)于實

8、現(xiàn)的復(fù)雜算法和設(shè)計, 其難度讓一般初學(xué)者望而卻步。本文利用數(shù)組作為方塊的數(shù)據(jù)結(jié)構(gòu),用 QT 來實現(xiàn)這款游戲的制作, 對初學(xué)者可仿此開發(fā)類似游戲, 并了解游戲軟件的設(shè)計與開發(fā)過程。 1.1 游戲的歷史游戲開發(fā)至今已經(jīng)有 30 多年,在這個短暫的時期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。真正的電子游戲機產(chǎn)生于 20 世紀(jì) 70 年代。1971 年,麻省理工學(xué)院的學(xué)生 Nolan Bushnell 設(shè)計了世界上的第一個業(yè)務(wù)用游戲機(俗名街機) ,叫做電腦空間 。這臺游戲機用一臺黑白電視機作為顯示屏,用一個控制柄作為操縱器,不過由于市場因素這款游戲以失敗告終。但是最后他在電

9、子游戲的發(fā)展上取得了非凡的成就。上面介紹的是專用機游戲的歷史,而最早的電腦游戲可以追溯到 1972 年,一個叫 Crowther 的工程師用當(dāng)時最流行的主機DEC 公司的 PDP10 編寫一段簡單的 FORTRAN 程序。在這個程序里,Crowther 設(shè)計了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開陷阱。這個程序被公認(rèn)為是最早的電腦游戲程序。QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)21989 年,BroderBund 公司的設(shè)計師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說一千零一夜在Apple 平臺上制作了一部動作冒險相結(jié)合的電腦游戲波斯王子。這個游戲獲得了第一作,它代表了當(dāng)時電腦技術(shù)的最

10、高水平。1986 年,任天堂公司發(fā)售了一款真正的游戲巨作超級馬里奧。20 世紀(jì) 80 年代 IBM PC 兼容機的出現(xiàn)打破了 Apple 公司的壟斷地位。到了 20 世紀(jì) 90 年代,游戲業(yè)才真正成熟起來,成為了一種產(chǎn)業(yè)。由于 PC 機價格非常低而且硬件速度越來越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。1.2 游戲的組成要素“游戲”,最簡單的定義,就是一種供人們娛樂休閑的快樂元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下 4 個要素。1.2.1 行為模式行為模式: “游戲”最簡單的要素就是游戲有特

11、定的流程模式,這種流程模式貫穿于整個游戲的行為,用戶必須依照它的模式流程來執(zhí)行。倘若一種游戲沒有了特定的行為模式,那么就沒有執(zhí)行的行為;在沒有執(zhí)行的行為之后,這個游戲也玩不下去了。舉個例子來說,如果猜拳游戲沒有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡單,一定要有特定的行為模式。1.2.2 條件規(guī)則條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡單來說,這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種

12、簡單的球賽,打球的英文解釋可以用 PLAY GAME 來加以說明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就會“犯規(guī)”。所以不管是什么游戲,它都會具備一組規(guī)則條件,在游戲進行的時候才會有足夠的公平性。1.2.3 娛樂身心娛樂身心:一種游戲所帶來的娛樂性,關(guān)鍵就在于為玩家所帶來的刺激感,這也是游戲的精華所在。簡單來說,不管是很多人玩的游戲,還是一個人玩的單機游戲,游戲本身就會存在它的娛樂和刺激性,使得山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)3玩家們想要去玩它。1.2.4 輸贏輸贏:其實針對游戲而言,輸贏是所有游戲的最終目的。一個沒

13、有輸贏的游戲,也就沒有了它存在的意義,如同我們常常接觸到的猜拳游戲,說穿了最終目的就是為了分出勝負而己。1.2.5 小結(jié)一般而言,游戲又可以分為動態(tài)和靜態(tài)兩種形態(tài)。動態(tài)的游戲必須配合肢體動作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動態(tài)或是靜態(tài)游戲,只要具備上述 4項組成要素,都可以將它稱為“游戲”。雖然這個游戲已有,我做它的主要原因就是這個游戲風(fēng)靡全球,老少皆知,我從小也玩這個游戲,一直好奇究竟是通過怎樣的一個程序?qū)崿F(xiàn)的,所以我選擇以此游戲作為我的畢業(yè)設(shè)計很有意義。2. 可行性研究2.1 設(shè)計目的綜合運用在校期間所學(xué)理論知識和技能,設(shè)計開發(fā)俄羅斯方塊,使自己熟悉應(yīng)

14、用系統(tǒng)的開發(fā)過程,培養(yǎng)獨立思考能力,檢驗學(xué)習(xí)效果和動手能力,提高工程實踐能力,為將來實際工作打下堅實的基礎(chǔ)。2.2 可行性研究前提2.2.1 基本需求基本需求:系統(tǒng)開發(fā)的總體任務(wù)是實現(xiàn)游戲的可操作性、美觀性、及時性。開發(fā)過程遵循軟件工程規(guī)范,可采用結(jié)構(gòu)化或面向?qū)ο蠓治鲈O(shè)計方法。主要實現(xiàn)對游戲程序的開發(fā)和 UI 界面的實現(xiàn),對游戲中的圖形圖像進行鍵盤控制。游戲者可以通過上下左右鍵來對游戲進行操作。2.2.2 主要開發(fā)目標(biāo)主要開發(fā)目標(biāo):采用結(jié)構(gòu)化設(shè)計方法,開發(fā)出一個可操作性、美觀性、及時性的游戲,主要實現(xiàn)對游戲程序的開發(fā)和 UI 界面的實現(xiàn),并通過此次軟件開發(fā)過程全面提高自身的綜合素質(zhì)。2.2.3

15、 條件假定和限制條件假定和限制:由于本軟件目前是我的初次版本,可能還存在一些問題。如果該軟件提高版本,QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)4本軟件需要根據(jù)游戲者的要求進行進一步的修改。2.2.4 方法及步驟可行性研究所采用的方法和步驟:通過研究分析俄羅斯方塊所具備的能力及實現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實現(xiàn)一個初級游戲軟件。評價尺度:由于本軟件是一個初級產(chǎn)品,對其要求不是太苛刻,所以能夠達到俄羅斯游戲的一般功能即可。2.3 可行性分析2.3.1 管理可行性該游戲軟件為首次開發(fā),目的只為提高工作自身素質(zhì)和檢查自學(xué) QT 和 C 語言的

16、效果,所有功能均根據(jù)基本需求所做。便于管理,所以在這方面是可以實現(xiàn)的。2.3.2 經(jīng)濟可行性由于本游戲的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行的電腦便可,所以不用考慮到經(jīng)濟問題。2.3.3 技術(shù)可行性可用與本游戲的編程語言有 C 語言,C+,Java,Delphi 等,考慮到用于編寫程序的困難度,和對語言的了解程度,選擇 C 語言和 QT 庫作為編程語言。需要對變量定義、變量初始化、界面初始化、游戲初始化、然后進入游戲、處理游戲過程中的各種操作。2.3.4 社會可行性本游戲的開發(fā)作為畢業(yè)課程設(shè)計以鞏固

17、先前所學(xué)的知識,以個人為單位,僅供個人平常娛樂所用,無須考慮有可能造成的社會影響,不用考慮到法律、版權(quán)等的社會因素,所以在這方面是完全可行的。2.4 結(jié)論綜上所述,本游戲軟件的技術(shù)成熟、完備。各方面均無重大問題,因此本游戲軟件可開始著手編寫。山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)53需求分析3.1 引言對軟件需求完全理解對于軟件開發(fā)工作的成功是至關(guān)重要的,需求說明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過程,有益于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控制與管理,便于采用工程方法開發(fā)軟件,提高軟件的質(zhì)量,便于開發(fā)人員、維護人員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件

18、功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關(guān)。3.2 游戲需求游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨特的魅力在全世界的娛樂領(lǐng)域占據(jù)主流位置,我們在承認(rèn)廣大娛樂網(wǎng)民的選擇空間狹小的同時,也必須明確的一點就是游戲本身所具有的強大的吸引力。游戲“俄羅斯方塊” ,俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分,如果未被消除的方塊堆放的高度超過場地所規(guī)定的最大高度,則游戲結(jié)束。 規(guī)則簡單容易上手。游戲速度節(jié)奏快,畫面清晰可愛。總是排在受玩家最歡迎游戲排名前 5 位的連連看,休閑、趣味,且不分男女老少、工薪白領(lǐng),在娛樂的同時還可以訓(xùn)練

19、眼明手快及增強邏輯判斷能力。是一款適合大眾的經(jīng)典小游戲。小游戲制作的目的是滿足了人們休閑的需要,在緊張工作之余休閑類的小游戲能夠給人帶來最大程度的放松,也可以增進人們之間的交流,溝通,通過游戲還可以認(rèn)識更多的朋友。3.3 游戲設(shè)計的必要性大多數(shù)的此類游戲都是用 JAVA 或其他方法來設(shè)計的,本設(shè)計采用 QT+Creator 來實現(xiàn),與之前的設(shè)計相比,界面更加的美觀,設(shè)計思想更加簡單,代碼更加簡潔高效。4. 游戲的基本功能參考 QT 庫中基本的 Tetrix 實例,設(shè)計自己的方塊類程序。在 QT 中新建一個工程,向工程中添加新的普通文本文件。將設(shè)計好的 4 個文件添加復(fù)制到工程文件夾下并加入到工

20、程中。在主函數(shù)中新建一個類的對象,用參數(shù)設(shè)置好方塊的下移速度,就可以成QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)6功運行出一個基本的游戲程序。4.1 方塊類定義函數(shù)方塊和地圖數(shù)據(jù)信息是游戲中最基本的功能模塊。這個類提供方塊圖形 ,圖形在 4*4 區(qū)域的位置信息 ,對圖形進行旋轉(zhuǎn)變化功能。Myitem.h Myitem.cpp 這兩個文件是方塊類的定義文件,用來提供隨機產(chǎn)生的方塊。定義 7 個四維數(shù)組 unsigned char item4*4,數(shù)組的第一維表示七種不同形態(tài)的方塊,第二維代表方塊的四種不同翻轉(zhuǎn)狀態(tài)。數(shù)組的第三維和第四維代表某一種形態(tài)的方塊的某一狀態(tài)。然后用代碼實現(xiàn)下列功能:(1)每次執(zhí)行首

21、先為隨機數(shù)產(chǎn)生不同的初值。(2)隨機選取一個圖形隨機產(chǎn)生一個數(shù)隨機數(shù)一字形Z 字形反 Z 形7 字形反 7 形倒 T形田字型 圖 4.1 隨機產(chǎn)生方塊圖(3)當(dāng)前圖形在其 4*4 網(wǎng)格中的位置信息(4)改變圖形形狀定義一個 4x4 方陣,共 16 個小格。用“0”和“1”來表示每個方格是繪制還是空白,由此可以組合出多種圖形,如圖所示:山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)7 圖 4.2 方塊圖4.2 程序核心函數(shù)Gamearea.h Gamearea.cpp 是游戲區(qū)域類的定義文件,實現(xiàn)了游戲的所有功能。其中包括了核心功能控制函數(shù),設(shè)置顏色參數(shù),設(shè)置聲音參數(shù),設(shè)置游戲區(qū)域旋轉(zhuǎn)函數(shù)和其他功能函數(shù)等

22、。具體功能的實現(xiàn)在下一章節(jié)中闡述。5程序主要功能設(shè)計及按鍵事件的控制5.1 建立工程(1)首先建立工程 Qt4 Gui Application,這里命名為 Tetris,選用 QWidget 作為 Base class 。(2)然后將 myitem.cpp, myitem.h ,gamearea.cpp, gamearea.h 四個文件復(fù)制到工程文件夾下并添加到工程中。(3)在 widget.h 中添加#include gamearea.h的頭文件包含。并在下面的 private 中聲明一個游戲類對象 GameArea *gameArea;(4)在 widget.cpp 的構(gòu)造函數(shù)里添加語句。

23、Widget:Widget(QWidget *parent) :QWidget(parent),ui(new Ui:Widget)ui-setupUi(this);this-resize(800,500);this-gameArea = new GameArea(this);這里重新設(shè)定了主窗口大小,并在主窗口上新建了一個游戲區(qū)域?qū)ο蟆?.2 添加定時器和開始按鈕(1)在 widget.h 里的 private 中添加定時器對象和分?jǐn)?shù)變量的聲明。QTimer *timer;int score;在 public 中添加顯示分?jǐn)?shù)函數(shù)的聲明。void doScore(int);添加槽函數(shù)的聲明。QT

24、 俄羅斯方塊游戲的設(shè)計與實現(xiàn)8private slots:void timer_upDate();(2)在 widget.cpp 文件中的構(gòu)造函數(shù)里添加下面的語句:this-timer = new QTimer(this);connect(this-timer,SIGNAL(timeout(),this,SLOT(timer_upDate();score =0;定義了定時器并進行了信號和槽函數(shù)的關(guān)聯(lián),初始化分?jǐn)?shù)為 0;(3)然后在下面定義兩個函數(shù)。void Widget:timer_upDate() /定時器溢出處理this-gameArea-moveOneStep(); /先移動一步,這時并

25、沒有顯示出來if(this-gameArea-isMoveEnd() /如果無法移動,到底了或結(jié)束了if(this-gameArea-isGame_Over() /如果是結(jié)束了this-timer-stop(); /停止計時QMessageBox:warning(this,tr(warning),tr(GameOver!),QMessageBox:Yes);/彈出對話框this-score =0; /清空分?jǐn)?shù)this-gameArea-init_Game(); /重新開始游戲this-gameArea-gameStart();this-timer-start(500);else /如果是移動到

26、底了this-gameArea-nextItem(); /出現(xiàn)下一個圖形int num = this-gameArea-getFullRowNum(); /獲得已滿的行數(shù)this-doScore(num); /顯示分?jǐn)?shù)this-gameArea-gameStart(); /繼續(xù)游戲else /如果沒有到底this-gameArea-do_MoveNext(); /顯示方塊下移一步后的界面void Widget:doScore(int num) /顯示分?jǐn)?shù)score += num*100;this-ui-label_2-setText(tr(%1).arg(score);(4)在設(shè)計器中向主窗口

27、上添加兩個標(biāo)簽 label 和 label_2,其中 label 寫上“你的分?jǐn)?shù)是:”,山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)9label_2 寫上“0”;然后再添加一個開始按鈕。(5)然后右擊“開始游戲”按鈕,選擇其單擊事件的槽函數(shù)。更改如下。void Widget:on_pushButton_clicked() /開始按鈕this-gameArea-init_Game(); /第一次進入游戲時進行的初始化this-gameArea-gameStart(); /開始游戲this-timer-start(500); /開啟定時器this-gameArea-setFocus(); /讓游戲區(qū)域獲得

28、焦點,這樣才能響應(yīng)鍵盤5.3 添加暫停和重新開始按鈕,完成基本的控制功能(1)在主窗口上添加“暫停游戲”和“重新開始”兩個按鈕。在“暫停游戲”按鈕的屬中將 checkable 選中。(2)分別進入兩個按鈕的單擊事件槽函數(shù)。void Widget:on_pushButton_2_clicked() /暫停按鈕if(this-ui-pushButton_2-isChecked()this-timer-stop();this-ui-pushButton_2-setText(tr(取消暫停);elsethis-timer-start(500);this-ui-pushButton_2-setText(

29、tr(暫停游戲);this-gameArea-setFocus();void Widget:on_pushButton_3_clicked() /重新開始this-timer-stop();this-on_pushButton_clicked();(3)在 main.cpp 中添加語句,讓程序中可以使用中文。添加#include 的頭文件包含。在 main()函數(shù)里添加 QTextCodec:setCodecForTr(QTextCodec:codecForLocale();語句。5.4 改變顏色和給方塊添加圖片(1)添加“更改顏色”按鈕和“方塊貼圖”按鈕。(2)更改其單擊事件槽函數(shù)。如下。v

30、oid Widget:on_pushButton_4_clicked() /改變顏色QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)10this-gameArea-setGameAreaColor(QColor(255,255,0,qrand()%255);/更改游戲區(qū)域背景顏色this-gameArea-setBoxBrushColor(QColor(0,255,0,qrand()%255);/更改小方塊背景顏色this-gameArea-setBoxPenColor(QColor(0,0,0,qrand()%255);/更改小方塊邊框顏色this-gameArea-draw_gameArea();/更新游

31、戲區(qū)域this-gameArea-setFocus();void Widget:on_pushButton_5_clicked() /方塊貼圖this-gameArea-set_draw_box_picture(true);/確認(rèn)使用方塊背景圖片this-gameArea-setBoxPicture(box.gif);/添加方塊背景圖片this-gameArea-draw_gameArea();/更新顯示區(qū)域this-gameArea-setFocus();(3)運行效果如下。點擊“改變背景”按鈕后,游戲區(qū)域背景,方塊的填充顏色和邊框顏色都改變了。5.5 是否顯示背景網(wǎng)格和下一個要出現(xiàn)的方塊(

32、1)添加“網(wǎng)格顯示”按鈕和“方塊提示”按鈕。并將它們屬性中的 checkable 選中(2)修改它們的單擊事件槽函數(shù)。void Widget:on_pushButton_6_clicked() /網(wǎng)格顯示if(this-ui-pushButton_6-isChecked()this-gameArea-setDrawGrid(false);elsethis-gameArea-setDrawGrid(true);this-gameArea-draw_gameArea();this-gameArea-setFocus();void Widget:on_pushButton_7_clicked() /

33、方塊提示if(this-ui-pushButton_7-isChecked()山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)11this-gameArea-setDrawNextItem(false);elsethis-gameArea-setDrawNextItem(true);this-gameArea-draw_gameArea();this-gameArea-setFocus();5.6 添加向下按鈕步數(shù)設(shè)置(1)添加“是否墜落”按鈕,并將其屬性中的 checkable 選中。(2)更改其單擊事件槽函數(shù)。void Widget:on_pushButton_9_clicked() /是否墜落if(

34、this-ui-pushButton_9-isChecked()this-gameArea-setKey_Down_Move_oneStep(true);/按一下向下方向鍵,下移一步elsethis-gameArea-setKey_Down_Move_oneStep(false);/按一下向下方向鍵,移動到底this-gameArea-setFocus();5.7 添加方塊(1)添加“添加方塊”按鈕。(2)修改其單擊事件槽函數(shù)。void Widget:on_pushButton_10_clicked() /添加方塊this-gameArea-init_Game();/清空游戲區(qū)域this-ga

35、meArea-setbox(10,4);this-gameArea-setbox(10,5);this-gameArea-setbox(10,6);/在第 10 行第 4,5,6 列添加三個方塊this-gameArea-gameStart();/重新開始游戲this-gameArea-draw_gameArea();this-gameArea-setFocus();QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)125.8 設(shè)置旋轉(zhuǎn)游戲區(qū)(1)添加“旋轉(zhuǎn)游戲”按鈕。(2)修改其單擊事件槽函數(shù)。void Widget:on_pushButton_11_clicked() /旋轉(zhuǎn)游戲this-gameArea-

36、setRotate(true);/開啟旋轉(zhuǎn)this-gameArea-setGameAreaPixOrigin(100,200);/設(shè)置游戲區(qū)域新的坐標(biāo)原點this-gameArea-setGameAreaPix(-100,-200);/設(shè)置游戲區(qū)域的位置this-gameArea-setRotateAngle(qrand()%360);/旋轉(zhuǎn)度數(shù)this-gameArea-draw_gameArea();this-gameArea-setFocus();5.9 程序設(shè)計思想流程圖 開始游戲 定時器溢出或有鍵盤事件 如果可以移動 先嘗試移動一步,此時并不是真正的移動 移動一步 越界或圖形重合

37、是 是否已經(jīng)結(jié)束游戲 否保存現(xiàn)在的游戲界面,并清除滿行顯示下一個方塊 結(jié)束游戲 圖 5.9 設(shè)計實現(xiàn)流程山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)136關(guān)鍵技術(shù)和難題解決6.1 游戲?qū)崿F(xiàn)的核心方法利用了數(shù)組對整個游戲區(qū)域進行存儲。6.2 游戲是實現(xiàn)顯示現(xiàn)在和已有的圖形的方法利用了兩個數(shù)組,方塊每移動一步,都對整個數(shù)組進行一次備份。6.3 游戲是判斷方塊已經(jīng)重合的方法先嘗試讓方塊移動一步,判斷其是否與其他圖形重合,如果不重合就移動。如果重合了,則執(zhí)行其他操作。代碼如下:for(int i=item_endRow;i=0;i-) /是否跟已有的圖形重合 for(int j=3;j=0;j-) if(*(

38、copyMap+(itemRow+i)*map_col+itemCol+j) & *(currentItem+i*4+j)=1) if(startX=init_startX&startY0;i-) /從下向上掃描整張網(wǎng)格 for(int j=0;j0;row-) /讓已滿的行及其上面的各行均等于其上一行 for(int col = 0;colitemChange(currentItem); /進行圖形變化 if(startX gameArea_width) startX = gameArea_width - 4*step; /右超界,則讓其右邊靠右 if(isMoveEnd()

39、 /如果和別的圖形重合,則不讓其改變 currentItem = tempItem; 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)15判斷按鍵判斷可否變形,圖形變化調(diào)用函數(shù)判斷可否移動。可以則移動判斷可否移動??梢詣t移動判斷可否移動??梢詣t默認(rèn)下移一步,否則下到底如不是這 4 個按鍵,則接收其他按鍵。6.6 按鍵事件 設(shè)置判斷按鍵,判斷可否變形,圖形變化調(diào)用;判斷可否移動,可以移動則動,進行下一步。圖 6.6 鍵盤事件功能圖7游戲測試7.1 游戲測試運行環(huán)境:VMware workstation7.1 虛擬機平臺ubuntu linux 操作系統(tǒng)基于 QT 4.6 的 QT Creator 1.3.0

40、 Linux 版本T測試方法:用虛擬機運行 ubuntu linux 操作系統(tǒng)。運行 QT,打開 T,加載工程,編譯程序,運行。測試結(jié)果:實現(xiàn)了界面優(yōu)化,實現(xiàn)了游戲網(wǎng)格、方塊添加、旋轉(zhuǎn)游戲、背景變換等功能;QT 俄羅斯方塊游戲的設(shè)計與實現(xiàn)16實現(xiàn)了游戲的基本功能。7.2 游戲性能分析本系統(tǒng)在測試和運行過程中。有以下幾方面優(yōu)點:界面簡潔,操作方便系統(tǒng)界面簡單,功能較完善,易上手,可以激發(fā)玩家的樂趣。 通用性好,擴展性強本系統(tǒng)采用 QT,可跨平臺運行。其他功能需完善由于時間和技術(shù)因素,本系統(tǒng)沒有實現(xiàn)方塊顏色等功能,有待于進一步的解決。山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文

41、(設(shè)計)17結(jié)語QT 據(jù)有優(yōu)良的跨平臺特性、面向?qū)ο蟆⒇S富的 API、大量的開發(fā)文檔等優(yōu)點,已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)和流行的 Linux 桌面環(huán)境 KDE 的基礎(chǔ)。本次設(shè)計采用 QT+Creator做為開發(fā)環(huán)境,使用 QT Designer 設(shè)計器實現(xiàn) UI 界面,用畫圖類實現(xiàn)動態(tài)界面,使用信號與槽機制實現(xiàn)對按鍵事件的控制,并且實現(xiàn)多種游戲功能,最終完成本次設(shè)計。通過本次畢業(yè)設(shè)計,讓我掌握了 QT 程序與眾不同的設(shè)計與實現(xiàn)方法,豐富了我的專業(yè)知識和設(shè)計理念,為我以后的工作積累了寶貴的經(jīng)驗,讓我在成功的路上邁出了堅實的一步。但由于時間和個人精力有限,設(shè)計還有很多功能沒有完善

42、,一些功能還沒有實現(xiàn),如讓不同的方塊顯示不用的顏色,我將在以后的工作和學(xué)習(xí)中不斷充實自己,不斷修改和完善程序,做出更實用界面更加美觀的程序。 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)18致謝四年的大學(xué)生活就快走入尾聲,我的校園生活就要劃上句號,心中是無盡的難舍與眷戀,從這里走出,將踏上一個新的征程,大學(xué)生活賦予我的財富將一直陪伴我,讓我一生受用。經(jīng)過幾個月的學(xué)習(xí)和工作,在老師的悉心指導(dǎo)和嚴(yán)格要求下,我完成了本次的畢業(yè)設(shè)計。從課題選擇、方案論證、具體設(shè)計的實現(xiàn)和調(diào)試到最后論文的定稿,無不凝聚著指導(dǎo)老師的心血和汗水。你們的指導(dǎo)與關(guān)懷使我受益匪淺,讓我能夠很好的掌握和運用專業(yè)知識,并在設(shè)計中得以體現(xiàn),我

43、對老師們表示由衷的敬意,感謝你們的悉心栽培。大學(xué)畢業(yè)設(shè)計是我大學(xué)生涯中的最后一份答卷,我想要藉此機會感謝四年以來給我?guī)椭乃欣蠋煛⑼瑢W(xué)。各位老師嚴(yán)謹(jǐn)細致、一絲不茍的作風(fēng)一直是我學(xué)習(xí)和工作中的榜樣;你們的諄諄教導(dǎo)和不拘一格的思路給與我無盡的啟迪。同學(xué)彼此之間真摯的情誼,無私的援助深深的打動著我。有了你們的幫助和支持才能使我的畢業(yè)設(shè)計順利完成。在完成本次的畢業(yè)設(shè)計的過程中,我收獲了很多,自己用心去做一件事,在其中鍛煉自己的學(xué)習(xí)和研究的能力,這次經(jīng)歷將激勵我在以后的學(xué)習(xí)和工作中不斷進步。感謝百忙之中審閱我論文的各位指導(dǎo)老師。在我即將邁上人生的另一個起點之際,我向我的母校,全體老師表示由衷的謝意,感

44、謝你們的辛苦栽培與提攜,祝愿我的同學(xué)們前途似錦,祝福大家在以后的工作和生活中一帆風(fēng)順,身體健康。 山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)19參考文獻1 譚浩強,張基溫C 語言程序設(shè)計教程M (第 3 版) 北京:高等教育出版社,19912 陳超C 語言常用函數(shù)速查手冊M 北京:化學(xué)工業(yè)出版社,2010-063 韋東山嵌入式應(yīng)用開發(fā)完全手冊M 北京:人民郵電出版社,2000-014 黃麗琴,丁林松Qt4 圖形設(shè)計與嵌入式開發(fā)M 北京:人民郵電出版社,2009-04-5 成潔,盧紫毅Linux 窗口設(shè)計 Qt4 精彩實例設(shè)計分析M 北京:清華大學(xué)出版社,2008-116(加)布蘭切特(Blanche

45、tte,J) , (英)薩默菲爾德(Summerfield,M)著,閆鋒欣 譯C+GUI Qt4 編程(第二版)M New York: Spring-Verlag,2008 年 08 月7 蔡志明精通 Qt4 編程(第 2 版)M 北京:電子工業(yè)出版社,2011-28 (美)伊斯特(EEzust,A.) , (美)伊斯特(Ezust,P.)著,李仁見,戰(zhàn)曉明 譯C+設(shè)計模式 Qt4 開源跨平臺開發(fā)框架M 北京:清華大學(xué),2007-89 肖林甫,肖季東,任橋偉Linux 那些事兒之我是 USBM 北京:電子工業(yè)出版社,2010-0710 鄭莉董江周.C+語言程序設(shè)計(第 4 版)M 北京:清華大

46、學(xué)出版社,2010-07山西大學(xué)商務(wù)學(xué)院本科畢業(yè)論文(設(shè)計)20QT Tetris Game Design and ImplementationAbstract: Tetris is popular and old games, which implements the four square blocks of color composition, and then stored in an array of four elements, the computer randomly generate different types of box seven, according to computer time control is kept at a certain time, the generation of users to control the keyboard, flip

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論