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

AIR Android:編寫(xiě)主類(lèi)Main(2)

移動(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ě)主類(lèi)Main。

編寫(xiě)主類(lèi)Main

在翻轉(zhuǎn)周邊棋子時(shí),由于要驗(yàn)證棋子的真實(shí)性,代碼稍顯煩瑣??偟恼f(shuō)來(lái),就是先獲取上下兩個(gè)棋子的id,以及左右存在的棋子的id,然后對(duì)棋子進(jìn)行翻轉(zhuǎn)。

翻轉(zhuǎn)完畢后,判斷棋子是否全部變白的代碼也很簡(jiǎn)單。代碼如下:

  1.        var grid:Grid;  
  2.         for ( var i:uint = 0len:uint = grids.length; i < len; i++)  
  3.         {  
  4.                 grid = grids[i];  
  5.                 //只要發(fā)現(xiàn)有一個(gè)棋子不是白色,則表明游戲還沒(méi)有結(jié)束  
  6.                 if( grid.isWhite() == false )  
  7.                 {  
  8.                        //只要一個(gè)為false,則表示游戲還沒(méi)有結(jié)束  
  9.                 }  
  10.         }          

我們的游戲只有一關(guān),因此用戶(hù)過(guò)關(guān)就意味著游戲結(jié)束。gameOver函數(shù)中,使用了一個(gè)文本框來(lái)顯示提示信息,由于和程序邏輯沒(méi)有聯(lián)系,這里略去不提。

至此,主程序的主要代碼介紹完畢,完整的代碼見(jiàn)代碼清單2-4。

