




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于VC的俄羅斯方塊摘要俄羅斯方塊是有史以來(lái)最偉大的游戲之一。它是永恒的娛樂(lè)經(jīng)典,但它實(shí)際上不同于那些傳統(tǒng)的經(jīng)典娛樂(lè),因?yàn)樗举|(zhì)上是電子的,所以它確實(shí)是一個(gè)現(xiàn)代產(chǎn)品。當(dāng)游戲剛發(fā)布時(shí),俄羅斯方塊世界著名的游戲玩法就很直觀。與掉落的玩具碎片及其形狀有關(guān),即使是新手也很自然地嘗試將它們排列并適當(dāng)組合,好像俄羅斯方塊觸及了我們的一些存在感官,使得即使是我們當(dāng)中最雜亂無(wú)章的東西也不得不放東西為了。俄羅斯方塊是一款風(fēng)靡全球的掌上游戲機(jī)和PC游戲。它所創(chuàng)造的轟動(dòng)效應(yīng)和經(jīng)濟(jì)價(jià)值,可以說(shuō)是游戲史上的一件大事。它是由俄羅斯人AlekPajitnov發(fā)明的,因此得名。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)、放置游戲自動(dòng)輸出的各種方塊,形成一條或多條完整的線并消除點(diǎn)。它看起來(lái)很簡(jiǎn)單,但變化無(wú)窮。俄羅斯方塊極易上手,但熟練掌握操作和放置技巧卻不難。作為眾所周知的老少皆宜的熱門(mén)游戲,它的火爆程度可以說(shuō)是歷史上任何一款游戲都無(wú)法比擬的。相信大部分人都還記得當(dāng)年癡迷的俄羅斯方塊時(shí)代。俄羅斯方塊是一款老少皆宜的小游戲。它由四個(gè)方形顏色塊組成,然后存儲(chǔ)在數(shù)組的四個(gè)元素中。計(jì)算機(jī)隨機(jī)生成七種不同類(lèi)型的塊,并根據(jù)計(jì)算機(jī)定時(shí)器對(duì)其進(jìn)行控制。連續(xù)產(chǎn)生一定的時(shí)間,用戶(hù)根據(jù)鍵盤(pán)的四個(gè)方向鍵來(lái)控制翻、左、右、下操作,(按鍵事件的控制是通過(guò)信號(hào)和槽的關(guān)聯(lián)來(lái)實(shí)現(xiàn)的功能)。然后程序?qū)⑦@七個(gè)塊堆疊成各種模型。Qt是諾基亞開(kāi)發(fā)的跨平臺(tái)C++GUI應(yīng)用程序框架。它為應(yīng)用程序開(kāi)發(fā)人員提供了創(chuàng)建最先進(jìn)的圖形用戶(hù)界面所需的所有功能。論文描述了游戲的歷史、游戲開(kāi)發(fā)的環(huán)境以及游戲開(kāi)發(fā)的意義。遵循軟件工程的知識(shí),從定義軟件問(wèn)題開(kāi)始,到可行性研究、需求分析、大綱設(shè)計(jì)、詳細(xì)設(shè)計(jì),整個(gè)開(kāi)發(fā)過(guò)程貫穿于軟件工程的知識(shí)體系。本設(shè)計(jì)是在Linux系統(tǒng)下,使用QT+Creator作為開(kāi)發(fā)語(yǔ)言,使用C++和QT庫(kù)來(lái)設(shè)計(jì)和實(shí)現(xiàn)游戲。關(guān)鍵詞:游戲設(shè)計(jì);算法;大批;事件目錄摘要……………………1內(nèi)容………………..2簡(jiǎn)介………………3__1簡(jiǎn)介………………4__1.1電子游戲及其分類(lèi)……………………3______電子游戲發(fā)展現(xiàn)狀…………41.2.1國(guó)外電子游戲發(fā)展現(xiàn)狀……42.可行性研究…………………………52.1設(shè)計(jì)目的62.2軟件問(wèn)題定義62.3可行性分析6三、外形設(shè)計(jì)………………73.1確定游戲設(shè)計(jì)方案……………………73.2系統(tǒng)流程結(jié)構(gòu)設(shè)計(jì)……………………83.3各功能模塊圖設(shè)計(jì)…………83.3.1模型層功能框圖設(shè)計(jì)……………….8332嘗試層功能模塊圖設(shè)計(jì)93.3.3控制層9功能模塊設(shè)計(jì)4.詳細(xì)設(shè)計(jì)規(guī)范……………………10總結(jié)25至26參考文獻(xiàn)27介紹游戲是人們活動(dòng)中非常重要的一部分。有人認(rèn)為,如果有一天人類(lèi)對(duì)所有游戲都失去興趣,恐怕世界末日就要來(lái)臨了。電腦對(duì)游戲的貢獻(xiàn)是有目共睹的,現(xiàn)在接觸過(guò)電腦的人很少?zèng)]玩過(guò)電腦游戲,喜歡游戲的人也很少不玩電腦。俄羅斯方塊是一款風(fēng)靡全球的視頻游戲和掌上游戲。它曾經(jīng)引起的轟動(dòng)和經(jīng)濟(jì)價(jià)值,可以說(shuō)是游戲史上的一件大事。該游戲最初由曼聯(lián)的游戲制作人AlexPajitnov創(chuàng)建,看似簡(jiǎn)單,但變化無(wú)窮,令人上癮。相信大部分用戶(hù)都還記得當(dāng)年癡迷的俄羅斯方塊時(shí)代?;仡櫰錃v史,俄羅斯方塊最早出現(xiàn)在PC上,我國(guó)用戶(hù)通過(guò)紅白電腦了解并喜歡上了它?,F(xiàn)在聯(lián)眾將再次掀起這股讓人上癮的俄羅斯方塊風(fēng)潮。對(duì)于普通用戶(hù)來(lái)說(shuō),它的規(guī)則簡(jiǎn)單易上手,游戲過(guò)程變化無(wú)窮。在《聯(lián)眾俄羅斯方塊》中,聯(lián)眾網(wǎng)游有一些獨(dú)特的魅力——有單人對(duì)戰(zhàn),也有兩人在線對(duì)戰(zhàn)。有兩種模式,用戶(hù)可以選擇其中一種來(lái)玩游戲。網(wǎng)絡(luò)模式還增加了積分系統(tǒng),讓用戶(hù)不僅可以在游戲中感受樂(lè)趣,還為用戶(hù)提供了展示高超技能的場(chǎng)所。俄羅斯方塊游戲可以說(shuō)是隨著計(jì)算機(jī)的發(fā)展而發(fā)展,不斷推出新的和進(jìn)化的各種同類(lèi)游戲,深受玩家喜愛(ài)。這個(gè)游戲有的簡(jiǎn)單,有的復(fù)雜,但基本原理是一樣的,都是通過(guò)移動(dòng)積木的組合來(lái)訓(xùn)練玩家的反應(yīng)能力。說(shuō)到游戲軟件,大多數(shù)人都認(rèn)為它是不可預(yù)測(cè)的,無(wú)與倫比的。而總則游戲軟件確實(shí)有很高的技術(shù)難度。隨著開(kāi)發(fā)工具和軟件開(kāi)發(fā)方法論的不斷發(fā)展,手工開(kāi)發(fā)游戲并不是很難。俄羅斯方塊游戲是一個(gè)古老而有趣的游戲。網(wǎng)絡(luò)上的游戲軟件數(shù)不勝數(shù),復(fù)雜的算法和設(shè)計(jì)也數(shù)不勝數(shù)。難度對(duì)于普通初學(xué)者來(lái)說(shuō)是望而卻步的。本文采用數(shù)組作為積木的數(shù)據(jù)結(jié)構(gòu),提出了一種用pascal語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)單方法,可供初學(xué)者開(kāi)發(fā)類(lèi)似的游戲,了解游戲軟件的設(shè)計(jì)開(kāi)發(fā)過(guò)程。一、簡(jiǎn)介1.1電子游戲及其分類(lèi)是在家用電腦、家用視頻游戲機(jī)或手持游戲機(jī)和街機(jī)上運(yùn)行的視頻游戲程序。電子游戲是集敘事、藝術(shù)、音樂(lè)、動(dòng)畫(huà)、編程等多種技術(shù)于一體的互動(dòng)娛樂(lè)軟件,涉及多個(gè)行業(yè)。從電子游戲的分類(lèi)來(lái)看,分類(lèi)方法有很多種。傳統(tǒng)的游戲分類(lèi)是按游戲類(lèi)型分為即時(shí)戰(zhàn)略游戲、第一人稱(chēng)射擊游戲、角色扮演游戲、策略游戲等類(lèi)別。根據(jù)運(yùn)行游戲的平臺(tái),視頻游戲可分為主機(jī)游戲、單機(jī)PC游戲、互動(dòng)視頻游戲、網(wǎng)絡(luò)游戲和手機(jī)游戲。此外,中國(guó)政府將視頻游戲產(chǎn)業(yè)劃分為四類(lèi):家用游戲機(jī)游戲、單機(jī)PC游戲、網(wǎng)絡(luò)游戲和街機(jī)游戲??紤]到我國(guó)游戲產(chǎn)業(yè)比較接近,本文采用國(guó)家的分類(lèi)標(biāo)準(zhǔn)?!熬W(wǎng)絡(luò)游戲”也俗稱(chēng)“網(wǎng)絡(luò)游戲”,是指通過(guò)互聯(lián)網(wǎng)進(jìn)行的電腦游戲,通過(guò)人與人之間的互動(dòng)達(dá)到交流、娛樂(lè)、休閑的目的。在互聯(lián)網(wǎng)(局域網(wǎng))技術(shù)出現(xiàn)之前,視頻游戲都可以歸類(lèi)為單人游戲,即“人機(jī)”游戲,或至多是兩人游戲。隨著互聯(lián)網(wǎng)技術(shù)的出現(xiàn),成百上千甚至上萬(wàn)的游戲玩家可以通過(guò)連接游戲服務(wù)器同時(shí)連接娛樂(lè)。這大大增加了游戲的交互性和真實(shí)性,豐富了電子游戲。韓。從網(wǎng)絡(luò)游戲的分類(lèi)來(lái)看,目前行業(yè)內(nèi)還沒(méi)有比較統(tǒng)一的分類(lèi)。隨著計(jì)算機(jī)設(shè)備和網(wǎng)絡(luò)技術(shù)的發(fā)展,電子游戲在世界范圍內(nèi)迅速發(fā)展,取得了巨大的成功,成為當(dāng)今世界不可缺少的精神食糧。1.2電子游戲發(fā)展現(xiàn)狀1.2.1國(guó)外電子游戲發(fā)展現(xiàn)狀電子游戲最初是在美國(guó)制作的。1971年,一位還在麻省理工學(xué)院讀書(shū)的學(xué)生設(shè)計(jì)了世界上第一臺(tái)商務(wù)游戲機(jī)。這個(gè)街機(jī)游戲的名字是“電腦空間”。可以說(shuō),時(shí)至今日,電子游戲仍是外國(guó)的天下。美國(guó)仍然是全球最大的游戲市場(chǎng),遵循發(fā)行商為主的產(chǎn)業(yè)鏈發(fā)展模式。據(jù)美國(guó)市場(chǎng)研究公司NPDGroup的調(diào)查統(tǒng)計(jì),2004年美國(guó)游戲(包括家用和掌上游戲機(jī))和軟件的總銷(xiāo)售額為99億美元,占全球游戲市場(chǎng)的45%。游戲軟件銷(xiāo)售額的具體數(shù)字為:視頻游戲軟件銷(xiāo)售額52億美元(1.6億臺(tái)),PC游戲軟件銷(xiāo)售額11億美元(4500萬(wàn)臺(tái)),掌上游戲銷(xiāo)售額10億美元(4230萬(wàn)臺(tái))。2004年共售出約2.48億款游戲。據(jù)估計(jì),美國(guó)家庭平均購(gòu)買(mǎi)了2款游戲[3]。日本近20年來(lái)一直在瘋狂地賺錢(qián)。從1960年代初的街機(jī),到1960、1970年代的家用游戲機(jī),再到1980、1990年代的掌上游戲機(jī),經(jīng)過(guò)30多年的努力,日本終于培育出了電子游戲的“搖錢(qián)樹(shù)”。成為第一時(shí)尚娛樂(lè)行業(yè),壟斷全球行業(yè)10余年。對(duì)日本而言,電子游戲產(chǎn)業(yè)已成為國(guó)民經(jīng)濟(jì)的重要支柱之一,占GDP的1/5。在最輝煌的1998年,日本游戲產(chǎn)業(yè)一度占據(jù)全球視頻游戲市場(chǎng)90%以上的硬件份額和50%以上的軟件份額。中國(guó)被譽(yù)為全球網(wǎng)絡(luò)游戲產(chǎn)業(yè)最發(fā)達(dá)的國(guó)家之一。迄今為止,中國(guó)網(wǎng)絡(luò)游戲市場(chǎng)60%以上的產(chǎn)品來(lái)自中國(guó)游戲軟件開(kāi)發(fā)商。中國(guó)的網(wǎng)絡(luò)游戲使中國(guó)的許多游戲運(yùn)營(yíng)公司在游戲營(yíng)銷(xiāo)市場(chǎng)或股票資本市場(chǎng)上取得了巨大的成功。中國(guó)游戲市場(chǎng)的發(fā)展并非偶然。中國(guó)政府不僅對(duì)游戲產(chǎn)業(yè)進(jìn)行了正確的定位和引導(dǎo),而且將其與國(guó)民經(jīng)濟(jì)發(fā)展緊密結(jié)合,做了大量的市場(chǎng)培育工作。中國(guó)政府意識(shí)到依靠重工業(yè)來(lái)支撐國(guó)民經(jīng)濟(jì)是片面的,于是把IT和娛樂(lè)產(chǎn)業(yè)作為新的經(jīng)濟(jì)增長(zhǎng)點(diǎn),開(kāi)始大力扶持。此后,科技含量極高、能耗極低的游戲制作及相關(guān)產(chǎn)業(yè)肩負(fù)著“興國(guó)興國(guó)”的重任。文化和旅游部出面成立國(guó)家游戲支持中心,為中國(guó)游戲產(chǎn)業(yè)提供從資金到技術(shù)的多方面支持;建立游戲投資聯(lián)盟,政府每年對(duì)游戲產(chǎn)業(yè)的投資高達(dá)500億元,并為游戲企業(yè)提供資金支持。長(zhǎng)期低息貸款;設(shè)立信息科技基金和文化產(chǎn)業(yè)基金,服務(wù)游戲產(chǎn)業(yè);對(duì)指定創(chuàng)業(yè)公司實(shí)施各項(xiàng)稅收優(yōu)惠政策,減輕甚至免除游戲公司的稅收負(fù)擔(dān);建設(shè)游戲產(chǎn)業(yè)基地,支持中小游戲公司發(fā)展;從事游戲產(chǎn)業(yè)的高技術(shù)人才免服二年兵役。在中國(guó),從生產(chǎn)到運(yùn)營(yíng),網(wǎng)絡(luò)游戲公司的起步門(mén)檻相對(duì)較低,主要得益于政府實(shí)施的扶持計(jì)劃。此外,在政策利好的形勢(shì)下,國(guó)內(nèi)涌現(xiàn)出不少游戲院校,一些未涉足該領(lǐng)域的高校也開(kāi)設(shè)了游戲相關(guān)專(zhuān)業(yè)課程,大力培養(yǎng)游戲?qū)I(yè)人才,為游戲制作提供了基礎(chǔ)保障。2.可行性研究2.1設(shè)計(jì)目的通過(guò)本游戲的設(shè)計(jì),綜合在校期間所學(xué)的理論知識(shí),設(shè)計(jì)開(kāi)發(fā)俄羅斯方塊游戲,熟悉應(yīng)用系統(tǒng)的開(kāi)發(fā)流程,培養(yǎng)獨(dú)立思考能力,測(cè)試學(xué)習(xí)效果和動(dòng)手能力,初步掌握軟件工程系統(tǒng)理論,初步掌握MVC這種設(shè)計(jì)模式,進(jìn)一步鞏固和加強(qiáng)自己對(duì)j2se基礎(chǔ)知識(shí)的理解,提高自己的編程水平,從而達(dá)到理論與實(shí)踐相結(jié)合的目的。2.2軟件問(wèn)題定義基本要求:本次游戲開(kāi)發(fā)的總體任務(wù)是實(shí)現(xiàn)游戲的可操作性和界面的美觀性。整個(gè)開(kāi)發(fā)過(guò)程遵循軟件工程規(guī)則,采用PASCAL編程實(shí)現(xiàn)接口和事件控制。用戶(hù)根據(jù)鍵盤(pán)的四個(gè)方向鍵控制翻、左、右、下操作,通過(guò)菜單欄中相應(yīng)的菜單選項(xiàng)來(lái)實(shí)現(xiàn)。游戲的開(kāi)始、結(jié)束、改變方塊、點(diǎn)數(shù)和關(guān)卡的功能。目標(biāo):通過(guò)這款游戲的開(kāi)發(fā),主要實(shí)現(xiàn)游戲的可操作性和美觀性,同時(shí)讓我們更好地理解PASCAL語(yǔ)言,為以后的實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。條件、假設(shè)和限制:由于知識(shí)和能力的限制,本游戲?qū)崿F(xiàn)的功能還不夠強(qiáng)大,可以改進(jìn)本游戲以增強(qiáng)游戲的功能??尚行匝芯糠椒ǎ和ㄟ^(guò)研究分析俄羅斯方塊的能力和實(shí)施方法,確定主要結(jié)構(gòu)。利用我現(xiàn)階段所能達(dá)到的能力,以最簡(jiǎn)單最容易的方式,開(kāi)發(fā)、測(cè)試、修改,實(shí)現(xiàn)一個(gè)初級(jí)的游戲軟件。評(píng)測(cè)規(guī)模:由于本軟件是初級(jí)產(chǎn)品,對(duì)它的要求也不算太苛刻,所以可以實(shí)現(xiàn)俄羅斯游戲的一般功能。2.3可行性分析技術(shù)可行性:開(kāi)發(fā)這款游戲有多種編程語(yǔ)言??紤]到語(yǔ)言的掌握,選擇PASCAL語(yǔ)言進(jìn)行游戲開(kāi)發(fā),使用PASCAL編程實(shí)現(xiàn)界面和事件控制。經(jīng)濟(jì)可行性:本游戲的開(kāi)發(fā)旨在完成畢業(yè)設(shè)計(jì)。不關(guān)注直接經(jīng)濟(jì)效益和后續(xù)發(fā)展方向。只注重自身水平和能力的提高,對(duì)自身經(jīng)濟(jì)要求不高。手機(jī)運(yùn)行相應(yīng)的JAVA程序就足夠了,不用考慮經(jīng)濟(jì)問(wèn)題。社會(huì)可行性:這款游戲的開(kāi)發(fā)主要是為了完成畢業(yè)設(shè)計(jì)。開(kāi)發(fā)的主體是個(gè)人,不存在違法行為,不會(huì)影響社會(huì)。這方面是完全可行的。3.外形設(shè)計(jì)3.1游戲設(shè)計(jì)方案的確定本游戲的設(shè)計(jì)采用MVC模式(Model-View-Controller),即本游戲的輸入、處理、輸出過(guò)程按照Model、View、Controller的方法進(jìn)行分離,這樣設(shè)計(jì)這個(gè)游戲分為三層——模型層、視圖層、控制層。MVC模型圖如下所示:3.2系統(tǒng)流程結(jié)構(gòu)設(shè)計(jì)觸發(fā)按鍵事件圖形工廠類(lèi)觸發(fā)按鍵事件圖形工廠類(lèi)圖形類(lèi)障礙物類(lèi)中央控制器處理按鍵事件處理邏輯顯示面板顯示生產(chǎn)3.3各功能模塊圖設(shè)計(jì)3.3.1模型層(Model)功能框圖設(shè)計(jì)圖形工廠圖形工廠圖形障礙物生產(chǎn)圖形下落產(chǎn)生障礙物3.3.2視圖層(View)功能模塊設(shè)計(jì)游戲面板游戲面板GamePanel方塊的顯示障礙物的顯示3.3.3控制層(Controller)功能模塊設(shè)計(jì)中央控制器中央控制器Controller類(lèi)圖形工廠生產(chǎn)圖形顯示面板顯示圖形和障礙物處理按鍵和鼠標(biāo)事件4.詳細(xì)設(shè)計(jì)代碼{ Tetris-經(jīng)典游戲的MIDletPascal實(shí)現(xiàn)。 您可以免費(fèi)使用此代碼,請(qǐng)?jiān)谀?擁有自己的意愿,使用它,分發(fā)它等,只要你做出沒(méi)有任何利潤(rùn) 。}程序俄羅斯方塊;常量 字段寬度=10; 場(chǎng)高=15;var gameField:array[1..fieldWidth,1..fieldHeight]的整數(shù); 塊:整數(shù)數(shù)組[1..4,1..4]; 塊X,塊Y:整數(shù); 塊大?。赫麛?shù); 屏幕寬度,屏幕高度:整數(shù); screenX,screenY:整數(shù); 分?jǐn)?shù):整數(shù); 時(shí)間:整數(shù); 游戲運(yùn)行:布爾值; 游戲速度延遲:整數(shù); pauseCommand、quitCommand、clickedCommand:命令; 游戲暫停:布爾值;程序rotateRight;向前;函數(shù)blockPositionValid:布爾值;向前;{ welcomeScreen-顯示惠康屏幕}程序歡迎屏幕;變量文本顯示:字符串;textXPos:整數(shù);textYPos:整數(shù);鍵碼:整數(shù);開(kāi)始 setColor(255,0,255);fillRect(0,0,screenWidth,screenHeight);setColor(0,0,255);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_BOLD,FONT_SIZE_LARGE);textToDisplay:='俄羅斯方塊';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;textYPos:=(screenHeight-getStringHeight(textToDisplay))/2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);setColor(0,0,0);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_PLAIN,FONT_SIZE_SMALL);textToDisplay:='使用MIDletPascal創(chuàng)建';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);textToDisplay:='按任意鍵';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;drawText(textToDisplay,textXPos,textYPos);重繪;{等到用戶(hù)按下任意鍵}重復(fù)keyCode:=getKeyClicked;直到keyCode<>0;結(jié)尾;{gameOver-顯示游戲結(jié)束畫(huà)面}函數(shù)gameOver:布爾值;變量文本顯示:字符串;textXPos:整數(shù);textYPos:整數(shù);鍵碼:整數(shù); 新游戲:命令;退出:命令;clickedCommand:命令;開(kāi)始設(shè)置顏色(255、255、255);fillRect(0,0,screenWidth,screenHeight);setColor(255,0,0);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_BOLD,FONT_SIZE_LARGE);textToDisplay:='游戲結(jié)束!';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;textYPos:=(screenHeight-getStringHeight(textToDisplay))/2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);重繪;newGame:=createCommand('Play',CM_SCREEN,1); 退出:=createCommand('退出',CM_EXIT,1); 添加命令(新游戲); 添加命令(退出);{等到用戶(hù)按下任意鍵}重復(fù)延遲(100);clickedCommand:=getClickedCommand;直到(clickedCommand<>emptyCommand);如果clickedCommand=退出然后 游戲結(jié)束:=真; 別的 游戲結(jié)束:=假; 刪除命令(新游戲); 刪除命令(退出);結(jié)尾;{ setSizes-計(jì)算單個(gè)塊的大小 以及比賽場(chǎng)地的位置}程序集大?。籿arblockWidth,blockHeight:整數(shù);開(kāi)始 屏幕寬度:=獲取寬度; 屏幕高度:=getHeight; 塊寬度:=屏幕寬度/字段寬度; 塊高度:=屏幕高度/字段高度; 如果blockHeight>blockWidth那么 塊大?。?塊寬度; 別的 塊大?。?塊高度; screenX:=(screenWidth-blockSize*fieldWidth)/2; screenY:=(screenHeight-blockSize*fieldHeight)/2;結(jié)尾;{ initializeGameField-使游戲字段為空}過(guò)程初始化游戲場(chǎng);變量i,j:整數(shù);開(kāi)始 對(duì)于i:=1到fieldWidth做 對(duì)于j:=1到fieldHeight做 游戲場(chǎng)[i,j]:=0;結(jié)尾;{ drawScore-在屏幕上以黑色書(shū)寫(xiě)分?jǐn)?shù)}程序drawScore;var stringWidth,stringHeight:整數(shù); 輸出文本:字符串;開(kāi)始 outputText:='行數(shù):'+分?jǐn)?shù); stringWidth:=getStringWidth(outputText); stringHeight:=getStringHeight(outputText); setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_PLAIN,FONT_SIZE_SMALL); setColor(0,0,0); drawText(outputText,(screenWidth-stringWidth)/2, (screenHeight-stringHeight)/2);結(jié)尾;{ drawBlock-繪制單個(gè)游戲塊}過(guò)程drawBlock(col,row,color:integer);var red,green,blue:整數(shù);開(kāi)始 {設(shè)置顏色} 如果顏色=1那么紅色:=255; 如果顏色=2那么綠色:=255; 如果顏色=3那么藍(lán)色:=255; 如果color=4則開(kāi)始red:=255;綠色:=255;結(jié)尾; 如果color=5則開(kāi)始red:=255;藍(lán)色:=255;結(jié)尾; 如果顏色=6,則開(kāi)始綠色:=255;藍(lán)色:=255;結(jié)尾; if(color<>0)and(row>0)and(row<=fieldHeight)and(col>0)和(col<=fieldWidth)然后 開(kāi)始 行:=行; col:=col-1; {繪制光塊填充} 設(shè)置顏色(紅、綠、藍(lán)); fillRect(screenX+col*blockSize,screenHeight-screenY-row*blockSize,blockSize,blockSize); {在方塊周?chē)?huà)出黑色邊框} 設(shè)置顏色(紅色/2,綠色/2,藍(lán)色/2); drawRect(screenX+col*blockSize,screenHeight-screenY-row*blockSize,blockSize,blockSize); 結(jié)尾; 結(jié)尾;{ redrawGameScreen-用所有塊重繪屏幕}程序重繪游戲屏幕;var i,j:整數(shù);開(kāi)始 setColor(0,0,0); fillRect(0,0,screenWidth,screenHeight); 設(shè)置顏色(255、255、255); fillRect(screenX,screenY,fieldWidth*blockSize+1,fieldHeight*blockSize+1); {繪制向下的塊} 對(duì)于i:=1到fieldWidth做 對(duì)于j:=1到fieldHeight做 drawBlock(i,j,gameField[i,j]); {畫(huà)下落的方塊} 對(duì)于i:=1到4做 對(duì)于j:=1到4做 drawBlock(i+blockX,j+blockY,block[i,j]); {繪制分?jǐn)?shù)文本} 繪制分?jǐn)?shù); 重繪;結(jié)尾;{ createNewBlock-創(chuàng)建新的下落塊。如果你想 要更改下降的形狀,請(qǐng)?jiān)诖颂庍M(jìn)行。}程序創(chuàng)建新塊;varx,形狀:整數(shù);開(kāi)始 形狀:=隨機(jī)(7); x:=隨機(jī)(6)+1; 如果形狀=0那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=x;塊[3,4]:=x;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=x;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=0;塊[3,2]:=0;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=1那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=x;塊[3,4]:=0;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=0;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=x;塊[3,2]:=0;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=x;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=2那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=x;塊[3,4]:=0;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=x;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=0;塊[3,2]:=x;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=3那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=0;塊[3,4]:=x;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=x;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=x;塊[3,2]:=0;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=4那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=x;塊[3,4]:=0;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=0;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=x;塊[3,2]:=x;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=5那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=0;塊[3,4]:=x;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=0;塊[3,3]:=x;塊[4,3]:=0; 塊[1,2]:=0;塊[2,2]:=x;塊[3,2]:=x;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 如果形狀=6那么 開(kāi)始 塊[1,4]:=0;塊[2,4]:=0;塊[3,4]:=0;塊[4,4]:=0; 塊[1,3]:=0;塊[2,3]:=x;塊[3,3]:=0;塊[4,3]:=0; 塊[1,2]:=x;塊[2,2]:=x;塊[3,2]:=x;塊[4,2]:=0; 塊[1,1]:=0;塊[2,1]:=0;塊[3,1]:=0;塊[4,1]:=0; 結(jié)尾; 重繪游戲畫(huà)面;結(jié)尾;{ removeFullLines-檢查任何行是否已滿(mǎn)并將其刪除}程序removeFullLines;varlineFull:布爾值; i,j,k:整數(shù);開(kāi)始 對(duì)于i:=1到fieldHeight做 開(kāi)始 {檢查線路是否已滿(mǎn)} 全線:=真; 對(duì)于j:=1到fieldWidth做 如果gameField[j,i]=0那么lineFull:=false; {如果已滿(mǎn),請(qǐng)刪除它} 如果lineFull那么 開(kāi)始 對(duì)于k:=i+1到fieldHeight做 開(kāi)始 對(duì)于j:=1到fieldWidth做 游戲場(chǎng)[j,k-1]:=游戲場(chǎng)[j,k]; 結(jié)尾; {擦除第一行} 對(duì)于j:=1到fieldWidth做 游戲場(chǎng)[j,fieldHeight]:=0; 分?jǐn)?shù):=分?jǐn)?shù)+1; {加快游戲速度} 如果(分?jǐn)?shù)mod5)=0那么 游戲速度延遲:=游戲速度延遲*9/10; 我:=我-1; 結(jié)尾; 結(jié)尾;結(jié)尾;{ blockIsDown-當(dāng)阻塞時(shí)調(diào)用此過(guò)程 盡可能低地下降。}程序塊IsDown;var i,j:整數(shù);開(kāi)始 {復(fù)制塊數(shù)據(jù)} 對(duì)于i:=1到4做 對(duì)于j:=1到4做 開(kāi)始 如果塊[i,j]<>0那么 游戲場(chǎng)[i+blockX,j+blockY]:=block[i,j]; 結(jié)尾; {檢查是否可以刪除任何行} 刪除全線; blockX:=(fieldWidth-4)/2; blockY:=fieldHeight-4; {創(chuàng)建新塊} 創(chuàng)建新塊; {檢查塊是否可以放置在屏幕上} 如果不是blockPositionValid那么 游戲運(yùn)行:=假;結(jié)尾;{ blockPositionValid-如果 塊的當(dāng)前位置是好的。如果 塊的當(dāng)前位置不正確,因?yàn)?該塊與其他元素重疊或 因?yàn)槭浅鼍终?,返?錯(cuò)誤的;}函數(shù)blockPositionValid:布爾值;var i,j:整數(shù); x,y:整數(shù);開(kāi)始 blockPositionValid:=true; 對(duì)于i:=1到4做 對(duì)于j:=1到4做 開(kāi)始 如果塊[i,j]<>0那么 開(kāi)始 x:=塊X+i; y:=塊Y+j; 如果x<=0那么blockPositionValid:=false;別的 如果x>fieldWidth然后blockPositionValid:=false;別的 如果y<=0則blockPositionValid:=false;別的 如果y>fieldHeight則blockPositionValid:=false;別的 如果gameField[x,y]<>0那么blockPositionValid:=false; 結(jié)尾; 結(jié)尾;結(jié)尾;{ rotateLeft-向左旋轉(zhuǎn)一個(gè)塊}程序旋轉(zhuǎn)左;vari,j,t:整數(shù);開(kāi)始 {轉(zhuǎn)置塊} 對(duì)于i:=1到4做 對(duì)于j:=i到4做 開(kāi)始 t:=塊[i,j]; 塊[i,j]:=塊[j,i]; 塊[j,i]:=t; 結(jié)尾; {做垂直鏡像變換} 對(duì)于i:=1到4做 開(kāi)始 t:=塊[i,1]; 塊[i,1]:=塊[i,4]; 塊[i,4]:=t; t:=塊[i,2]; 塊[i,2]:=塊[i,3]; 塊[i,3]:=t; 結(jié)尾; 如果不是blockPositionValid那么 右旋; 別的 重繪游戲畫(huà)面;結(jié)尾;{ rotateRight-向右旋轉(zhuǎn)一個(gè)方塊}程序rotateRight;vari,j,t:整數(shù);開(kāi)始 {轉(zhuǎn)置塊} 對(duì)于i:=1到4做 對(duì)于j:=i到4做 開(kāi)始 t:=塊[i,j]; 塊[i,j]:=塊[j,i]; 塊[j,i]:=t; 結(jié)尾; {做水平鏡像變換} 對(duì)于i:=1到4做 開(kāi)始 t:=塊[1,i]; 塊[1,i]:=塊[4,i]; 塊[4,i]:=t; t:=塊[2,i]; 塊[2,i]:=塊[3,i]; 塊[3,i]:=t; 結(jié)尾; 如果不是blockPositionValid那么 向左旋轉(zhuǎn); 別的 重繪游戲畫(huà)面;結(jié)尾;{ moveBlock-移動(dòng)方塊并檢查方塊是否 可以移動(dòng)到給定位置}過(guò)程moveBlock(deltaX,deltaY:integer);開(kāi)始 區(qū)塊X:=區(qū)塊X+deltaX; 塊Y:=塊Y+deltaY; 如果不是blockPositionValid那么 開(kāi)始 區(qū)塊X:=區(qū)塊X-deltaX; 塊Y:=塊Y-deltaY; 如果(deltaY<>0)那么 塊下; 結(jié)尾; 別的 重繪游戲畫(huà)面;結(jié)尾;{ processKeyActions-讀取鍵盤(pán)并運(yùn)行需要命令}過(guò)程processKeyActions;var 鍵:整數(shù);開(kāi)始 鍵:=keyToAction(getKeyClicked); 如果key=GA_UP然后rotateLeft; 如果key=GA_FIRE然后rotateRight; 如果key=GA_DOWN然后moveBlock(0,-1); 如果key=GA_LEFT然后moveBlock(-1,0); 如果key=GA_RIGHT然后moveBlock(1,0);結(jié)尾;{ checkTime-檢查游戲速度間隔是否已過(guò); 如果是,則將塊向下移動(dòng)一位}程序檢查時(shí)間;var currentTime:整數(shù);開(kāi)始 當(dāng)前時(shí)間:=getRelativeTimeMs; if((currentTime-time)>gameSpeedDelay)或((currentTime-time)<0)然后 開(kāi)始 移動(dòng)塊(0,-1); 時(shí)間:=當(dāng)前時(shí)間; 結(jié)尾;結(jié)尾;{ 主程序-初始化游戲,讀取鍵盤(pán)輸入并測(cè)量時(shí)間}開(kāi)始 設(shè)置尺寸; 歡迎屏幕; 設(shè)置默認(rèn)字體; 重復(fù) 初始化游戲場(chǎng); 游戲速度延遲:=500;{500毫秒=0.5秒} 分?jǐn)?shù):=0; 創(chuàng)建新塊; blockX:=(fieldWidth-4)div2; blockY:=fieldHeight-4; 時(shí)間:=getRelativeTimeMs; 游戲運(yùn)行:=真; 重繪游戲畫(huà)面; 游戲暫停:=假; pauseCommand:=createCommand('Pause',CM_SCREEN,1); quitCommand:=createCommand('Quit',CM_EXIT,1); 添加命令(暫停命令); 添加命令(退出命令); 在游戲運(yùn)行時(shí) 開(kāi)始 if(notisMidletPaused)和(notgamePaused)then 開(kāi)始 進(jìn)程鍵操作; 檢查時(shí)間; 結(jié)尾; clickedCommand:=getClickedCommand; 如果clickedCommand=quitCommand那么 開(kāi)始 游戲運(yùn)行:=假; 停; 結(jié)尾; 如果clickedCommand=pauseCommand那么 gamePaused:=不是gamePaused; 結(jié)尾; 刪除命令(暫停命令); 刪除命令(退出命令); 直到游戲結(jié)束;結(jié)尾評(píng)測(cè)規(guī)模:由于本軟件是初級(jí)產(chǎn)品,對(duì)它的要求也不算太苛刻,所以可以實(shí)現(xiàn)俄羅斯游戲的一般功能。總結(jié)游戲設(shè)計(jì)和實(shí)踐是一項(xiàng)復(fù)雜而龐大的工作。選了題目之后,我才意識(shí)到這個(gè)過(guò)程的難度。因?yàn)橹皼](méi)有接觸過(guò)游戲設(shè)計(jì),所以剛開(kāi)始有點(diǎn)迷茫和猶豫。后來(lái)通過(guò)看書(shū)和上網(wǎng)查資料,逐漸找到了一些感受,也根據(jù)資料自己整理了一些簡(jiǎn)單經(jīng)典的游戲。本文僅以俄羅斯方塊為例進(jìn)行說(shuō)明。這個(gè)設(shè)計(jì)讓我對(duì)電子游戲所涉及的相關(guān)技術(shù)和方法有了初步的了解,包括電子游戲分類(lèi)、選題、構(gòu)思等。并實(shí)現(xiàn)了幾個(gè)可演示的游戲軟件,其中很多應(yīng)用了學(xué)習(xí)相關(guān)的技術(shù),實(shí)現(xiàn)了圖文并茂的結(jié)合,可以實(shí)際演示。設(shè)計(jì)過(guò)程中最讓人印象深刻的收獲是:1.學(xué)到了很多新知識(shí),復(fù)習(xí)了舊知識(shí)。經(jīng)過(guò)長(zhǎng)時(shí)間的學(xué)習(xí),我對(duì)C++語(yǔ)言更加熟悉了。2.通過(guò)不斷的電腦實(shí)驗(yàn),調(diào)試程序,總結(jié)經(jīng)驗(yàn),從不懂題目到能動(dòng)手,提出問(wèn)題,想辦法解決問(wèn)題,多靠自己練習(xí),動(dòng)手能力有了得到了增強(qiáng)。3.提高中英文資料的檢索能力。在這次畢業(yè)設(shè)計(jì)的過(guò)程中,我查了很多資料,不僅是圖書(shū)館的期刊、雜志、書(shū)籍,還有網(wǎng)絡(luò)中的電子文檔、電子書(shū)、網(wǎng)頁(yè)和下載的視頻教學(xué)課程;不僅有中文資料,還有英文資料。材料。這些材料開(kāi)闊了我的視野,讓我對(duì)這個(gè)學(xué)科的理解更加深刻,讓我在編寫(xiě)程序時(shí)思路更加清晰,也避免了很多彎路。但如果你真的想從事游戲設(shè)計(jì)工作,還有很長(zhǎng)的路要走。即便是國(guó)際知名的大公司,也在不斷的探索和實(shí)踐中不斷前行。但這并不意味著未來(lái)渺茫。通過(guò)這種做法,進(jìn)行了自下而上和自上而下的歸納和演繹過(guò)程。面對(duì)瞬息萬(wàn)變的游戲,我終于明白了一點(diǎn)它的奧秘。一個(gè)復(fù)雜的、采用各種表達(dá)手段的游戲世界,無(wú)論多么復(fù)雜,都可以通過(guò)一定程度的歸納和演繹,找到適合其規(guī)則和表現(xiàn)的擬合點(diǎn)?;仡欉@個(gè)設(shè)計(jì)過(guò)程,我學(xué)到了很多書(shū)本上沒(méi)有的東西。通過(guò)這次制作的軟件,豐富了自己的實(shí)踐技能,拓展了專(zhuān)業(yè)知識(shí),讓我受益匪淺。同時(shí),我也經(jīng)歷了軟件開(kāi)發(fā)的困難。在這個(gè)設(shè)計(jì)的同時(shí),我也從中學(xué)到了很多。但是,由于我只是處于這種軟件開(kāi)發(fā)的起步階段,所以對(duì)它了解不多。可能還有很多不足之處。有些模塊做的不是很好,有些功能不能完全實(shí)現(xiàn)。塊會(huì)提前顯示。因此,它不是很好。界面的設(shè)計(jì)和整體布局都比較簡(jiǎn)單,沒(méi)有什么突出的特點(diǎn)。這也可能是我系統(tǒng)的不足之處。至我的論文是在導(dǎo)師易老師的悉心指導(dǎo)下完成的。他嚴(yán)肅的科學(xué)態(tài)度、嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)精神和卓越的工作作風(fēng)深深地感染和鼓舞了我。從選題到最終完成項(xiàng)目,易總一直給予我細(xì)心的指導(dǎo)和不懈的支持。謹(jǐn)向易老師表示誠(chéng)摯的敬意和崇高的敬意。在此,我還要感謝所有一起快樂(lè)度過(guò)大學(xué)生活的可愛(ài)的同學(xué)和尊敬的老師們。正是因?yàn)橛心銈兊膸椭椭С?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圓形草屋 施工方案
- 電梯鋼結(jié)構(gòu)施工方案
- 2025年度木工雕刻技藝傳承與勞務(wù)合作合同
- 2025年度旅游管理公司高層管理人員聘用合同
- 二零二五年度茶葉電商平臺(tái)合作合同
- 二零二五年度學(xué)校臨時(shí)教師聘用合同書(shū)-體育教練員合作合同
- 2025年度飯店員工績(jī)效考核與薪酬管理合同
- 二零二五年度無(wú)固定期限勞動(dòng)合同解除賠償金支付及賠償金執(zhí)行協(xié)議
- 2025年度汽修廠修理工勞動(dòng)合同續(xù)簽與調(diào)整合同
- 二零二五年度彩鋼棚建筑綠色生態(tài)施工合同
- 2024-2030年中國(guó)稅務(wù)師事務(wù)所行業(yè)管理模式及投資前景展望報(bào)告版
- 2024年全國(guó)高考英語(yǔ)試題及答案-湖南卷
- 《少兒汽車(chē)知識(shí)講座》課件
- 部編人教版小學(xué)四年級(jí)下冊(cè)道德與法治全冊(cè)教案及每課教學(xué)反思
- 中建吊籃安拆專(zhuān)項(xiàng)施工方案(專(zhuān)家論證版)
- 《汽車(chē)維修接待實(shí)務(wù)》 課件全套 孫麗學(xué)習(xí)情景1-8 汽車(chē)維修服務(wù)接待認(rèn)知 -新能源汽車(chē)維修接待
- 2020年礦建監(jiān)理工作總結(jié)
- 獸醫(yī)學(xué)英語(yǔ)詞匯【參考】
- WS 308-2019 醫(yī)療機(jī)構(gòu)消防安全管理
- (高鴻業(yè))微觀經(jīng)濟(jì)學(xué)習(xí)題解析+微觀經(jīng)濟(jì)學(xué)題庫(kù)解析
- 浙江省溫州市2024-2025學(xué)年高三上學(xué)期一模英語(yǔ)試題 含解析
評(píng)論
0/150
提交評(píng)論