Android制作俄羅斯方塊游戲(完整)_第1頁
Android制作俄羅斯方塊游戲(完整)_第2頁
Android制作俄羅斯方塊游戲(完整)_第3頁
Android制作俄羅斯方塊游戲(完整)_第4頁
Android制作俄羅斯方塊游戲(完整)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、交通運(yùn)輸學(xué)院課程設(shè)計交通運(yùn)輸學(xué)院面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計學(xué) 院 交通運(yùn)輸學(xué)院 班 級 信管09 姓 名 許 文 學(xué) 號 200900820 成 績 指導(dǎo)老師 劉應(yīng)東 2012 年 7 月 8 日蘭州交通大學(xué)交通運(yùn)輸學(xué)院課程設(shè)計任務(wù)書所在系:信息管理與信息系統(tǒng) 課程名稱:面向?qū)ο蟪绦蛟O(shè)計 指導(dǎo)教師(簽名): 專業(yè)班級: 信管09 學(xué)生姓名: 許文 學(xué)號:200900820 一、課程設(shè)計題目基于安卓的俄羅斯方塊游戲開發(fā)二、課程設(shè)計的目的(1)提高學(xué)生思考與分析項目的能力。 (2)提高并加強(qiáng)學(xué)生面向?qū)ο蟮木幊趟枷搿#?)強(qiáng)化學(xué)生靈活的編寫程序并解決問題的能力。 三、課程設(shè)計的主要內(nèi)容和要求(包括原始

2、數(shù)據(jù)、技術(shù)參數(shù)、設(shè)計要求、工作量要求等) 1. 寫出詳細(xì)設(shè)計說明 2. 編寫程序代碼,調(diào)試程序使其能正確運(yùn)行 3. 設(shè)計完成的軟件要便于操作和使用 四、工作進(jìn)度安排 本課程設(shè)計一共安排3周時間,具體如下:第1周:完成分析與設(shè)計工作,對整個設(shè)計的功能及流程有清晰的認(rèn)識;第2周:完成開發(fā)工作;第3周:對設(shè)計中存在的問題進(jìn)行完善,完成設(shè)計報告。五、主要參考文獻(xiàn)1 劉志宏.Java程序設(shè)計教程.北京:航空工業(yè)出版社,2010年7月2 單興華.Java基礎(chǔ)與案例開發(fā)詳解.北京:清華大學(xué)出版社,2009年9月審核批準(zhǔn)意見系主任(簽字) 年月日指導(dǎo)教師評語及成績指導(dǎo)教師評語     &#

3、160;                     成績        導(dǎo)師簽字: 年 月 日 目錄俄羅斯方塊游戲在Android中的實現(xiàn)1引言11游戲背景及功能概述11.1背景概述11.2游戲簡介21.3功能概述21.4游戲操作方法42.游戲策劃及準(zhǔn)備工作52.1游戲策劃52.2游戲開發(fā)平臺62.3Android平臺下游戲的準(zhǔn)備工作63.游戲構(gòu)架74游戲中各個類中實現(xiàn)的功能85游戲的優(yōu)化與改進(jìn)8結(jié)論8參考文獻(xiàn)9附錄9附錄1.Elos.java文件代碼9附錄

4、2.ElosLogic.java文件代碼37附錄3.BuildConfig.java文件代碼38附錄4.R.java文件代碼38附錄5.AndroidManifest.xml文件代碼39附錄6.elos.xml文件代碼40附錄7.String.xml文件代碼4040俄羅斯方塊游戲在Android中的實現(xiàn)引言引言:簡要說明設(shè)計題目的目的、意義、內(nèi)容、主要任務(wù)等。俄羅斯方塊原本是前蘇聯(lián)科學(xué)家阿列克謝帕基特諾夫所開發(fā)的教育用軟件,之后開始提供授權(quán)給各個游戲公司,造成各平臺上軟件大量發(fā)行的現(xiàn)象。由于俄羅斯方塊具有的數(shù)學(xué)性、動態(tài)性與知名度,也經(jīng)常拿來作為游戲程序設(shè)計的練習(xí)題材。俄羅斯方塊曾經(jīng)造成的轟動與