代碼清單2-4 FlipIt項(xiàng)目的Main.as文件

  1. package  
  2. {  
  3.   import flash.display.Sprite;  
  4.   import flash.display.StageScaleMode;  
  5.   import flash.display.StageAlign;  
  6.   import flash.events.Event;  
  7.   import flash.events.MouseEvent;  
  8.   import flash.text.TextField;  
  9.   import flash.text.TextFormat;  
  10.   import flash.text.TextFormatAlign;  
  11.     
  12.   [SWF(backgroundColor="#B6B5C1")]  
  13.   public class Main extends Sprite   
  14.   {      
  15.     //使用常量增強(qiáng)程序的靈活性和可讀性  
  16.     private const BLACK:Boolean = false;  
  17.     private const WHITE:Boolean = true;      
  18.     private const GRID_RADIUS:int = 30;      
  19.     private var grid_container:Sprite;  
  20.     private var game_tip:TextField;  
  21.       
  22.     //在數(shù)組元素的類(lèi)型確定的情況下,盡量使用Vector,而不用Array,性能更佳  
  23.     private var grids:Vector.<Grid> = new Vector.<Grid>();      
  24.     private var column_number:uint;  
  25.       
  26.     public function Main():void   
  27.     {  
  28.       init();        
  29.     }  
  30.       
  31.     private function init():void  
  32.     {  
  33.       //設(shè)置舞臺(tái)屬性,為了自動(dòng)適應(yīng)屏幕尺寸,必須設(shè)置  
  34.       stage.scaleMode = StageScaleMode.NO_SCALE;  
  35.       stage.align = StageAlign.TOP_LEFT;        
  36.       //創(chuàng)建棋子容器  
  37.       grid_container = new Sprite();  
  38.       addChild(grid_container);        
  39.       //創(chuàng)建文本框,用來(lái)顯示游戲結(jié)果  
  40.       game_tip = new TextField();  
  41.       var tf:TextFormat = new TextFormat("Droid Serif", 24);  
  42.       tf.align = TextFormatAlign.CENTER;  
  43.       game_tip.defaultTextFormat = tf;  
  44.       game_tip.width = stage.stageWidth;  
  45.       game_tip.y = 500;  
  46.       game_tip.selectable = false;  
  47.       addChild(game_tip);              
  48.       //創(chuàng)建棋盤(pán)  
  49.       createMap();        
  50.       //將棋盤(pán)屏幕居中放置  
  51.       grid_container.x = (stage.stageWidth - grid_container.width) / 2;        
  52.       grid_container.y = 120;          
  53.       //利用事件流的冒泡機(jī)制,只監(jiān)聽(tīng)容器的鼠標(biāo)單擊事件  
  54.       grid_container.addEventListener(MouseEvent.CLICK, onClickHandler);  
  55.     }  
  56.       
  57.     private function createMap():void  
  58.     {  
  59.       var gameMap:Array = new Array();        
  60.       gameMap[0] = [BLACK, WHITE, WHITE, BLACK];  
  61.       gameMap[1] = [WHITE, BLACK, BLACK, WHITE];  
  62.       gameMap[2] = [WHITE, BLACK, BLACK, WHITE];  
  63.       gameMap[3] = [BLACK, WHITE, WHITE, BLACK];  
  64.         
  65.       //列數(shù)  
  66.       column_number = 4;  
  67.       //總行數(shù)  
  68.       var rowCount:uint = gameMap.length;  
  69.       //臨時(shí)變量  
  70.       var rowArray:Array;  
  71.       var i:uint, len:uint;  
  72.       var grid:Grid;  
  73.       //棋子的間距  
  74.       var space:int = 10;        
  75.       //根據(jù)數(shù)組創(chuàng)建棋盤(pán)  
  76.       for ( var row:uint = 0; row < rowCount; row++)  
  77.       {  
  78.         //獲取每一行的數(shù)據(jù)  
  79.         rowArray = gameMap[row];  
  80.         len = rowArray.length;          
  81.         for ( i = 0; i < len; i++)  
  82.         {  
  83.           //創(chuàng)建Grid,并賦予初始值。GRID_RADIUS常量定義了棋子的尺寸  
  84.           grid = new Grid(rowArray[i], GRID_RADIUS);  
  85.           //計(jì)算出棋子在棋盤(pán)上的編號(hào)  
  86.           grid.id = row * column_number + i;  
  87.           //設(shè)置棋子的坐標(biāo)  
  88.           grid.x = i * (GRID_RADIUS*2 + space);  
  89.           grid.y = row * (GRID_RADIUS*2 + space);  
  90.           grid_container.addChild(grid);  
  91.           //按照編號(hào)將棋子保存在數(shù)組中,待以后查找  
  92.           grids[grid.id] = grid;  
  93.         }  
  94.       }        
  95.     }  
  96.       
  97.     private function onClickHandler(e:MouseEvent):void  
  98.     {  
  99.       e.stopImmediatePropagation();  
  100.       var grid:Grid = e.target as Grid;  
  101.       //只有單擊的對(duì)象是棋子才執(zhí)行后面的代碼  
  102.       if ( grid == null) return;  
  103.       //翻轉(zhuǎn)當(dāng)前單擊的棋子  
  104.       grid.doFlip();  
  105.       //同時(shí)翻轉(zhuǎn)周?chē)?個(gè)棋子  
  106.       var ids:Array = new Array(grid.id - column_number, grid.id + column_number);  
  107.       //如果棋子是在最左端,則左邊是空的,反之左邊存在棋子  
  108.       if ( grid.id % column_number != 0 )  
  109.       {  
  110.         ids.push(grid.id - 1);  
  111.       }  
  112.       //如果棋子是在最右端,則右邊是空的,反之右邊存在棋子  
  113.       if ( grid.id % column_number != (column_number-1) )  
  114.       {  
  115.         ids.push(grid.id + 1);  
  116.       }  
  117.         
  118.       var totalGrid:int = grids.length;  
  119.         
  120.       for ( var i:uint = 0len:uint = ids.length; i < len; i++)  
  121.       {  
  122.         var index:int = ids[i];  
  123.           
  124.         if (index <0 || index >= totalGrid) continue;  
  125.           
  126.         grid = grids[index];  
  127.         //上面或下面的棋子可能不存在,需要判斷  
  128.         if ( grid != null )  
  129.         {  
  130.           grid.doFlip();  
  131.         }  
  132.       }        
  133.       if ( isAllWhite() )  
  134.       {  
  135.         //game over  
  136.         gameOver();  
  137.       }  
  138.     }  
  139.       
  140.     private function gameOver():void  
  141.     {  
  142.         grid_container.removeEventListener(MouseEvent.CLICK, onClickHandler);  
  143.       game_tip.text = "順利過(guò)關(guān)!";  
  144.     }  
  145.       
  146.     private function isAllWhite():Boolean  
  147.     {  
  148.       var grid:Grid;  
  149.       for ( var i:uint = 0len:uint = grids.length; i < len; i++)  
  150.       {  
  151.         grid = grids[i];  
  152.         if( grid.isWhite() == false )  
  153.         {  
  154.           return false;  
  155.         }  
  156.       }  
  157.       return true;  
  158.     }      
  159.   }    
  160. }
責(zé)任編輯:閆佳明 來(lái)源: book.51cto.com
相關(guān)推薦

2013-05-14 10:13:52

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

2013-05-14 10:23:31

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

2013-05-14 11:04:58

AIR AndroidTouchEvent類(lèi)

2013-05-14 11:01:34

AIR AndroidTouchEvent類(lèi)

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è)置訪(fǎng)問(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ā)棋子類(lèi)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)