freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于j2me的俄羅斯方塊手機(jī)游戲-資料下載頁

2025-06-22 01:04本頁面
  

【正文】 后,要將對應(yīng)的方塊數(shù)據(jù)讀 出,便于在屏幕上繪制。在該模塊中 readPattern()方法讀取對應(yīng) ID 值的 4 種數(shù)據(jù), readNextPattern()方法僅需讀取第一種旋轉(zhuǎn)變化即可,參數(shù) nowblock 為 blockpattern1~7 中的 一種。 一個方塊繪制需要首先調(diào)用 paint()方法清楚上次繪制的舊圖像, 然后調(diào)用繪制下墜方塊 的繪制方法 drawBlock()重新繪制,同時在使用 drawBlock()繪制方塊的方法時又需要調(diào)用 drawBrick()方法繪制方塊中的每一個方格,所以在進(jìn)行方塊的繪制需要用到: public void paint(Graphics g); public void drawBlock(Graphics g); public void drawBrick(int px,int py,Graphics g,int colorIndex)。 Paint()方法首先判斷需繪制方塊是否有狀態(tài)上的改變,是否平移、旋轉(zhuǎn)、加速下墜。如 果是則首先清楚下落方塊所在的范圍背景顏色,然后利用新的坐標(biāo)或旋轉(zhuǎn)值進(jìn)行繪制。 drawBlock()方法根據(jù)參數(shù) gamearea_x、gamearea_y 和 brick_Width 來決定需要繪制的坐標(biāo), 調(diào)用 drawBrick()方法來實(shí)際繪制圖形。F 方塊中方格的實(shí)際繪制方法定義于 drawBrick()方 法中。 isCrashAtBegin()方法用來判斷下落塊是不是和 map 中已有的磚塊重疊,設(shè)置返回值為 true 或者是 false,決定方塊下落的起始位置,即 y 值若為負(fù),則說明方塊的起始位置已經(jīng)超 出初始定義的游戲屏幕范圍,此時游戲狀態(tài)結(jié)束顯示 GAME_OVER。 游戲邏輯控制模塊 游戲邏輯控制模塊(TetrisCanvas 類) 。俄羅斯方塊游戲的邏輯控制和對 TetrisMap 類調(diào) 用 方 塊 繪 制 方 法 均 是 在 TeteisCanvas 類 中 實(shí) 現(xiàn) 的 , 它 繼 承 自 Canvas 類 , 實(shí) 現(xiàn) 了 CommandListener 和 Runnable 接口。 TetrisCanvas 類中首先定義看如下幾個成員變量來對本地玩家進(jìn)行設(shè)置: 30 (1) static int mainWidth 本地玩家屏幕寬度; (2) static int mainHeight 本地玩家屏幕高度; (3) static int BRICK_WIDTH 本地玩家磚塊的邊長; (4) static int GAMEAREA_X 本地玩家游戲區(qū)域左上角 x 坐標(biāo); (5) static int GAMEAREA_Y 本地玩家游戲區(qū)域左上角 y 坐標(biāo); (6) int gameState 本地玩家的游戲狀態(tài)。 若連接游戲, 則在屏幕上還需繪制遠(yuǎn)端玩家的游戲信息, 故需要設(shè)定遠(yuǎn)端玩家的參數(shù)值, 他們的命令方法和代表本地玩家的成員變量類似,簡單的增加一個_Remote 后綴即可。對這 些成員變量的設(shè)置為: static int mainWidth_Remote 遠(yuǎn)端玩家屏幕寬度; static int mainHeight_Remote 遠(yuǎn)端玩家屏幕高度; static int BRICK_WIDTH_Remote 遠(yuǎn)端玩家磚塊的邊長; static int GAMEAREA_X_Remote 遠(yuǎn)端玩家游戲區(qū)域左上角 x 坐標(biāo); static int GAMEAREA_Y_Remote 遠(yuǎn)端玩家游戲區(qū)域左上角 y 坐標(biāo); int gameState_Remote 遠(yuǎn)端玩家的游戲狀態(tài)。 public TetrisCanvas(MainMIDlet _midlet, BluetoothConnection[] btConns , String _role ){……} public void setSingleCanvas() public void setCanvas( ){……} private void addCommand(){……} protected void init() {……} public void initRemote(){……} public void outputParameters(){……} public void setReceiveThread(){……} public void run() {……} protected synchronized void keyPressed(int keyCode){……} public void paint(Graphics g){……} public void paint_Remote( Graphics g ){……} public static void clear(Graphics g){……} public static void clear_Remote(Graphics g){……} public void sendPN(){……} public void sendMapdata(){……} public void run(){……} public synchronized boolean receivePN( InputStream inputStream, int inp_Action){……} public void recevieMapdata(){……} 31 圖 12 TetrisCanvas 類中主要成員方法 TetrisCanvas 類的構(gòu)造方法是將一個 Midlet 的實(shí)例并將 BluetoothConnection 數(shù)組傳入, 對其的定義如圖 13 所示。 32 public TetrisCanvas( MainMIDlet _midlet, BluetoothConnection[] btConns , String _role ) { midlet = _midlet。 btConnections = btConns。 role = _role。 (role)。 if( !( == role )) { setCanvas()。 setReceiveThread()。 }else { setSingleCanvas()。 } } 圖 13 TetrisCanvas 類的構(gòu)造方法 由于游戲能夠?qū)崿F(xiàn) 1 對 1 的游戲,所以 BluetoothConnection 數(shù)組長度為 1,_role 為本 地玩家所選擇的游戲方式,有 Master、Slave 和 Single 三種,它們由 包中的 Role 類定義,Role 類的定義如下圖 14 所示。 public class Role { public static final String ROLE_MASTER = Master 主機(jī)(互聯(lián)模式下)。 public static final String ROLE_SLAVE = Slave 遠(yuǎn)端接入(互聯(lián)模式下)。 public static final String ROLE_SINGLE = Single 單人模式。 } 圖 14 游戲角色(Master、Slave 和 Single)選擇類定義 因?yàn)?TetrisCanvas 類實(shí)現(xiàn)了 Runnavle 接口,所以需定義 run()方法,用來調(diào)用 Canvas 的 paint()方法。Init()方法用來對代表本地玩家的游戲參數(shù)進(jìn)行設(shè)定,initRemote()方法與它的功 能類似。由于玩家要對游戲進(jìn)行控制,所以要對按鍵進(jìn)行設(shè)置并控制其響應(yīng),按鍵響應(yīng)在 TetrisCanvas 類實(shí)現(xiàn)父類的方法 keyPress()方法中實(shí)現(xiàn)。 若玩家進(jìn)行聯(lián)網(wǎng)游戲時, 就需要進(jìn)行數(shù)據(jù)的發(fā)送, 而本課題設(shè)定當(dāng)在一定條件下才進(jìn)行 數(shù)據(jù)發(fā)送,這幾種情況為: 按下命令按鈕引起游戲狀態(tài)的變化; 游戲過程中引起游戲狀態(tài)的變化; 游戲過程中失去連接時。 其中游戲過程中引起狀態(tài)的變化是指不論是否有行被消除, 只要有方塊落下固定在某個 位置,則本地玩家必須將地圖數(shù)據(jù)發(fā)送到遠(yuǎn)端。mandAction()方法定義了響應(yīng)命令引起 的狀態(tài)變化,需要將該信息發(fā)送給遠(yuǎn)端玩家。在游戲中,響應(yīng)玩家按鍵控制的信息,在屏幕 上的表現(xiàn)就是方塊的下降、旋轉(zhuǎn)、平移、消行等,這些狀態(tài)通過 paint()方法進(jìn)行處理實(shí)現(xiàn)。 TetrisCanvas 類中的 serialize()方法用來將繼承了 Serialization 接口的 TetrisMap 對象序列 33 化數(shù)據(jù)傳輸?shù)竭h(yuǎn)端用戶。 在 聯(lián) 機(jī) 游 戲 狀 態(tài) 下 , 不僅 要 發(fā) 送 本 地 游 戲 數(shù) 據(jù), 還 要 接 受 遠(yuǎn) 端 玩 家 游戲 數(shù) 據(jù) , SetReceiveThread()方法是生成接受線程,接受遠(yuǎn)端用戶的的命令信息及數(shù)據(jù)。 updataRemoteGameState()方法用來設(shè)置遠(yuǎn)端用戶的 game_State_Remote 值。receivePN() 方 法 用 來 繪 制 附 屏 上 所 需 繪 制 方 塊 的 ID 值 , 在 TetrisCanvas 類 中 聲 明 一 個 布 爾 值 b_receivedPN(),用它來判斷是否收到新的 PN 值(判斷是否收到新的當(dāng)前方塊和下一個方 塊的 ID 值,即遠(yuǎn)端玩家的剛才控制的方塊位置已經(jīng)固定,產(chǎn)生新的方塊) ,這個布爾值在 調(diào)用 paint_Remote 方法時要用到。PN 值用來設(shè)置 block_Remote 對象中的 pattern 和 next 方 塊的 ID 值。 receiveMapdata()用來接收遠(yuǎn)端用戶發(fā)來的對方游戲過程中的地圖數(shù)據(jù), 設(shè)置附屏上所需 要繪制的地圖數(shù)據(jù),在 TetrisCanvas 類中聲明一個布爾值 b_receivedMapdata,用它來判斷是 否收到新的 Map 值(在 paint_Remote()方法中需要使用) ,Map 值在 map_Remote 中需要使 用,用它來設(shè)置其中的 mapdata 二維數(shù)組。 游戲地圖存儲模塊 游戲地圖存儲模塊(TetrisMap 類)提供了如下功能: (1) 通過 mapdata[][]和 mapBlockExist[]兩個數(shù)組提供了對游戲地圖在數(shù)組上的邏輯表 示; (2) 提供了對游戲地圖中對應(yīng)方塊的消除和調(diào)整的算法; (3) 提供了對方塊的繪制方法 paint(),給 TetrisCanvas 類調(diào)用,把方塊繪制到屏幕上。 TetrisMap 類中主要成員方法圖 15 所示: public TetrisMap( TetrisCanvas canvas , boolean _isMaster){……} public void setParameters( boolean _isMaster){……} public void outputParameters(){……} public void setTetrisBlock( TetrisBlock block ){……} public void init(){……} public int get(int x, int y){……} public void set(int x, int y, int val){……} public void paint(Graphics g){……} public boolean check(Graphics g, int row){……} protected void deleteRow(Graphics g, int y){……} public void repaintMap(Graphics g){……} public void repaintMap_Remote( Graphics g ){……} public void drawBlockAll(Graphics g,int y){……} public void drawBlock(Graphics g, int y){……} private void paintScore(Graphics g){……} public void outputMapdata(){……} public void outputdeleteRowNum(){……} public void caculateScore(){……} 圖 15 TetrisMap 類中主要成員方法 在 TetrisMap 類中首先聲明了 mapdata[][]和 mapBlockExist[]兩個數(shù)組,mapdata 代表的 34 是地圖數(shù)據(jù),而 mapBlockExist 中保存的是布爾值,如果 mapBlockExist[i]=true,則表示第 i+1 行有磚塊。 TetrisMap 類的構(gòu)造方法如圖 16 所示。 public TetrisMap( TetrisCanvas canvas , boolean _isMaster) { = canvas。 //游戲地圖為一個高 1寬 12 的數(shù)組,mapBlockExist 代表一行 mapdata = new int[16][12]。 mapBlockExist = new boolean[16]。 setParameters(_isMaster)。 } 圖 16 TetrisMap 類的構(gòu)造方法 在 TetrisMap 類的構(gòu)造方法中可以看到,構(gòu)造方法中指定 TetrisCanvas 對象和一個布爾 值_isMaster,判斷自身代表的是主屏還是附屏。TetrisMap 對象根據(jù)主、附屏的不同,在 SetParameters()方法中為 TetrisCanvas 對象賦值,賦予不同的參數(shù)。 Init()方法用來初始化 TetrisMap 實(shí)例中的 mapdata 和 mapBlockExist 數(shù)據(jù)。地圖數(shù)據(jù)的 提取與設(shè)置在 get()和 set()方法中定義。Paint()方法首先清屏(根據(jù) TetrisMap 代表的是主屏 還是附屏來確定清除的區(qū)域) ,然后繪制非運(yùn)動磚塊。Check()方法用來判斷是否需要消行, 若需要消行返回值為 true,若不需要消行則返回 false,且在游戲中每次消行最多只能消去 4 行。deleteRow()是本地
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1