5、造成的經(jīng)濟(jì)價值可以說是游戲史上的一件大事,它看似簡單但卻變化無窮,令人上癮。俄羅斯方塊上手極其簡單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說是史上任何一款游戲都無法相比的。從誕生發(fā)展至今俄羅斯方塊已經(jīng)可以在各個平臺上運(yùn)行了。本次游戲的開發(fā)就是基于Android 4.0系統(tǒng)和傳統(tǒng)俄羅斯方塊的游戲方法進(jìn)行的。1游戲背景及功能概述俄羅斯方塊(Tetris, 俄文:)是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它由俄羅斯人阿列克謝·帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的

6、一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。1.1背景概述俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟(jì)價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov 制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,而我國的用戶都是通過紅白機(jī)了解、喜歡上它的。現(xiàn)在Android手機(jī)游戲的興起又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對一般用戶來說,它的規(guī)則簡單,容易上手,且游戲過程變化無窮,而在&qu

7、ot;Android俄羅斯方塊"中,更有一些Android游戲所獨有的魅力更加方便簡單的操作模式,用戶可在任意的地方任意時間進(jìn)行游戲。1.2游戲簡介原本是前蘇聯(lián)科學(xué)家阿列克謝·帕基特諾夫所開發(fā)的教育用軟件,之后開始提供授權(quán)給各個游戲公司,造成各平臺上軟件大量發(fā)行的現(xiàn)象。Game Boy版的俄羅斯方塊在日本賣出424萬套,是Game Boy史上賣最好的游戲。海灣戰(zhàn)爭時,也是前線美軍最常拿消磨時間的游戲之一。由于俄羅斯方塊具有的數(shù)學(xué)性、動態(tài)性與知名度,也經(jīng)常拿來作為游戲程序設(shè)計的練習(xí)題材。俄羅斯方塊曾經(jīng)造成的轟動與造成的經(jīng)濟(jì)價值可以說是游戲史上的一件大事,它看似簡單但卻變化無窮

8、,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。俄羅斯方塊上手極其簡單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說是史上任何一款游戲都無法相比的。1.3功能概述1、一個用于擺放小型正方形的平面虛擬場地,其標(biāo)準(zhǔn)大?。盒袑挒?4,列高為25,以每個小正方形為單位。2、一組由4個小型正方形組成的規(guī)則圖形,英文稱為Tetromino,中文通稱為方塊共有7種,分別以S、Z、L、J、I、O、T這7個字母的形狀來命名。I:一次最多消除四層J(左右):最多消除三層,或消除二層L:最多消除三層,或消除二層O:消除一至二層S(左

9、右):最多二層,容易造成孔洞Z (左右):最多二層,容易造成孔洞T:最多二層(1)部分游戲有單格方塊,可以穿透固定的方塊到達(dá)最下層空位。其他的改版中出現(xiàn)更多特別的造型。方塊會從區(qū)域上方開始緩慢繼續(xù)落下。(2)玩家可以做的操作有:以90度為單位旋轉(zhuǎn)方塊,以格子為單位左右移動方塊,讓方塊加速落下。(3)方塊移到區(qū)域最下方或是著地到其他方塊上無法移動時,就會固定在該處,而新的方塊出現(xiàn)在區(qū)域上方開始落下。(4)當(dāng)區(qū)域中某一列橫向格子全部由方塊填滿,則該列會消失并成為玩家的得分。同時刪除的列數(shù)越多,得分指數(shù)上升。(5)當(dāng)固定的方塊堆到區(qū)域最上方而無法消除層數(shù)時,則游戲結(jié)束。(6)一般來說,游戲還會提示下

10、一個要落下的方塊,熟練的玩家會計算到下一個方塊,評估現(xiàn)在要如何進(jìn)行。由于游戲能不斷進(jìn)行下去對商業(yè)用游戲不太理想,所以一般還會隨著游戲的進(jìn)行而加速提高難度。3、通過設(shè)計者預(yù)先設(shè)置的隨機(jī)發(fā)生器不斷地輸出單個方塊到場地頂部,以一定的規(guī)則進(jìn)行移動、旋轉(zhuǎn)、下落和擺放,鎖定并填充到場地中。每次擺放如果將場地的一行或多行完全填滿,則組成這些行的所有小正方形將被消除,并且以此來換取一定的積分或者其他形式的獎勵。而未被消除的方塊會一直累積,并對后來的方塊擺放造成各種影響。4、如果未被消除的方塊堆放的高度超過場地所規(guī)定的最大高度(并不一定是20或者玩家所能見到的高度),則游戲結(jié)束。具體到每一款不同的游戲,其中的細(xì)

