自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AIR Android:編寫(xiě)主類Main(1)

移動(dòng)開(kāi)發(fā) Android
第一個(gè)AIR Android程序:翻轉(zhuǎn)黑白棋,本模塊將編寫(xiě)一個(gè)完整的移動(dòng)小游戲,并把它部署在手機(jī)上。因此,我們將親歷一個(gè)移動(dòng)程序完整的誕生過(guò)程,從程序設(shè)計(jì)、代碼編寫(xiě),到最后的安裝。在這個(gè)過(guò)程中會(huì)涉及很多Android開(kāi)發(fā)的技術(shù)細(xì)節(jié),讀者也可以近距離感受AIR帶來(lái)的開(kāi)發(fā)樂(lè)趣。本文為大家介紹編寫(xiě)主類Main。

編寫(xiě)主類Main

接下來(lái)編寫(xiě)主類Main的代碼。按照之前的設(shè)計(jì),主程序主要有以下兩個(gè)功能:

創(chuàng)建棋盤(pán)

處理用戶的交互動(dòng)作

下面先來(lái)實(shí)現(xiàn)***個(gè)功能。

1.創(chuàng)建棋盤(pán)

上一節(jié)使用了二維矩陣來(lái)描述地圖數(shù)據(jù),其實(shí)編寫(xiě)代碼沒(méi)那么復(fù)雜,直接用一個(gè)二維數(shù)組就可以實(shí)現(xiàn)這個(gè)功能,代碼如下:

 

  1. var gameMap:Array = new Array();      
  2. //每一行用一維數(shù)組來(lái)表示    
  3. gameMap[0] = [BLACK, WHITE, WHITE, BLACK];  
  4. gameMap[1] = [WHITE, BLACK, BLACK, WHITE];  
  5. gameMap[2] = [WHITE, BLACK, BLACK, WHITE];  
  6. gameMap[3] = [BLACK, WHITE, WHITE, BLACK]; 

 

BLACK和WHITE是兩個(gè)常量,這樣看起來(lái)更直觀。利用數(shù)組,正好將地圖上的信息全面展示出來(lái),從中可以看到每個(gè)棋子的初始狀態(tài)及在棋盤(pán)上的位置,創(chuàng)建棋盤(pán)的工作就變得簡(jiǎn)單多了,如代碼清單2-2所示。

代碼清單2-2 創(chuàng)建棋盤(pán)

  1. column_number = 4;  
  2.  var rowCount:uint = gameMap.length;  
  3.  var rowArray:Array;  
  4.  var i:uint, len:uint;  
  5.  var grid:Grid;  
  6.  //棋子的間距  
  7.  var space:int = 10;  
  8.  //根據(jù)數(shù)組創(chuàng)建棋盤(pán)  
  9.  for ( var row:uint = 0; row < rowCount; row++)  
  10.  {  
  11.          //獲取每一行的數(shù)據(jù)  
  12.          rowArray = gameMap[row];  
  13.          len = rowArray.length;  
  14.          for ( i = 0; i < len; i++)  
  15.          {  
  16.                  //創(chuàng)建Grid,并賦予初始值。GRID_RADIUS常量定義了棋子的尺寸  
  17.                  grid = new Grid(rowArray[i], GRID_RADIUS);  
  18.                  //計(jì)算出棋子在棋盤(pán)上的編號(hào)  
  19.                  grid.id = row * column_number + i;  
  20.                  //設(shè)置棋子的坐標(biāo)  
  21.                  grid.x = i * (GRID_RADIUS*2 + space);  
  22.                  grid.y = row * (GRID_RADIUS*2 + space);  
  23.                  //將棋子放在一個(gè)容器中,方便管理  
  24.                  grid_container.addChild(grid);  
  25.                  //按照編號(hào)將棋子保存在數(shù)組中,待以后查找  
  26.                  grids[grid.id] = grid;  
  27.          }  
  28.  } 

在創(chuàng)建棋盤(pán)時(shí),使用數(shù)組grids保存了對(duì)所有棋子的引用,且棋子在數(shù)組中的索引和棋子在棋盤(pán)上的編號(hào)一一對(duì)應(yīng),這樣在查找周邊棋子時(shí),只需要計(jì)算出周邊棋子的id即可。

棋盤(pán)創(chuàng)建完畢后,接下來(lái)處理用戶交互動(dòng)作。

2.處理用戶交互動(dòng)作

