• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Android平臺(tái)的掃雷游戲設(shè)計(jì)與實(shí)現(xiàn)

      2020-08-20 07:48:50肖洪蘭
      商情 2020年36期

      肖洪蘭

      【摘要】本文開(kāi)發(fā)了益智類(lèi)掃雷手機(jī)游戲,分析了該游戲所需用到的API,探討了游戲的數(shù)據(jù)結(jié)構(gòu)及每個(gè)方格不同狀態(tài)的不同編碼,最后給出核心算法。游戲基于Android2.2.3平臺(tái)開(kāi)發(fā)實(shí)現(xiàn),可以運(yùn)行于任意主流的Android手機(jī)中。

      【關(guān)鍵詞】掃雷 ?Android ?View

      一、Android平臺(tái)簡(jiǎn)介

      Android是一個(gè)開(kāi)放的手機(jī)操作系統(tǒng)平臺(tái),為移動(dòng)設(shè)備提供了一個(gè)包含操作系統(tǒng)、中間件及應(yīng)用程序的軟件疊層架構(gòu)。Android SDK為開(kāi)發(fā)人員使用Java語(yǔ)言編寫(xiě)Android平臺(tái)下的應(yīng)用程序提供了必要的工具和API。Android和iPhone相比,其的優(yōu)點(diǎn)有:真正開(kāi)放、應(yīng)用程序相互平等、應(yīng)用程序溝通無(wú)界限。

      二、掃雷游戲的簡(jiǎn)介

      在掃雷游戲中,有N行M列個(gè)方格,每個(gè)方格包含三種狀態(tài):關(guān)閉、標(biāo)記為雷和打開(kāi),初始化時(shí)每個(gè)方格都是關(guān)閉的,你可以標(biāo)記某個(gè)方格是雷,預(yù)測(cè)該方格有雷(并不表示真的一定有雷);也可以打開(kāi)某個(gè)方格,一個(gè)打開(kāi)的方格也會(huì)包含兩種狀態(tài):一個(gè)數(shù)字和一個(gè)雷。如果你打開(kāi)的是一個(gè)雷,那么就是失敗;否則就會(huì)打開(kāi)一個(gè)數(shù)字,該數(shù)字是位于0到8之間的一個(gè)整數(shù),該數(shù)字表示其所有鄰居方格的所包含的雷數(shù)。一個(gè)已打開(kāi)的方格不能再關(guān)閉,標(biāo)記為雷可以取消標(biāo)記,當(dāng)一個(gè)方格標(biāo)記為雷后該方格不能打開(kāi)一個(gè)方格。所有標(biāo)記為雷的方格真的是雷則游戲勝利。

      三、掃雷游戲的設(shè)計(jì)及實(shí)現(xiàn)

      (一)主要的類(lèi)及方法方法介紹

      android.view.View為所有可視化控件的基類(lèi),主要提供繪制和事件處理的方法,boolean onTouchEvent(MotionEvent event)方法處理點(diǎn)擊屏幕的事件, onDraw(Canvas canvas) 方法處理繪制畫(huà)面,postInvalidate()方法會(huì)通知UI線(xiàn)程更新界面,UI線(xiàn)程會(huì)調(diào)用onDraw(Canvas canvas)重新繪制界面。

      java.util.Random為偽隨機(jī)數(shù)產(chǎn)生器,int nextInt(int n)方法返回0到n之間的整數(shù)值。通過(guò)調(diào)用nextInt()方法實(shí)現(xiàn)雷的位置隨機(jī)分布。

      android.graphics.Canvas能繪制各種圖形元素的類(lèi),drawBitmap()方法在指定位置繪制相應(yīng)的圖片。在該方法中繪制游戲中的所有界面。

      Runnable該接口和Thread類(lèi)一起使用run()方法,所有實(shí)現(xiàn)該接口的類(lèi)都可以提供線(xiàn)程的主體部分;必須實(shí)現(xiàn)run()方法,在該方法中改變便時(shí)間計(jì)數(shù)器的值,以達(dá)到計(jì)時(shí)的效果。

      (二)主要算法

      1.定義一個(gè)N行M列的二維數(shù)組int [][]map;每個(gè)元素的值所表示的意義如下

      (1)初始化時(shí),數(shù)組中的值只有[0,8]代表數(shù)值0至8,10表示是雷。

      (2)在顯示時(shí)14表示是標(biāo)記為雷的狀態(tài)圖片,15表示沒(méi)有打開(kāi)是關(guān)閉狀態(tài)圖,12表示碰雷的圖片,11表示最后失敗時(shí)顯示標(biāo)記為雷是錯(cuò)誤的圖片。

      (3)在玩游戲的過(guò)程中可以對(duì)某個(gè)方格標(biāo)記為雷,也可以打開(kāi)該方格,也可以取消標(biāo)記;也就是說(shuō)一個(gè)方格有三種種狀態(tài),這里準(zhǔn)備用同一個(gè)數(shù)組采用不同的編碼來(lái)表示三種不同的狀態(tài),[0,10]代表是數(shù)組初始化時(shí)的狀態(tài),也就是雷德位置及周?chē)臄?shù)值;標(biāo)記map[i1][j1]為雷則在修改map[i1][j1]=map[i1][j1]+20,取消標(biāo)記map[i1][j1]=map[i1][j1]-20;點(diǎn)開(kāi)時(shí)map[i1][j1]=map[i1][j1]+40;這樣在繪制游戲界面時(shí)做相反的變化就能正確表示當(dāng)前方格的狀態(tài),也能算出原來(lái)的初始化值。

      2.點(diǎn)擊方格區(qū)域的核心算法如下

      if(selectBT==14) //標(biāo)記為雷

      {

      if(map[i1][j1]<16)

      { map[i1][j1]+=20;minners--;}

      else if(map[i1][j1]>20&&map[i1][j1]<36){

      map[i1][j1]-=20;minners++;

      }

      }

      if(selectBT==15){//點(diǎn)開(kāi)

      if(map[i1][j1]==0)//點(diǎn)開(kāi)一片區(qū)域

      findNull(map, i1, j1);//深度優(yōu)先搜索八個(gè)方向

      else if(map[i1][j1]==10)//碰雷

      { map[i1][j1]+=42;

      logic.findAllMinners(map);//顯示所有的雷

      }

      else if(map[i1][j1]<9)//顯示數(shù)值

      map[i1][j1]+=40;

      }

      3.深度優(yōu)先搜索八個(gè)方向的核心代碼如下

      int direct[][]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}

      public void findNull(int[][]map,int i,int j){

      if((i<0||i>map.length-1)&&(j<0||j>map[i].length-1))return;//下標(biāo)越界返回

      if(map[i][j]==0){

      map[i][j]+=40;//已經(jīng)點(diǎn)開(kāi)

      for (int j2 = 0; j2 < direct.length; j2++) {//繼續(xù)展開(kāi)八個(gè)方向

      findNull(map, i+direct[j2][0], j+direct[j2][1]);

      }

      }

      if(map[i][j]>0&&map[i][j]<9)

      { map[i][j]+=40;//已經(jīng)點(diǎn)開(kāi)

      return;}

      return; }

      四、結(jié)束語(yǔ)

      掃雷游戲是一款比較經(jīng)典的Windows游戲,因?yàn)橹悄苁謾C(jī)用戶(hù)有不同的體驗(yàn)方式,如果能借助傳感器再加上適當(dāng)?shù)膭?chuàng)意,我相信掃雷游戲在手機(jī)上會(huì)有更多的用戶(hù)愿意去體驗(yàn)。

      參考文獻(xiàn):

      [1]吳亞峰,索伊娜.Android核心技術(shù)與實(shí)例詳解[M].電子工業(yè)出版社,2012.

      石泉县| 平舆县| 彭山县| 昭觉县| 浏阳市| 永新县| 静安区| 临潭县| 潜山县| 呼图壁县| 西乌珠穆沁旗| 白沙| 民乐县| 灵武市| 麦盖提县| 衡水市| 昆明市| 永仁县| 新宾| 和林格尔县| 呼和浩特市| 河北区| 平顺县| 囊谦县| 偃师市| 仙桃市| 昌平区| 定州市| 涞源县| 宜兰市| 嘉善县| 柳河县| 临猗县| 武汉市| 汉沽区| 阿拉善左旗| 吉隆县| 丰顺县| 东至县| 沅陵县| 南丹县|