11、節(jié)規(guī)則都可能有千差萬別,但是以上的基本規(guī)則是相同的。1.4游戲操作方法1、安裝apk游戲安裝包,在Android手機(jī)的資源管理其中找到并點擊Elos.apk文件選擇安裝。圖1游戲開始前的界面截圖2、點擊游戲圖標(biāo)進(jìn)入游戲界面后按鍵盤的"MENU"按鈕,在彈出的菜單中選擇“開始”來開始游戲(如圖1所示)。3、游戲玩家可以再游戲中采用點擊“MENU”按鈕來選擇“暫?!?、“退出”、“開始”以實現(xiàn)暫停、退出、重新開始功能(如圖2所示)。圖2游戲中的界面截圖4、觸摸屏操作:系統(tǒng)缺省設(shè)置使用觸摸屏,用手指點擊方塊的左邊一次左移一格(長按則快速移動到最左邊);點擊方塊的右邊一次右移一格(長

12、按則快速移動到最右邊);點擊方塊本身旋轉(zhuǎn)方塊;點擊方塊的下邊一次向下移一格(長按則快速移動到最下邊)。5、計分牌顯示的內(nèi)容:“分?jǐn)?shù)”為本局游戲所得的分?jǐn)?shù),一次消一行100分、2行200分、3行400分、4行800分?!瓣P(guān)卡”為本局游戲所在的關(guān)卡,所在的關(guān)卡越高,難度越大。“時間”為本局游戲從開始到當(dāng)前所用的時間。2.游戲策劃及準(zhǔn)備工作2.1游戲策劃游戲的策劃是指對游戲中主要功能的實現(xiàn)方案進(jìn)行確定的過程,大型游戲需要縝密的策劃才可以開發(fā)。例如,呈現(xiàn)技術(shù)、目標(biāo)平臺等內(nèi)容。l 游戲設(shè)計本游戲為經(jīng)典俄羅斯方塊游戲,每一次消除一層加100分、2層200分、3層400分、4層800分。游戲中的方塊形狀都是

13、隨機(jī)生成的(共7種)。隨著難度的增加方塊下落的默認(rèn)速度會增加,游戲分?jǐn)?shù)沒有上限。l 呈現(xiàn)技術(shù)本游戲采用的游戲背景和其他圖片都是用美圖秀秀軟件編輯的。l 目標(biāo)平臺本游戲的目標(biāo)平臺為Android 4.0。l 操作方式游戲的操作方式為觸控操作,游戲菜單的彈出是通過鍵盤來操作的。2.2游戲開發(fā)平臺本次開發(fā)采用jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008開發(fā)包、eclipse-SDK-3.6.2-win32開發(fā)工具、android-sdk-windows開發(fā)包。l JDK(Java Development Kit)是Sun Microsystems針對

14、Java開發(fā)員的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java SDK。JDK 是整個Java的核心,包括了Java運(yùn)行環(huán)境,Java工具和Java基礎(chǔ)的類庫。JDK是學(xué)好Java的第一步。而專門運(yùn)行在x86平臺的Jrocket在服務(wù)端運(yùn)行效率也要比Sun JDK好很多。從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其版本也不斷更新,運(yùn)行效率得到了非常大的提高。l Eclipse(軟件開發(fā)者包)是Eclipse Platform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個具有豐富特性的開發(fā)環(huán)境,允許開發(fā)者有效地建造可以無縫集成到Ecli

15、pse Platform中的工具。Eclipse SDK由Eclipse項目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項目生產(chǎn)的軟件以 GPL發(fā)布,第三方組件有各自自身的許可協(xié)議。l Android SDK(Google Android專屬的軟件開發(fā)工具包),它是編寫Android應(yīng)用程序的基石。2.3Android平臺下游戲的準(zhǔn)備工作本游戲中用到的圖片資源見表1所示。表1游戲中所用到的圖片資源及說明圖片名稱大?。╧B)像素(w*h)用途a.jpg0.64724*25小方快圖案b.jpg0.64724*25小方快圖案c.jpg0.64724*25小方快圖案d.jpg0.

