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

正文內(nèi)容

基于j2me的俄羅斯方塊手機(jī)游戲-在線瀏覽

2024-08-02 01:04本頁面
  

【正文】 現(xiàn)在區(qū)域的最頂端; 然后每過一個(gè)固定時(shí)間間隔向下落一層, 玩家可以使用鍵盤控制方 塊向三個(gè)方向移動(dòng)和順逆時(shí)針旋轉(zhuǎn) 90 度。 當(dāng)方塊落到區(qū)域底部或者另一方塊之上將停止移動(dòng), 然后新的方塊會(huì)產(chǎn)生。 各模塊方案的選擇與論證 考慮到硬件的因素,J2ME 程序不能很大,通過已有的手機(jī)游戲來看,多數(shù)在 100 KB 以下。在 J2ME 程序比較小時(shí), 為了提高程序的執(zhí)行效率,通常的做法是只用一個(gè)類完成整個(gè)應(yīng)用程序。下面就對(duì)主要的模塊進(jìn)行可行性分析與論 證,尋找最優(yōu)設(shè)計(jì)。 其次還有按鍵分析模塊: 分析得到按鍵的含義, 做出響應(yīng); 響應(yīng)模塊: “左”、 “右”、 “下”、 “移動(dòng)”和“旋轉(zhuǎn)”幾個(gè)模塊,負(fù)責(zé)改變當(dāng)前方塊的狀態(tài)數(shù)據(jù);畫方塊模塊:位置移動(dòng)后,把方 塊畫到新的位置之上;檢查模塊:在每次狀態(tài)改變之前,對(duì)方塊企圖占用的區(qū)域加以檢查。如果方塊到底了,應(yīng)該固定在當(dāng)前位置,這可以調(diào)用前面 的畫方塊模塊實(shí)現(xiàn),同時(shí)再產(chǎn)生一個(gè)新的方塊。還有當(dāng)每次 方塊到底的時(shí)候,都需要檢查一下是否有新的層排滿了,如果有的話應(yīng)該消層。產(chǎn)生新方塊時(shí)也需要檢查其產(chǎn)生的位置,如果這個(gè)位 置已被占用,則游戲結(jié)束。 在設(shè)計(jì)時(shí)還要考慮到下墜塊下 墜時(shí)間和下墜速度的問題,在一個(gè)下墜塊位置固定后,則下一個(gè)下墜塊開始下墜,同時(shí)設(shè)計(jì) 一個(gè)定時(shí)器通過對(duì)其的調(diào)用,就可以實(shí)現(xiàn)對(duì)下墜塊速度的控制。 遠(yuǎn)/近端屏幕繪制 近端屏幕繪制 屏幕的繪制要考慮到單機(jī)模式和聯(lián)機(jī)模式, 在兩種模式下繪制有所不同。圖 a 為單機(jī)游戲屏幕示意圖。 12 圖 a 單機(jī)模式屏幕繪制示意圖 在聯(lián)網(wǎng)游戲模式下,屏幕的左半部分繪制兩個(gè)屏幕,這兩個(gè)屏幕一大一小,小屏幕顯示 的是遠(yuǎn)端玩家信息, 大屏幕繪制的是本地玩家的游戲狀態(tài), 在屏幕的左部分分別顯示本地玩 家和遠(yuǎn)端玩家的分?jǐn)?shù)、狀態(tài)、等級(jí)下一個(gè)墜落快等。 圖 b 聯(lián)機(jī)模式下手機(jī)屏幕繪制示意圖 在圖 b 中, 當(dāng)在進(jìn)行藍(lán)牙聯(lián)機(jī)模式下游戲時(shí), 通過設(shè)定一個(gè)固定的時(shí)間值來進(jìn)行對(duì)主屏 的刷新, 控制對(duì)下墜塊的繪制; 且在有新的下墜塊產(chǎn)生或進(jìn)行消行時(shí)也調(diào)用函數(shù)對(duì)主屏的屏 幕進(jìn)行重新繪制進(jìn)行刷新,而附屏通過傳輸過來的數(shù)據(jù)對(duì)屏幕進(jìn)行更新,設(shè)定一個(gè)時(shí)間值, 每過一定的時(shí)間則向遠(yuǎn)端發(fā)送一次數(shù)據(jù), 且每當(dāng)本地玩家有消行或新下墜塊產(chǎn)生時(shí), 也發(fā)送 數(shù)據(jù),這樣就保證了附屏更新的實(shí)時(shí)性。無線設(shè)備生產(chǎn)商已對(duì) JABWT 規(guī)范 做出反應(yīng),他們宣布移動(dòng)手機(jī)和其它產(chǎn)品將支持 JABWT 應(yīng)用。toolkit 的 Preferences Utility(使用偏好)提供了新 的 Bluetooth/OBEX 標(biāo)簽以進(jìn)行藍(lán)牙參數(shù)設(shè)置。這里對(duì) JSR82(JABWT)規(guī)范進(jìn)行簡(jiǎn)單講解。根據(jù) JSR 82 規(guī)范,所有 潛在藍(lán)牙系統(tǒng)都必須支持藍(lán)牙控制中心(BCC) ,該控制中心是一個(gè)控制面板,它的作用類 似于可以讓用戶或 OEM 給堆棧中的某些配置參數(shù)定義具體值得應(yīng)用程序,特別是,它將應(yīng) 用于堆棧初始化中。 JSR82 規(guī)范定義的 API 中包括 21 個(gè)類及接口。 JSR82 被設(shè)計(jì)為支持?jǐn)?shù)據(jù)傳輸,不支持語音傳輸。發(fā)現(xiàn)類包括設(shè)備的發(fā)現(xiàn)、服務(wù)發(fā)現(xiàn)和服務(wù)注冊(cè)的類或接口;通信類包括在串行剖面 層次、RFCOMM 層次、L2CAP 層次和 OBEX 層次建立連接和使用連接的類或接口;設(shè)備 管理類包括代表控制和管理的類或接口。 圖 c 基于 JSR82 的協(xié)議棧 JSR82(JABWT)與 MIDP、CLDC 的關(guān)如圖 d 所示,CLDC 是 MIDP 和 JSR82 的基礎(chǔ)。 圖 d JSR82 與 MIDP、CLDC 的層次關(guān)系 下面介紹設(shè)備管理 API。 本地設(shè)備類(LocalDevice 類)標(biāo)識(shí)了本地藍(lán)牙設(shè)備。 圖 e 本地設(shè)備類 本地設(shè)備提供了方法來返回關(guān)于本地設(shè)備的信息,并且能夠進(jìn)入 Bluetooth manager: (1) .getBluetoothAddress()返回藍(lán)牙設(shè)備地址; (2) .getDeviceClass()返回設(shè)備類; (3) .getFriendlyName()返回設(shè)備友好名稱, 藍(lán)牙設(shè)備名通常是用戶在藍(lán)牙控制中心為其 設(shè)置的; (4) .getRecord()返回一個(gè)指定藍(lán)牙連接的服務(wù)記錄; (5) .updateRecord()方法用來為指定的 ServiceRecord 更新 SDDB 服務(wù)記錄; 15 (6) .getDiscoverable()返回設(shè)備的可發(fā)現(xiàn)狀態(tài); (7) .setDiscoverable()設(shè)置設(shè)備的可發(fā)現(xiàn)狀態(tài); (8) .getDiscoveryAgent()返回一個(gè)參考給發(fā)現(xiàn)代理; (9) .getProperty()返回一個(gè)設(shè)備的藍(lán)牙屬性。 遠(yuǎn)端設(shè)備類(RemoteDevice)一個(gè) RemoteDevice 的實(shí)例代表了一個(gè)遠(yuǎn)端藍(lán)牙設(shè)備。典型的藍(lán)牙應(yīng)用程序和遠(yuǎn)端設(shè)備之間的關(guān)系是一對(duì)多,如圖 f 所示。 DeviceClass 類。CoD 包括一個(gè)主類,一個(gè)輔的類,和服務(wù)類型或服務(wù)類。 當(dāng)一個(gè)設(shè)備被發(fā)現(xiàn),同時(shí)他的類也會(huì)被發(fā)現(xiàn);當(dāng)發(fā)現(xiàn)代理調(diào)用 deviceDiscovered()時(shí), 其中一個(gè)參數(shù)就是 DeviceClass。 系統(tǒng)的最終方案 本軟件通過 NetBeans IDE 軟件搭建的 J2ME 環(huán)境開發(fā)平臺(tái),編寫 Java 應(yīng)用語言的手機(jī) 游戲程序。 考慮到游戲?yàn)槁?lián)機(jī)游戲, 因此在開發(fā)時(shí)應(yīng)該注意變量的區(qū)分, 應(yīng)在程序中定義兩組類似 的成員變量和常量, 類中除共享的成員變量外, 變量都需要定義成本地玩家和遠(yuǎn)端玩家兩份, 通過對(duì)遠(yuǎn)端變量增加_Remote(或者_(dá)REMOTE)后綴來區(qū)分本地變量和遠(yuǎn)端變量。 同時(shí)對(duì)與游戲的邏輯控制和地圖的控制也是本課題的重點(diǎn)之一,屏幕的繪制方法為兩 種,一種是玩家進(jìn)行時(shí)單機(jī)模式進(jìn)行游戲時(shí)的繪制方法,另一種為聯(lián)網(wǎng)模式下屏幕的繪制。游戲在進(jìn)行單機(jī)模式運(yùn)行時(shí),游戲的判定機(jī)制為:當(dāng)屏幕已被填滿 則判定游戲結(jié)束;而游戲在進(jìn)行聯(lián)網(wǎng)模式下運(yùn)行時(shí),通過藍(lán)牙接口實(shí)現(xiàn)數(shù)據(jù)的通信,在遠(yuǎn)端 屏幕被填滿, 判定游戲結(jié)束, 遠(yuǎn)端玩家主屏顯示游戲結(jié)束, 本地玩家游戲主屏顯示游戲勝利, 反之亦然。Master 端在搜索到 17 服務(wù)后, Slave 端的服務(wù)描述信息顯示在屏幕上, 將 若選擇 Singer 則進(jìn)行單機(jī)游戲; (2) Master 選擇想與之進(jìn)行游戲的 Slave (在搜素已存在的服務(wù)時(shí)可能不只一個(gè)) 建立 , 連接; (3) 按“開始”鍵,判斷遠(yuǎn)端玩家是否已經(jīng)同意開始游戲(進(jìn)入“等待”狀態(tài)) ,如果 沒有同意,則“等待” (GAME_WAIT) ,并且發(fā)送“等待”信號(hào)給遠(yuǎn)端玩家; (4) 按 “開始” 如果遠(yuǎn)端玩家已經(jīng) 鍵, “等待”GAME_WAIT)則 ( , “初始化”GAME_INIT) ( 游戲,同時(shí)發(fā)送該信號(hào)給遠(yuǎn)端玩家; (5) 開始游戲后,再按“開始”鍵,則進(jìn)入暫停(GAME_PAUSED)狀態(tài),再按次則 繼續(xù)運(yùn)行游戲(GAME_RUN)狀態(tài),兩種狀態(tài)可以相互切換; (6) 若收到對(duì)方游戲結(jié)束(GAME_OVER)的信號(hào),則主屏上顯示勝利(GAME_WIN) 畫面,附屏顯示示游戲失敗的畫面,若本地玩家游戲結(jié)束,則本地玩家主屏顯示游 戲失敗的畫面,附屏上顯示游戲勝利的畫面,并發(fā)送該信號(hào)給遠(yuǎn)端玩家; (7) 若遠(yuǎn)端玩家斷開連接或者退出,則本地玩家繼續(xù)游戲,代表遠(yuǎn)端玩家的 gameState 的值為 GAME_EXIT 或者為 GAME_DISCONNECTED,并停止發(fā)送數(shù)據(jù)。 根據(jù)設(shè)定的系統(tǒng)操作流程則可以進(jìn)行系統(tǒng)編程。 系統(tǒng)詳細(xì)構(gòu)成如圖 1 所示。 包中的 TetrisCanvas 類封裝了游戲邏輯,TetrisBlock 類定義了 7 種方塊及方塊的繪制方法, TetrisMap 類中保存的是游戲地圖中的數(shù)據(jù)。 19 圖 2 系統(tǒng)中類的關(guān)系圖 MainMIDlet 類為主程序類,主要控制游戲進(jìn)程;BluetoothDiscover 類為藍(lán)牙設(shè)備及服 務(wù)發(fā)現(xiàn)類;bluetoothConnection 類提供了藍(lán)牙保存功能;TetrisBlock 類對(duì)方塊生成與坐標(biāo)起 到控制作用;TetrisCanvas 類中定義了游戲的邏輯控制及對(duì) TetrisMap 類調(diào)用繪制的方法; TetrisMap 類實(shí)現(xiàn)了游戲地圖數(shù)據(jù)的存儲(chǔ); MasterSlaveSelect 類引導(dǎo)玩家進(jìn)入聯(lián)機(jī)游戲, 實(shí)現(xiàn) 了角色劃分;MasterThread 類及 SingleThread 類分別定義了本地玩家與遠(yuǎn)端玩家藍(lán)牙連接方 法;Serialization 接口定義了傳輸數(shù)據(jù)時(shí)數(shù)據(jù)的序列化及反序列話的方法。 20 圖 3 游戲運(yùn)行狀態(tài)圖 21 圖 3 為游戲運(yùn)行狀態(tài)圖,從圖中可以看出游戲運(yùn)行狀態(tài)的變化: 在啟動(dòng)游戲后,首先進(jìn)入角色(Master/Slave/Single)選擇畫面; 若選擇單機(jī)(Singer)模式則進(jìn)行單機(jī)游戲; 游戲開始后,再按“開始”鍵,則進(jìn)入暫停狀態(tài),再按次則恢復(fù)運(yùn)行游戲,兩種狀 態(tài)可以相互切換; 若游戲結(jié)束,則返回到角色(Master/Slave/Single)選擇畫面; 若選擇主機(jī)(Slave)模式,則向周圍廣播自己的服務(wù),然后等待;若選擇遠(yuǎn)端玩家 (Master)模式,則搜索周圍服務(wù)。 系統(tǒng)軟件流程圖 系統(tǒng)的軟件流程如下圖 4 所示。 22 圖 4 系統(tǒng)軟件流程圖 主要算法 現(xiàn)對(duì)本軟件設(shè)計(jì)中的一些主要算法進(jìn)行描述。 } END 判斷是否消行的算法 消行的判斷偽代碼 23 Public boolean check(Graphics g,int row) { IF map 中數(shù)據(jù)中已繪制方格數(shù)設(shè)定的游戲容器的一行方格數(shù) 不消行 ELSE map 數(shù)據(jù)中已繪制方格數(shù)=設(shè)定的游戲容器的一行方格數(shù) 消行 并且每次消行最多消去 4 行 } Public void repainMap(Graphics g) { IF 有空行//從容器底開始 IF 空行上方有磚塊 磚塊按次序向下移動(dòng) ELSE 不移動(dòng) } 判斷游戲狀態(tài)的算法 游戲狀態(tài)判斷偽代碼 IF 選擇 single setSingleCanvas(){} ELSE IF 選擇 Slave 建立主機(jī)、對(duì)周圍進(jìn)行藍(lán)牙廣播 ELSE IF 選擇選擇 Master 查找周圍有無藍(lán)牙服務(wù) 進(jìn)行游戲 Public boolean isCrashAtBegin(){} IF 游戲中方格超過容器部分 游戲結(jié)束 ELSE 繼續(xù)游戲 判斷方塊是否能夠進(jìn)行下移的算法 判斷方塊是否能夠下移偽代碼 24 Public boolean checkDown() { IF 下墜塊下方有方塊 不能下移 ELSE IF 下墜塊下方無方塊 可以下移 } 判斷方塊是否能夠進(jìn)行平移算法 判斷方塊是否能夠平移偽代碼 Public boolean checkDown() { IF 下墜塊平移方向有方塊或者平移方向?yàn)槿萜鞅?不能平移 ELSE IF 下墜塊平移方向無方塊、平移方向不是容器壁 可以下移 } 判斷方塊是否能夠進(jìn)行旋轉(zhuǎn)算法 判斷方塊是否能夠旋轉(zhuǎn)偽代碼 Public boolean checkRot() { IF 下墜塊旋轉(zhuǎn)范圍內(nèi)有方塊 不能旋轉(zhuǎn) ELSE IF 下墜塊旋轉(zhuǎn)范圍內(nèi)無方塊 可以旋轉(zhuǎn) } 模塊詳細(xì)分類及設(shè)計(jì) 按照設(shè)計(jì)的模塊的功能,可將系統(tǒng)劃分為: 游戲的主程序模塊; 邏輯控制模塊; 25 屏幕的繪制模塊; 方塊生成與坐標(biāo)控制模塊; 游戲地圖存儲(chǔ)模塊; 數(shù)據(jù)傳輸序列化模塊; 藍(lán)牙設(shè)備與服務(wù)的發(fā)現(xiàn)模塊; 主從角色選擇模塊; 主從線程模塊; 藍(lán)牙連接的保存模塊。 主程序模塊 主程序模塊(MainMIDlet 類) ,MainMIDlet 類派生自 MIDlet,并實(shí)現(xiàn) CommanfListener 接口,是本軟件研究的系統(tǒng)的入口類。 Public void startApp() {……} Public void srartUI() {……} Public void pauseApp() {……} public void destroyApp( boolean unconditional ) {……} public void showAlertAndExit( String t, String s, AlertType type ) {……} public void Exit() {……} public void mandAction(Command c, Displayable s) {……} public Display getDisplay() {……} public BluetoothDiscovery getDisc() {……} public void setCanvas( TetrisCanvas _canvas) {……} public TetrisCanvas getCanvas() {……} 26 圖 5 MainMIDlet 類中主要成員方法 現(xiàn)對(duì) MainMIDlet 類中主要成員方法進(jìn)行介紹: (1) MainMIDlet()方法是本類的構(gòu)造函數(shù),實(shí)現(xiàn)如下功能: a、通過引用 display 得到 Display 類對(duì)象; b、使用 ErrorScreen 的靜態(tài)方法 init(Image img,Display disp)進(jìn)行初始 c、構(gòu)造 BluetoothDiscover 類對(duì)象 disc; (2) startApp()方法實(shí)現(xiàn)如下功能: a、調(diào)用 name=().getFriendName()得到本 備名稱; b、設(shè)置 disc 的 UUID 值和 name; c、調(diào)用 startUI()方法進(jìn)行角色選擇畫面; (3) startUI()方法引導(dǎo)玩家進(jìn)行角色選擇畫面; (4) showAlertAndExit(String t,string s,AlertType type)方法構(gòu)造一個(gè) Alert 對(duì)象,標(biāo)題為 t,警告文本為 s,警告類型為 type
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1