版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、學(xué)號:本 科 畢 業(yè) 論 文(設(shè) 計) QT俄羅斯方塊游戲的設(shè)計與實現(xiàn) 作者姓名 指導(dǎo)教師 所學(xué)專業(yè)班級 所屬院系 學(xué)習(xí)年限年月至年月二年月目 錄 TOC o 1-3 h z u HYPERLINK l _Toc290921101 內(nèi)容提要 PAGEREF _Toc290921101 h I HYPERLINK l _Toc290921102 引言 PAGEREF _Toc290921102 h 1 HYPERLINK l _Toc290921103 1. 緒論 PAGEREF _Toc290921103 h 1 HYPERLINK l _Toc290921104 游戲的歷史 PAGEREF
2、_Toc290921104 h 1 HYPERLINK l _Toc290921105 1.1.1 從頭談起 PAGEREF _Toc290921105 h 1 HYPERLINK l _Toc290921106 1.1.2 圖形硬件的革命 PAGEREF _Toc290921106 h 2 HYPERLINK l _Toc290921107 游戲的意義與內(nèi)涵 PAGEREF _Toc290921107 h 2 HYPERLINK l _Toc290921108 1.3 游戲的組成要素 PAGEREF _Toc290921108 h 2 HYPERLINK l _Toc290921109 2.
3、 可行性研究 PAGEREF _Toc290921109 h 3 HYPERLINK l _Toc290921110 2.1 設(shè)計目的 PAGEREF _Toc290921110 h 3 HYPERLINK l _Toc290921111 2.2 可行性研究前提 PAGEREF _Toc290921111 h 4 HYPERLINK l _Toc290921112 2.3 可行性分析 PAGEREF _Toc290921112 h 4 HYPERLINK l _Toc290921113 2.4 結(jié)論意見 PAGEREF _Toc290921113 h 4 HYPERLINK l _Toc290
4、921114 3. 需求分析 PAGEREF _Toc290921114 h 5 HYPERLINK l _Toc290921115 3.1 引言 PAGEREF _Toc290921115 h 5 HYPERLINK l _Toc290921116 3.2 游戲需求 PAGEREF _Toc290921116 h 5 HYPERLINK l _Toc290921117 4. 設(shè)計基本的游戲功能 PAGEREF _Toc290921117 h 5 HYPERLINK l _Toc290921118 4.1 方塊類定義函數(shù) PAGEREF _Toc290921118 h 6 HYPERLINK
5、l _Toc290921119 4.2 程序核心函數(shù) PAGEREF _Toc290921119 h 7 HYPERLINK l _Toc290921120 5. 程序主要功能設(shè)計及按鍵事件的控制 PAGEREF _Toc290921120 h 7 HYPERLINK l _Toc290921121 5.1 建立工程 PAGEREF _Toc290921121 h 7 HYPERLINK l _Toc290921122 5.2 添加定時器和開始按鈕 PAGEREF _Toc290921122 h 8 HYPERLINK l _Toc290921123 5.3 添加暫停和重新開始按鈕,完成基本的
6、控制功能 PAGEREF _Toc290921123 h 9 HYPERLINK l _Toc290921124 5.4 改變顏色和給方塊添加圖片 PAGEREF _Toc290921124 h 10 HYPERLINK l _Toc290921125 5.5 是否顯示背景網(wǎng)格和下一個要出現(xiàn)的方塊 PAGEREF _Toc290921125 h 10 HYPERLINK l _Toc290921126 5.6 添加方塊移動的聲音 PAGEREF _Toc290921126 h 11 HYPERLINK l _Toc290921127 5.7 添加向下按鈕步數(shù)設(shè)置 PAGEREF _Toc290
7、921127 h 12 HYPERLINK l _Toc290921128 5.8 添加方塊 PAGEREF _Toc290921128 h 12 HYPERLINK l _Toc290921129 5.9 設(shè)置旋轉(zhuǎn)游戲區(qū) PAGEREF _Toc290921129 h 12 HYPERLINK l _Toc290921130 6程序設(shè)計思想與流程圖 PAGEREF _Toc290921130 h 13 HYPERLINK l _Toc290921131 6.1 游戲?qū)崿F(xiàn)的核心方法 PAGEREF _Toc290921131 h 13 HYPERLINK l _Toc290921132 6.2
8、 游戲是怎么實現(xiàn)顯示現(xiàn)在和已有的圖形的。 PAGEREF _Toc290921132 h 13 HYPERLINK l _Toc290921133 6.3 游戲是怎么判斷方塊已經(jīng)重合的 PAGEREF _Toc290921133 h 13 HYPERLINK l _Toc290921134 6.4 游戲是怎么進(jìn)行消行的 PAGEREF _Toc290921134 h 14 HYPERLINK l _Toc290921135 6.5 對于改變圖形后越界或和別的圖形重合的處理方法 PAGEREF _Toc290921135 h 14 HYPERLINK l _Toc290921136 按鍵事件 P
9、AGEREF _Toc290921136 h 15 HYPERLINK l _Toc290921137 致謝 PAGEREF _Toc290921137 h 1 HYPERLINK l _Toc290921138 參考文獻(xiàn) PAGEREF _Toc290921138 h 1 HYPERLINK l _Toc290921139 ABSTRACT PAGEREF _Toc290921139 h 1QT俄羅斯方塊游戲的設(shè)計與實現(xiàn) 內(nèi)容提要 俄羅斯方塊是個老幼皆宜的小游戲,它實現(xiàn)由四塊正方形的色塊組成,然后存儲在一個數(shù)組的四個元素中,計算機(jī)隨機(jī)產(chǎn)生不同七種類型的方塊,根據(jù)計算機(jī)定時器控制它在一定的時間
10、不停的產(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ā)的意義。遵循軟件工程的知識,從軟件問題定義開始,接著進(jìn)行可行性研究、需求分析、概要設(shè)計、詳細(xì)設(shè)計,整個開發(fā)過程貫穿軟件工程的知識體系。此次設(shè)計在Linux系統(tǒng)下,以QT+Creator為開發(fā)語言,使用C+和QT庫來進(jìn)行游戲的設(shè)計與實現(xiàn)。關(guān)鍵詞 數(shù)組 定時器 信號 槽函數(shù)
11、 QT引言在現(xiàn)今電子信息高速發(fā)展的時代,電子游戲已經(jīng)深入人們的日常生活,成為老少皆宜的娛樂方式。俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟(jì)價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,而我國的用戶都是通過紅白機(jī)了解、喜歡上它的?,F(xiàn)在QQ等游戲平臺又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對一般用戶來說,它的規(guī)則簡單,容易上手,且游戲過程變化無窮,而在游戲平臺上的
12、對戰(zhàn)模式更增加了它的娛樂性和挑戰(zhàn)性,使用戶既能感受到游戲中的樂趣,也給用戶提供了一個展現(xiàn)自己高超技藝的場所。俄羅斯方塊游戲可以說是隨計算機(jī)的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲, 深受廣大玩家喜愛。這個游戲有的簡單, 有的復(fù)雜, 但其根本原理是一樣的都是對運動的方塊進(jìn)行組合, 來訓(xùn)練玩家的反應(yīng)能力。談到游戲軟件, 大多數(shù)人都認(rèn)為其神妙莫測, 高不可及。而一般游戲軟件也確實具有很高的技術(shù)難度, 隨著開發(fā)工具及軟件開發(fā)方法學(xué)的不斷發(fā)展, 動手開發(fā)游戲也不是十分困難的。俄羅斯方塊游戲是一種古老而又有趣的游戲, 游戲軟件不計其數(shù), 網(wǎng)上就有好多關(guān)于實現(xiàn)的復(fù)雜算法和設(shè)計, 其難度讓一般初學(xué)者望而
13、卻步。本文利用數(shù)組作為方塊的數(shù)據(jù)結(jié)構(gòu),提出一種用C語言和C+來實現(xiàn)的方法, 對初學(xué)者可仿此開發(fā)類似游戲, 并了解游戲軟件的設(shè)計與開發(fā)過程。 1. 緒論游戲開發(fā)至今已經(jīng)有30多年,在這個短暫的時期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。 從頭談起真正的電子游戲機(jī)產(chǎn)生于20世紀(jì)70年代。1971年,麻省理工學(xué)院的學(xué)生Nolan Bushnell設(shè)計了世界上的第一個業(yè)務(wù)用游戲機(jī)(俗名街機(jī)),叫做電腦空間。這臺游戲機(jī)用一臺黑白電視機(jī)作為顯示屏,用一個控制柄作為操縱器,不過由于市場因素這款游戲以失敗告終。但是最后他在電子游戲的發(fā)展上取得了非凡的成就。上面介紹的是專用機(jī)游戲的歷史
14、,而最早的電腦游戲可以追溯到1972年,一個叫Crowther的工程師用當(dāng)時最流行的主機(jī)DEC公司的PDP10編寫一段簡單的FORTRAN程序。在這個程序里,Crowther設(shè)計了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開陷阱。這個程序被公認(rèn)為是最早的電腦游戲程序。1989年,BroderBund公司的設(shè)計師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說一千零一夜在Apple平臺上制作了一部動作冒險相結(jié)合的電腦游戲波斯王子。這個游戲獲得了第一作,它代表了當(dāng)時電腦技術(shù)的最高水平。1986年,任天堂公司發(fā)售了一款真正的游戲巨作超級馬里奧。20世紀(jì)80年代IBM PC兼容機(jī)的出現(xiàn)打破了Appl
15、e公司的壟斷地位。到了20世紀(jì)90年代,游戲業(yè)才真正成熟起來,成為了一種產(chǎn)業(yè)。由于PC機(jī)價格非常低而且硬件速度越來越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。 圖形硬件的革命圖形硬件的飛速發(fā)展是近些年來的事情,部分原因是來自工業(yè)方面的壓力,例如在軍事和醫(yī)療方面對于實時圖形的需求很強(qiáng)烈,而交互娛樂產(chǎn)業(yè)也極大的推動了圖形硬件的發(fā)展。技術(shù)上的因素同樣也推動著圖形硬件的發(fā)展,許多圖形算法可以很容易地表達(dá)為并行方式,這樣硬件執(zhí)行的效率變得很高。摩樂定律也起了作用,越來越多的晶體管可以集成到一塊單獨的芯片上。在所謂的GPU(圖形處理器)概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸如SG
16、I和E&S系統(tǒng)里面,這些硬件價格太昂貴,不過這些公司提供了第一代基于硬件的頂點變換和紋理映射的解決方案。游戲這個名稱一直就存在于每個人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場游戲一場夢” 。因此,游戲?qū)τ诂F(xiàn)代人的成長歷程,絕對是一個不可或缺的重要角色。 游戲的組成要素“游戲”,最簡單的定義,就是一種供人們娛樂休閑的快樂元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個要素。行為模式: “游戲”最簡單的要素就是游戲有特定的流程模式,這種流程模
17、式貫穿于整個游戲的行為,用戶必須依照它的模式流程來執(zhí)行。倘若一種游戲沒有了特定的行為模式,那么就沒有執(zhí)行的行為;在沒有執(zhí)行的行為之后,這個游戲也玩不下去了。舉個例子來說,如果猜拳游戲沒有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡單,一定要有特定的行為模式。條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡單來說,這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡單的球賽,打球的英文解釋可以用PLAY G
18、AME來加以說明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會具備一組規(guī)則條件,在游戲進(jìn)行的時候才會有足夠的公平性。娛樂身心:一種游戲所帶來的娛樂性,關(guān)鍵就在于為玩家所帶來的刺激感,這也是游戲的精華所在。簡單來說,不管是很多人玩的游戲,還是一個人玩的單機(jī)游戲,游戲本身就會存在它的娛樂和刺激性,使得玩家們想要去玩它。輸贏:其實針對游戲而言,輸贏是所有游戲的最終目的。一個沒有輸贏的游戲,也就沒有了它存在的意義,如同我們常常接觸到的猜拳游戲,說穿了最終目的就是為了分出勝負(fù)而己。一般而言,游戲又
19、可以分為動態(tài)和靜態(tài)兩種形態(tài)。動態(tài)的游戲必須配合肢體動作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動態(tài)或是靜態(tài)游戲,只要具備上述4項組成要素,都可以將它稱為“游戲”。2. 可行性研究2.1 設(shè)計目的綜合運用在校期間所學(xué)理論知識和技能,設(shè)計開發(fā)俄羅斯方塊,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,培養(yǎng)獨立思考能力,檢驗學(xué)習(xí)效果和動手能力,提高工程實踐能力,為將來實際工作打下堅實的基礎(chǔ)。2.2 可行性研究前提基本需求:系統(tǒng)開發(fā)的總體任務(wù)是實現(xiàn)游戲的可操作性、美觀性、及時性。開發(fā)過程遵循軟件工程規(guī)范,可采用結(jié)構(gòu)化或面向?qū)ο蠓治鲈O(shè)計方法。主要實現(xiàn)windows的GUI程序開發(fā),對游戲中的
20、圖形圖像進(jìn)行鍵盤控制。游戲者可以通過上下左右鍵來對游戲進(jìn)行操作。主要開發(fā)目標(biāo):采用結(jié)構(gòu)化設(shè)計方法,開發(fā)出一個可操作性、美觀性、及時性的游戲,實現(xiàn)windows的GUI程序開發(fā),并通過此次軟件開發(fā)過程全面提高自身的綜合素質(zhì)。條件假定和限制:由于本軟件目前是我的初次版本,可能還存在一些問題。如果該軟件提高版本,本軟件需要根據(jù)游戲者的要求進(jìn)行進(jìn)一步的修改??尚行匝芯克捎玫姆椒ê筒襟E:通過研究分析俄羅斯方塊所具備的能力及實現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達(dá)到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實現(xiàn)一個初級游戲軟件。評價尺度:由于本軟件是一個初級產(chǎn)品,對其要求不是太苛刻,所以能
21、夠達(dá)到俄羅斯游戲的一般功能即可。2.3 可行性分析管理可行性: 該游戲軟件為首次開發(fā),目的只為提高工作自身素質(zhì)和檢查自學(xué)Java的效果,用 Java3.0軟件編寫后在Applet管理器中運行簡單明了,所有功能均根據(jù)基本需求所做。便于管理,所以在這方面是可以實現(xiàn)的。經(jīng)濟(jì)可行性:由于本游戲的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟(jì)要求也不高,只要有一臺能運行JAVA3.0軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問題。技術(shù)可行性:可用與本游戲的編程語言有VB,Java,Delphi等,考慮到用于編寫程序的困難度,和對語言的了解程度,選擇JAV
22、A作為編程語言。需要對變量定義、變量初始化、界面初始化、游戲初始化、然后進(jìn)入游戲、處理游戲過程中的各種操作。社會可行性:本游戲的開發(fā)作為畢業(yè)課程設(shè)計以鞏固先前所學(xué)的知識,以個人為單位,僅供個人平常娛樂所用,無須考慮有可能造成的社會影響,不用考慮到法律、版權(quán)等的社會因素,所以在這方面是完全可行的。2.4 結(jié)論意見綜上所述,本游戲軟件的技術(shù)成熟、完備。各方面均無重大問題,因此本游戲軟件可開始著手編寫。3. 需求分析3.1 引言對軟件需求完全理解對于軟件開發(fā)工作的成功是至關(guān)重要的,需求說明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過程,有益于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控制與管理,便于采用工程方法開
23、發(fā)軟件,提高軟件的質(zhì)量,便于開發(fā)人員、維護(hù)人員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關(guān)。3.2 游戲需求隨機(jī)給出不同的形狀(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的分?jǐn)?shù)時,過關(guān),設(shè)置三關(guān),每關(guān)方塊下落的速度不同,若在游戲中各形狀填滿了給定區(qū)域,為輸者。游戲功能要求如下:游戲界面需求:良好的用戶界面,有關(guān)數(shù)顯示和分?jǐn)?shù)顯示。讓方塊在一定的區(qū)域內(nèi)運動和變形,該區(qū)域用一種顏色表明,既用一種顏色作為背景,最好設(shè)為黑色。還需用另一種顏色把黑色圍
24、起來,寬度適中,要實現(xiàn)美感。游戲形狀(方塊)需求:良好的方塊形狀設(shè)計,繪制七種常見的基本圖形(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型),各個方塊要能實現(xiàn)它的變形,可設(shè)為順時針或逆時針變形,一般為逆時針。鍵盤處理事件:方塊下落時,可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進(jìn)行向上(變形),向下(加速)、向左、向右移動。顯示需求:當(dāng)不同的方塊填滿一行時可以消行,剩余方塊向下移動并統(tǒng)計分?jǐn)?shù)。當(dāng)達(dá)到一定的分?jǐn)?shù)時過關(guān)。設(shè)置三關(guān),每關(guān)方塊下落的速度不同。4. 設(shè)計基本的游戲功能參考QT庫中基本的Tetrix實例,設(shè)計自己的方塊類程序。在QT中新建一個工程,向工程中添加新的普通文本文件。將
25、設(shè)計好的4個文件添加復(fù)制到工程文件夾下并加入到工程中。在主函數(shù)中新建一個類的對象,用參數(shù)設(shè)置好方塊的下移速度,就可以成功運行出一個基本的游戲程序。4.1 方塊類定義函數(shù)方塊和地圖數(shù)據(jù)信息是游戲中最基本的功能模塊。這個類提供方塊圖形 ,圖形在4*4區(qū)域的位置信息 ,對圖形進(jìn)行旋轉(zhuǎn)變化功能Myitem.h Myitem.cpp這兩個文件是方塊類的定義文件,用來提供隨機(jī)產(chǎn)生的方塊。定義7個四維數(shù)組unsigned char item4*4,數(shù)組的第一維表示七種不同形態(tài)的方塊,第二維代表方塊的四種不同翻轉(zhuǎn)狀態(tài)。數(shù)組的第三維和第四維代表某一種形態(tài)的方塊的某一狀態(tài)。然后用代碼實現(xiàn)下列功能:(1)每次執(zhí)行首
26、先為隨機(jī)數(shù)產(chǎn)生不同的初值。(2)隨機(jī)選取一個圖形隨機(jī)產(chǎn)生一個數(shù)隨機(jī)數(shù)一字形Z字形反Z形7字形反7形倒T形田字型 圖4.1 隨機(jī)產(chǎn)生方塊圖(3)當(dāng)前圖形在其4*4網(wǎng)格中的位置信息(4)改變圖形形狀定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制還是空白,由此可以組合出多種圖形,如圖所示: 圖4.2 方塊圖4.2 程序核心函數(shù)Gamearea.h Gamearea.cpp是游戲區(qū)域類的定義文件,實現(xiàn)了游戲的所有功能。其中包括了核心功能控制函數(shù),設(shè)置顏色參數(shù),設(shè)置聲音參數(shù),設(shè)置游戲區(qū)域旋轉(zhuǎn)函數(shù)和其他功能函數(shù)等。 具體功能的實現(xiàn)在下一章節(jié)中闡述。5. 程序主要功能設(shè)計及按鍵事件的
27、控制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ù)里添加語句。Widget:Widget(QWidget *parent) :QWidget(parent),u
28、i(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ù)的聲明。private slots:void timer_upDate();2在widget.cpp 文件中的構(gòu)造函數(shù)里
29、添加下面的語句:this-timer = new QTimer(this);connect(this-timer,SIGNAL(timeout(),this,SLOT(timer_upDate();score =0;定義了定時器并進(jìn)行了信號和槽函數(shù)的關(guān)聯(lián),初始化分?jǐn)?shù)為0;3然后在下面定義兩個函數(shù)。void Widget:timer_upDate() /定時器溢出處理this-gameArea-moveOneStep(); /先移動一步,這時并沒有顯示出來if(this-gameArea-isMoveEnd() /如果無法移動,到底了或結(jié)束了if(this-gameArea-isGame_Ove
30、r() /如果是結(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 /如果是移動到底了this-gameArea-nextItem(); /出現(xiàn)下一個圖形int num = this-gameArea-getFullRowNum();
31、/獲得已滿的行數(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è)計器中向主窗口上添加兩個標(biāo)簽label 和label_2,其中l(wèi)abel 寫上“你的分?jǐn)?shù)是:”,label_2 寫上“0”;然后再添加一個開始按鈕。5然后右擊“開始游戲”按
32、鈕,選擇其單擊事件的槽函數(shù)。更改如下。void Widget:on_pushButton_clicked() /開始按鈕this-gameArea-init_Game(); /第一次進(jìn)入游戲時進(jìn)行的初始化this-gameArea-gameStart(); /開始游戲this-timer-start(500); /開啟定時器this-gameArea-setFocus(); /讓游戲區(qū)域獲得焦點,這樣才能響應(yīng)鍵盤5.3 添加暫停和重新開始按鈕,完成基本的控制功能1在主窗口上添加“暫停游戲”和“重新開始”兩個按鈕。在“暫停游戲”按鈕的屬中將checkable 選中。2分別進(jìn)入兩個按鈕的單擊事件槽
33、函數(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(tr(暫停游戲);this-gameArea-setFocus();void Widget:on_pushButton_3_clicked() /重新開始this-timer-stop();this-on_pushB
34、utton_clicked();3在main.cpp 中添加語句,讓程序中可以使用中文。添加#include 的頭文件包含。在main()函數(shù)里添加QTextCodec:setCodecForTr(QTextCodec:codecForLocale();語句。5.4 改變顏色和給方塊添加圖片1添加“更改顏色”按鈕和“方塊貼圖”按鈕。2更改其單擊事件槽函數(shù)。如下。void Widget:on_pushButton_4_clicked() /改變顏色this-gameArea-setGameAreaColor(QColor(255,255,0,qrand()%255);/更改游戲區(qū)域背景顏色thi
35、s-gameArea-setBoxBrushColor(QColor(0,255,0,qrand()%255);/更改小方塊背景顏色this-gameArea-setBoxPenColor(QColor(0,0,0,qrand()%255);/更改小方塊邊框顏色this-gameArea-draw_gameArea();/更新游戲區(qū)域this-gameArea-setFocus();void Widget:on_pushButton_5_clicked() /方塊貼圖this-gameArea-set_draw_box_picture(true);/確認(rèn)使用方塊背景圖片this-gameAre
36、a-setBoxPicture(box.gif);/添加方塊背景圖片this-gameArea-draw_gameArea();/更新顯示區(qū)域this-gameArea-setFocus();3運行效果如下。點擊“改變背景”按鈕后,游戲區(qū)域背景,方塊的填充顏色和邊框顏色都改變了。5.5 是否顯示背景網(wǎng)格和下一個要出現(xiàn)的方塊1添加“網(wǎng)格顯示”按鈕和“方塊提示”按鈕。并將它們屬性中的checkable 選中2修改它們的單擊事件槽函數(shù)。void Widget:on_pushButton_6_clicked() /網(wǎng)格顯示if(this-ui-pushButton_6-isChecked()this-
37、gameArea-setDrawGrid(false);elsethis-gameArea-setDrawGrid(true);this-gameArea-draw_gameArea();this-gameArea-setFocus();void Widget:on_pushButton_7_clicked() /方塊提示if(this-ui-pushButton_7-isChecked()this-gameArea-setDrawNextItem(false);elsethis-gameArea-setDrawNextItem(true);this-gameArea-draw_gameAre
38、a();this-gameArea-setFocus();5.6 添加方塊移動的聲音1添加“打開聲音”按鈕,并將其屬性中的checkable 選中。2修改其單擊事件槽函數(shù)。void Widget:on_pushButton_8_clicked() /聲音開關(guān)if(this-ui-pushButton_8-isChecked()this-gameArea-setPlaySound_itemChange(changeItem.wav,true);this-gameArea-setPlaySound_moveDown(moveDown.wav,true);this-gameArea-setPlayS
39、ound_moveLeft(moveLeft.wav,true);this-gameArea-setPlaySound_moveRight(moveLeft.wav,true);this-ui-pushButton_8-setText(tr(關(guān)閉聲音);elsethis-gameArea-setPlaySound(false); /關(guān)閉音樂this-ui-pushButton_8-setText(tr(打開聲音);this-gameArea-setFocus();3我們把需要的聲音文件放到工程文件夾下的debug 文件夾下。只能是wav 格式的。5.7 添加向下按鈕步數(shù)設(shè)置1添加“是否墜落”按
40、鈕,并將其屬性中的checkable 選中。2更改其單擊事件槽函數(shù)。void Widget:on_pushButton_9_clicked() /是否墜落if(this-ui-pushButton_9-isChecked()this-gameArea-setKey_Down_Move_oneStep(true);/按一下向下方向鍵,下移一步elsethis-gameArea-setKey_Down_Move_oneStep(false);/按一下向下方向鍵,移動到底this-gameArea-setFocus();5.8 添加方塊1添加“添加方塊”按鈕。2修改其單擊事件槽函數(shù)。void Wid
41、get:on_pushButton_10_clicked() /添加方塊this-gameArea-init_Game();/清空游戲區(qū)域this-gameArea-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();5.9 設(shè)置旋轉(zhuǎn)游戲區(qū)1添加“旋轉(zhuǎn)游戲”按鈕。2修改其單擊事件槽函數(shù)。void W
42、idget:on_pushButton_11_clicked() /旋轉(zhuǎn)游戲this-gameArea-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();6程序設(shè)計思想與流程圖 圖6.1 設(shè)
43、計實現(xiàn)流程6.1 游戲?qū)崿F(xiàn)的核心方法利用了數(shù)組對整個游戲區(qū)域進(jìn)行存儲。6.2 游戲是怎么實現(xiàn)顯示現(xiàn)在和已有的圖形的。利用了兩個數(shù)組,方塊每移動一步,都對整個數(shù)組進(jìn)行一次備份。6.3 游戲是怎么判斷方塊已經(jīng)重合的先嘗試讓方塊移動一步,判斷其是否與其他圖形重合,如果不重合就移動。如果重合了,則執(zhí)行其他操作。代碼如下:for(int i=item_endRow;i=0;i-) /是否跟已有的圖形重合 for(int j=3;j=0;j-) if(*(copyMap+(itemRow+i)*map_col+itemCol+j) & *(currentItem+i*4+j)=1) if(startX=i
44、nit_startX&startY0;i-) /從下向上掃描整張網(wǎng)格 for(int j=0;j0;row-) /讓已滿的行及其上面的各行均等于其上一行 for(int col = 0;colitemChange(currentItem); /進(jìn)行圖形變化 if(startX gameArea_width) startX = gameArea_width - 4*step; /右超界,則讓其右邊靠右 if(isMoveEnd() /如果和別的圖形重合,則不讓其改變 currentItem = tempItem; 按鍵事件判斷按鍵判斷可否變形,圖形變化調(diào)用函數(shù)判斷可否移動??梢詣t移動判斷可否移動
45、??梢詣t移動判斷可否移動??梢詣t默認(rèn)下移一步,否則下到底如不是這4個按鍵,則接收其他按鍵。圖4.2 鍵盤事件功能圖 參考文獻(xiàn)1 譚浩強(qiáng),張基溫,C語言程序設(shè)計教程(第3版)M高等教育出版社,1991年08月2 陳超,C語言常用函數(shù)速查手冊M,化學(xué)工業(yè)出版社,2010年06月3 韋東山,嵌入式應(yīng)用開發(fā)完全手冊M,人民郵電出版社 4 黃麗琴,丁林松,Qt4圖形設(shè)計與嵌入式開發(fā)M,人民郵電出版社,2009年04月5 成潔,盧紫毅,Linux窗口設(shè)計6(加) HYPERLINK :/search.dangdang /search_pub.php?key=&key2=布蘭切特&category=01 o
46、 布蘭切特 布蘭切特( HYPERLINK :/search.dangdang /search_pub.php?key=&key2=Blanchette&category=01 o Blanchette Blanchette,J),(英) HYPERLINK :/search.dangdang /search_pub.php?key=&key2=薩默菲爾德&category=01 o 薩默菲爾德 薩默菲爾德( HYPERLINK :/search.dangdang /search_pub.php?key=&key2=Summerfield&category=01 o Summerfield S
47、ummerfield,M)著,閆鋒欣 譯,C+GUI Qt4編程(第二版)M,2008年08月7 蔡志明,精通Qt4編程(第2版)M,電子工業(yè)出版社,2011年2月8 (美) HYPERLINK :/search.dangdang /search_pub.php?key=&key2=伊斯特&category=01 o 伊斯特 伊斯特( HYPERLINK :/search.dangdang /search_pub.php?key=&key2=EEzust&category=01 o EEzust EEzust,A.),(美) HYPERLINK :/search.dangdang /search_pub.php?key=&key2=伊斯特&category=01 o 伊斯特 伊斯特( HYPERLINK :/search.dangdang /search_pub.php?
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年光建一體化科技公司研發(fā)項目立項與審批管理制度
- 2026年光建一體化科技公司客戶注冊與認(rèn)證管理制度
- 2026年光建一體化科技公司合同合規(guī)審查管理制度
- 2026年光建一體化科技公司IT物資采購管理制度
- 2026江蘇南京大學(xué)化學(xué)學(xué)院助理招聘備考題庫附參考答案詳解(滿分必刷)
- 2025年質(zhì)量員之市政質(zhì)量基礎(chǔ)知識測測試題附答案
- 2025年廣告設(shè)計師專業(yè)技術(shù)及理論知識考試題庫(附含答案)
- (2025年)幕墻安全生產(chǎn)教育培訓(xùn)考試試卷(答案)
- 2025至2030中國沉浸式娛樂項目投資熱度與體驗價值研究報告
- 2025年安全生產(chǎn)風(fēng)險分級管控與法規(guī)應(yīng)用考試題庫附答案
- 山東省濟(jì)南市2026屆高三第一次模擬考試英語試題(含解析)
- 2026年中央廣播電視總臺招聘124人備考題庫及答案詳解(奪冠系列)
- 電磁輻射環(huán)境下的職業(yè)健康防護(hù)
- 2026年及未來5年中國芋頭行業(yè)市場發(fā)展現(xiàn)狀及投資方向研究報告
- 馬年猜猜樂【馬的成語33題】主題班會
- 環(huán)衛(wèi)質(zhì)量規(guī)范及考核制度
- 江蘇省淮安市2025-2026學(xué)年高三上學(xué)期期中考試歷史試題(解析版)
- 圍絕經(jīng)期管理和激素補(bǔ)充治療課件
- Rivermead行為記憶能力測試
- CNC加工中心點檢表
- GB/T 12224-2005鋼制閥門一般要求
評論
0/150
提交評論