16、64724*25小方快圖案e.jpg0.64724*25小方快圖案f.jpg0.64724*25小方快圖案g.jpg0.64724*25小方快圖案h.jpg0.64724*25小方快圖案i.jpg0.64724*25小方快圖案icon.jpg7.96140*115游戲圖標(biāo)P4.jpg7.31522*780游戲背景3.游戲構(gòu)架本游戲中各個模塊的結(jié)構(gòu)如圖3所示。圖3游戲的總構(gòu)架l 前臺表示模塊主要用于游戲畫面的渲染。其中包括游戲界面和管理面版兩個模塊,游戲界面主要為游戲中出現(xiàn)的界面,比如:開始界面和游戲中界面。管理面板包括開始、退出、暫停三部分,主要為玩家提供控制游戲行進(jìn)和退出。l 游戲?qū)嶓w模塊主

17、要用于后臺游戲邏輯。本游戲中僅有方塊實體模塊一部分。方塊實體模塊主要負(fù)責(zé)對已落下、正在落下和即將落下的方塊圖案的顏色和形狀進(jìn)行控制,核對正在落下的方塊圖案的行進(jìn)路線、形狀變換進(jìn)行控制。l 數(shù)據(jù)存儲模塊包括游戲中關(guān)卡數(shù)據(jù)的存儲和的分?jǐn)?shù)據(jù)的存儲。游戲每一次啟動都將全部刪除上次啟動時所產(chǎn)生的數(shù)據(jù),重新進(jìn)行新的數(shù)據(jù)存儲。后臺運(yùn)行時重新進(jìn)入游戲不算做重啟游戲,故數(shù)據(jù)不會重置。l 工具類模塊將自身的靜態(tài)成員或者方法提供給游戲中的其他類使用。4游戲中各個類中實現(xiàn)的功能由于在本次游戲的開發(fā)中本人對代碼的注釋比較詳盡,故對各個類所實現(xiàn)的功能在代碼中都有較詳細(xì)的注釋。具體功能見附件代碼。5游戲的優(yōu)化與改進(jìn)到目前為

18、止本游戲已經(jīng)能實現(xiàn)俄羅斯方塊游戲本身的基本功能,但是有一些地方還值得優(yōu)化與改進(jìn)。下面提出幾點需要改進(jìn)的地方以便在下次開發(fā)時進(jìn)行必要的完善。l 加入本地游戲用戶列表和相關(guān)的一些面板(如積分排行榜);l 加入游戲聲音(本次游戲的開發(fā)由于主要用于蘭州交通大學(xué)交通運(yùn)輸學(xué)院信息管理與信息系統(tǒng)09級2012年暑期課程設(shè)計,時間有限沒有加入游戲聲音);l 取消重啟游戲后得分重置(由于本次開發(fā)沒有加入游戲用戶,數(shù)據(jù)的保存只能保存所有玩家的最高紀(jì)錄等信息,而無法保存某個玩家的個人最優(yōu)成績等);l 對界面中圖像進(jìn)行優(yōu)化(此次開發(fā)由于時間和精力有限對圖像的處理力求簡單,下次開發(fā)可以對圖像進(jìn)行比較深的加工);l 對游

19、戲中的一些BUG進(jìn)行改進(jìn)(到目前為止此游戲在中興U880Android2.3.7上使用沒有發(fā)現(xiàn)比如卡死等較大的BUG);結(jié)論面向?qū)ο笤O(shè)計方法以對象為基礎(chǔ),利用特定的軟件工具直接完成從對象客體的描述到軟件結(jié)構(gòu)之間的轉(zhuǎn)換。這是面向?qū)ο笤O(shè)計方法最主要的特點和成就。面向?qū)ο笤O(shè)計方法的應(yīng)用解決了傳統(tǒng)結(jié)構(gòu)化開發(fā)方法中客觀世界描述工具與軟件結(jié)構(gòu)的不一致性問題,縮短了開發(fā)周期,解決了從分析和設(shè)計到軟件模塊結(jié)構(gòu)之間多次轉(zhuǎn)換映射的繁雜過程,是一種很有發(fā)展前途的系統(tǒng)開發(fā)方法。通過此次Android游戲的開發(fā),使得我們更加深刻地理解了面向?qū)ο蟮木幊趟枷搿⒖嘉墨I(xiàn)1 劉志宏.Java程序設(shè)計教程.北京:航空工業(yè)出版社,