由于所有的棋子都被放在同一個(gè)容器中,因此可以只對(duì)容器添加監(jiān)聽(tīng)器,而不用監(jiān)聽(tīng)每個(gè)棋子的鼠標(biāo)事件,如代碼清單2-3所示。

代碼清單2-3 處理用戶交互動(dòng)作

  1. grid_container.addEventListener(MouseEvent.CLICK, onClickHandler);  
  2.  
  3.  private function onClickHandler(e:MouseEvent):void  
  4.  {  
  5.          //由于沒(méi)有其他地方監(jiān)聽(tīng)對(duì)象的鼠標(biāo)事件,因此中止冒泡事件     
  6.          e.stopImmediatePropagation();    
  7.          var grid:Grid = e.target as Grid;  
  8.          //只有單擊對(duì)象是棋子才執(zhí)行后面的代碼  
  9.          if ( grid == null) return;  
  10.          //翻轉(zhuǎn)當(dāng)前單擊的棋子  
  11.          grid.doFlip();  
  12.          //翻轉(zhuǎn)周圍的四個(gè)棋子,用一個(gè)臨時(shí)數(shù)組存放周圍棋子的id  
  13.          var ids:Array = new Array(grid.id - column_number, grid.id + column_number);  
  14.          //如果棋子是在最左端,則左邊是空的,反之左邊存在棋子  
  15.          if ( grid.id % column_number != 0 )  
  16.          {  
  17.                  ids.push(grid.id - 1);  
  18.          }  
  19.          //如果棋子是在最右端,則右邊是空的,反之右邊存在棋子  
  20.          if ( grid.id % column_number != (column_number-1) )  
  21.          {  
  22.                  ids.push(grid.id + 1);  
  23.          }  
  24.          //記錄下棋子的總數(shù)  
  25.          var totalGrid:int = grids.length;  
  26.          //循環(huán)數(shù)組,翻轉(zhuǎn)周圍棋子        
  27.          for ( var i:uint = 0len:uint = ids.length; i < len; i++)  
  28.          {  
  29.                  var index:int = ids[i];  
  30.                  //上面或下面的棋子可能不存在,需要判斷,如果超過(guò)數(shù)組界限,則不存在  
  31.                  if (index <0 || index >= totalGrid) continue;  
  32.                  grid = grids[index];  
  33.                  if ( grid != null )  
  34.                  {  
  35.                  grid.doFlip();  
  36.                  }  
  37.            }  
  38.            //處理完棋子的翻轉(zhuǎn)后,***檢查當(dāng)前棋子是不是都變白了      
  39.            if ( isAllWhite() )  
  40.            {  
  41.                  //game over  
  42.                  gameOver();  
  43.            }  
  44.  }
責(zé)任編輯:閆佳明 來(lái)源: book.51cto.com
相關(guān)推薦

2013-05-14 10:16:35

Android開(kāi)發(fā)主類Main

2013-05-14 10:23:31

Android開(kāi)發(fā)主類Main

2013-05-14 11:01:34

AIR AndroidTouchEvent類

2013-05-14 11:04:58

AIR AndroidTouchEvent類

2013-05-03 15:17:59

Android開(kāi)發(fā)Android SDK

2013-05-14 11:18:24

AIR AndroidSwipe手勢(shì)

2011-06-16 10:25:29

AndroidAIR

2013-05-14 09:57:37

2013-05-14 10:27:46

Android開(kāi)發(fā)設(shè)置程序?qū)傩?/a>

2013-05-14 11:16:26

AIR Android旋轉(zhuǎn)手勢(shì)

2013-05-14 10:39:27

AIR Android打包APK文件

2013-05-14 10:37:10

AIR Android設(shè)置訪問(wèn)權(quán)限

2013-05-14 10:56:45

AIR Android多點(diǎn)觸摸

2013-05-14 09:50:44

Android開(kāi)發(fā)Flash Build

2013-05-14 10:05:10

Android開(kāi)發(fā)游戲設(shè)計(jì)

2013-05-14 10:10:28

Android開(kāi)發(fā)棋子類Grid

2012-03-09 13:26:53

2013-05-14 09:54:27

Android開(kāi)發(fā)開(kāi)源開(kāi)發(fā)環(huán)境

2013-05-14 11:13:02

AIR Android放大縮小手勢(shì)

2010-08-18 08:21:49

Adobe AIRAndroid
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)