20、2010年7月2 單興華.Java基礎(chǔ)與案例開發(fā)詳解.北京:清華大學(xué)出版社,2009年9月附錄附錄1.Elos.java文件代碼package com.weirui;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;i

21、mport android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.Display;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.LinearLayo

22、ut;import android.widget.Toast;public class Elos extends Activity private final int SQUARELEMENT_NUMBERS = 7;private ElosLogic player = null;/定義一個自定義的類的量private ElosView evElos = null;private ElosStateView esvElos = null;private ElosLogic elosGuard = null;/定義界面數(shù)組private Drawable drArr = new Drawable

23、SQUARELEMENT_NUMBERS;/保存方塊的圖片private Drawable drArrCartoonBG = null;/保存背景圖片private int nElosHeight = 0;/定義一個保存組成方塊圖片的高的量private int nElosWidth = 0;/定義一個保存組成方塊圖片的寬的量private boolean bReset = true;/為true時表示開始private boolean bPause =true;/false表示用來暫停使用的int DRAWABLE_CHOICES = SQUARELEMENT_NUMBERS;/定義一個一個

24、變量用來隨機(jī)抽取圖片來組成圖形int ELOS_CHOICES = 15;int time=0;/時間int ntime=0;/累計時間int nTimeInterval = 500;/初始值為500表示第一關(guān)的總分為500*10int nCents = 0;/游戲得分int nStage = 1;/游戲關(guān)卡int nOldStage = 0;/定義上一個關(guān)卡數(shù)private int nTotalLines = 0;private int nTotalColumns = 0;/定義了左邊界面的數(shù)組行與列int nElosYOffset = 0;int nElosXOffset = 0;/定義了

25、屏幕的起始點private int nElosAreaWidth = 0;private int nElosAreaHeight = 0;/定義了左面界面的寬與高的量Thread thdTimer = null;/定義一個線程boolean bReportResult = false;/只有當(dāng)游戲失敗后值變?yōu)閠rue,會在屏幕上顯示結(jié)果boolean bPlaying = true;/當(dāng)變量為默認(rèn)的true表示線程里開始工作boolean start=false;int nPlayerChoice = 0;/當(dāng)獲得隨機(jī)抽取數(shù)表示要顯示那個方塊圖形時賦給這個變量int nDrawableChoi

26、ce = 0;/當(dāng)獲得隨機(jī)抽取數(shù)表示選用那張圖片做為構(gòu)造方塊圖形賦值給這個變量/獲取資源圖片private void RetriveDrawable(Context c)Resources res = c.getResources();drArr0 = res.getDrawable(R.drawable.a);drArr1 = res.getDrawable(R.drawable.b);drArr2 = res.getDrawable(R.drawable.c);drArr3 = res.getDrawable(R.drawable.d);drArr4 = res.getDrawable(R

27、.drawable.e);drArr5 = res.getDrawable(R.drawable.f);drArr6 = res.getDrawable(R.drawable.g);drArrCartoonBG = res.getDrawable(R.drawable.p4);/-由于沒有擬定每個小圖片的大小,所以調(diào)用函數(shù)獲得設(shè)定的寬和高-private int GetElosHeight(Drawable dr)return dr.getMinimumHeight();private int GetElosWidth(Drawable dr)return dr.getMinimumWidth

28、();/-private void AnnounceNewStage()/顯示關(guān)卡數(shù)并每關(guān)過后將下降速度加快if (nOldStage != nStage)Toast.makeText(this, "第" + nStage + "關(guān)", Toast.LENGTH_SHORT).show();nTimeInterval = nTimeInterval - (nStage - 1)*50;/每關(guān)后睡眠時間減少nOldStage = nStage;private void ClearStageAndCentsAfterFail()/開始的時候要清空關(guān)卡和分?jǐn)?shù)n

29、Cents = 0;nStage = 1;time=0;ntime=0;/-游戲失敗-private boolean IsElosGameFail()thdTimer=null;ElosLogic visit = elosGuard00;while (visit != null)if (visit.IsDraw() && !visit.bUnit) return true;visit = visit.GetElosLogicRight();/一直在左邊方框數(shù)組的第一行尋找存在有了圖片并被畫出的則返回true表示失敗return false;/-判斷要消去的行數(shù)-private

30、boolean IsWholeLineDrawed(ElosLogic logic)if (logic = null) return false;ElosLogic keep1, keep2;/定義兩個ElosLogic的變量keep1 = keep2 = logic;int nCount = 0;/通過兩個分別左右循環(huán)的來查看這一行是否需要消除while (keep1 != null)if (keep1.IsDraw()nCount+;keep1 = keep1.GetElosLogicLeft();keep2 = keep2.GetElosLogicRight();while(keep2

31、!= null)if (keep2.IsDraw()nCount+;keep2 = keep2.GetElosLogicRight();if (nCount = this.nTotalColumns) return true;/如果與列數(shù)相同,則需要消除返回truereturn false;private void ClearWholeLine(ElosLogic logic)/如果要消除,則將這一行全設(shè)定為不顯示if (logic = null) return;ElosLogic keep1, keep2;keep1 = keep2 = logic;while (keep1 != null)

32、keep1.SetDraw(false);keep1 = keep1.GetElosLogicLeft();keep2 = keep2.GetElosLogicRight();while(keep2 != null)keep2.SetDraw(false);keep2 = keep2.GetElosLogicRight();private void ElosLogicCopyAfterLineFull(ElosLogic src, ElosLogic des)des.bDraw = src.bDraw;src.bDraw = false;/把上一行設(shè)置成不繪制des.SetDrawable(s

33、rc.GetDrawable();/將下一行保存了上一行的圖片private void ElosLogicLineCopyAfterLineFull(ElosLogic logic)/沒消除掉行數(shù)都得自動下降Rect rtElos = logic.GetRect();Rect rtGuardZero = elosGuard00.GetRect();int nLineNumber = (rtElos.top - rtGuardZero.top)/rtElos.height();while (nLineNumber >= 1)for (int i = 0; i < this.nTota

34、lColumns; i+)/依次對下一行的每列都換成上一行的圖片ElosLogicCopyAfterLineFull(elosGuardnLineNumber - 1i, elosGuardnLineNumberi);nLineNumber-;int CheckGuard(ElosLogic elosPlayer)/每次不再下降的時候都要核對一遍進(jìn)行操作int nErasableLines = 0;if (elosPlayer = null) return nErasableLines;if (IsWholeLineDrawed(elosPlayer)ClearWholeLine(elosPl

35、ayer); ElosLogicLineCopyAfterLineFull(elosPlayer);nErasableLines+;if (elosPlayer.GetElosLogicDown() != null)/向上查兩行if (IsWholeLineDrawed(elosPlayer.GetElosLogicDown()ClearWholeLine(elosPlayer.GetElosLogicDown();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicDown();nErasableLines+;if (elosPlaye

36、r.GetElosLogicDown().GetElosLogicDown() != null)if (IsWholeLineDrawed(elosPlayer.GetElosLogicDown().GetElosLogicDown()ClearWholeLine(elosPlayer.GetElosLogicDown().GetElosLogicDown();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicDown().GetElosLogicDown();nErasableLines+;if (elosPlayer.GetElos

37、LogicUp() != null)/向上查一行if (IsWholeLineDrawed(elosPlayer.GetElosLogicUp()ClearWholeLine(elosPlayer.GetElosLogicUp();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicUp();nErasableLines+;return nErasableLines;/返回所要消除的行數(shù)/-以下三個函數(shù)是分別相應(yīng)當(dāng)按下左,右和下的時候組合方塊進(jìn)行的移動-private ElosLogic PlayerMoveDown(ElosLogic

38、elosPlayer, int nPlayerChoice)/如果向下可以移動的就得進(jìn)行操作if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableDown(elosPlayer) return elosPlayer; Drawable dr = elosPlayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer = elosPlayer.GetElosLogicDown();/這個數(shù)組已經(jīng)換成下一行的了elosPlayer = CreatePlayer(dr, nPlaye

39、rChoice, elosPlayer);/重新生成一個跟下落前一樣的方塊return elosPlayer;private ElosLogic PlayerMoveLeft(ElosLogic elosPlayer, int nPlayerChoice)if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableLeft(elosPlayer) return elosPlayer; Drawable dr = elosPlayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer

40、= elosPlayer.GetElosLogicLeft();elosPlayer = CreatePlayer(dr, nPlayerChoice, elosPlayer);return elosPlayer;private ElosLogic PlayerMoveRight(ElosLogic elosPlayer, int nPlayerChoice)if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableRight(elosPlayer) return elosPlayer; Drawable dr = elosPl

41、ayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer = elosPlayer.GetElosLogicRight();elosPlayer = CreatePlayer(dr, nPlayerChoice, elosPlayer);return elosPlayer;/-/-及時清空上一個圖形-private void ClearElosLogicUnitUnitTag(ElosLogic elosPlayer)if (elosPlayer = null) return;elosPlayer.bUnit = false;if (elosP

42、layer.GetElosLogicLeft() != null && elosPlayer.GetElosLogicLeft().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicLeft();if (elosPlayer.GetElosLogicRight() != null && elosPlayer.GetElosLogicRight().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicRight();if (elosPlayer.G

43、etElosLogicUp() != null && elosPlayer.GetElosLogicUp().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicUp();if (elosPlayer.GetElosLogicDown() != null && elosPlayer.GetElosLogicDown().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicDown();/-判斷下左右的值返回到函數(shù)IsRecursiveElosLog

44、ic中-private boolean IsElosLogicDownable(ElosLogic logic)/判斷它的下面情況if (logic = null) return false;if (logic.GetElosLogicDown() = null) return false;/表示圖形已經(jīng)到底了返回falseif (logic.GetElosLogicDown().bUnit) return true;/表示下面已經(jīng)有圖形了返回trueif (logic.GetElosLogicDown().IsDraw() return false;/下面的沒有繪制圖片則返回falseret

45、urn true;private boolean IsElosLogicLeftable(ElosLogic logic)if (logic = null) return false;if (logic.GetElosLogicLeft() = null) return false;if (logic.GetElosLogicLeft().bUnit) return true;if (logic.GetElosLogicLeft().bDraw) return false;return true;private boolean IsElosLogicRightable(ElosLogic lo

46、gic)if (logic = null) return false;if (logic.GetElosLogicRight() = null) return false;if (logic.GetElosLogicRight().bUnit) return true;if (logic.GetElosLogicRight().bDraw) return false;return true;/-/-通過上面三個函數(shù)返回值判斷下左右能否移動-boolean IsRecursiveElosLogicDownable(ElosLogic elosLogic)/利用上面函數(shù)返還值判斷方塊是否可以移動i

47、f (!IsElosLogicDownable(elosLogic) return false;elosLogic.bUnit = false;/每次對方塊中的一個數(shù)組量判斷不出是否可以下降是先將量賦為false表示沒有if (elosLogic.GetElosLogicDown() != null && elosLogic.GetElosLogicDown().bUnit)if(!IsRecursiveElosLogicDownable(elosLogic.GetElosLogicDown() /只要在一個方向不能動的時候就得將bUnit變?yōu)閠rue表示有量return fa

48、lse;elosLogic.bUnit = true;/知道通過上下左右檢查出的確不能移動在將他設(shè)定為truereturn true;private boolean IsRecursiveElosLogicLeftable(ElosLogic elosLogic)if (!IsElosLogicLeftable(elosLogic) return false;elosLogic.bUnit = false;if (elosLogic.GetElosLogicLeft() != null && elosLogic.GetElosLogicLeft().bUnit)if(!IsRe

49、cursiveElosLogicLeftable(elosLogic.GetElosLogicLeft()elosLogic.bUnit = true;return false;elosLogic.bUnit = true;return true;private boolean IsRecursiveElosLogicRightable(ElosLogic elosLogic)if (!IsElosLogicRightable(elosLogic) return false;elosLogic.bUnit = false;if (elosLogic.GetElosLogicRight() != null && elosLogic.GetElosLogicRight().bUnit)if(!IsRecursiveElosLogicRightable(elosLogic.GetElosLogicRight() elosLogic.bUnit = true;return false;elosLogic.bUnit = true;return true;/-/-獲得能否移動的結(jié)果后返回true和false的值給線程里-private bo

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論