成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

AIR Android:編寫主類Main(2)

移動開發 Android
第一個AIR Android程序:翻轉黑白棋,本模塊將編寫一個完整的移動小游戲,并把它部署在手機上。因此,我們將親歷一個移動程序完整的誕生過程,從程序設計、代碼編寫,到最后的安裝。在這個過程中會涉及很多Android開發的技術細節,讀者也可以近距離感受AIR帶來的開發樂趣。本文為大家介紹編寫主類Main。

編寫主類Main

在翻轉周邊棋子時,由于要驗證棋子的真實性,代碼稍顯煩瑣。總的說來,就是先獲取上下兩個棋子的id,以及左右存在的棋子的id,然后對棋子進行翻轉。

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

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

我們的游戲只有一關,因此用戶過關就意味著游戲結束。gameOver函數中,使用了一個文本框來顯示提示信息,由于和程序邏輯沒有聯系,這里略去不提。

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

代碼清單2-4 FlipIt項目的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.     //使用常量增強程序的靈活性和可讀性  
  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.     //在數組元素的類型確定的情況下,盡量使用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.       //設置舞臺屬性,為了自動適應屏幕尺寸,必須設置  
  34.       stage.scaleMode = StageScaleMode.NO_SCALE;  
  35.       stage.align = StageAlign.TOP_LEFT;        
  36.       //創建棋子容器  
  37.       grid_container = new Sprite();  
  38.       addChild(grid_container);        
  39.       //創建文本框,用來顯示游戲結果  
  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.       //創建棋盤  
  49.       createMap();        
  50.       //將棋盤屏幕居中放置  
  51.       grid_container.x = (stage.stageWidth - grid_container.width) / 2;        
  52.       grid_container.y = 120;          
  53.       //利用事件流的冒泡機制,只監聽容器的鼠標單擊事件  
  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.       //列數  
  66.       column_number = 4;  
  67.       //總行數  
  68.       var rowCount:uint = gameMap.length;  
  69.       //臨時變量  
  70.       var rowArray:Array;  
  71.       var i:uint, len:uint;  
  72.       var grid:Grid;  
  73.       //棋子的間距  
  74.       var space:int = 10;        
  75.       //根據數組創建棋盤  
  76.       for ( var row:uint = 0; row < rowCount; row++)  
  77.       {  
  78.         //獲取每一行的數據  
  79.         rowArray = gameMap[row];  
  80.         len = rowArray.length;          
  81.         for ( i = 0; i < len; i++)  
  82.         {  
  83.           //創建Grid,并賦予初始值。GRID_RADIUS常量定義了棋子的尺寸  
  84.           grid = new Grid(rowArray[i], GRID_RADIUS);  
  85.           //計算出棋子在棋盤上的編號  
  86.           grid.id = row * column_number + i;  
  87.           //設置棋子的坐標  
  88.           grid.x = i * (GRID_RADIUS*2 + space);  
  89.           grid.y = row * (GRID_RADIUS*2 + space);  
  90.           grid_container.addChild(grid);  
  91.           //按照編號將棋子保存在數組中,待以后查找  
  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.       //只有單擊的對象是棋子才執行后面的代碼  
  102.       if ( grid == null) return;  
  103.       //翻轉當前單擊的棋子  
  104.       grid.doFlip();  
  105.       //同時翻轉周圍的4個棋子  
  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 = "順利過關!";  
  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. }
責任編輯:閆佳明 來源: book.51cto.com
相關推薦

2013-05-14 10:13:52

Android開發主類Main

2013-05-14 10:23:31

Android開發主類Main

2013-05-14 11:04:58

AIR AndroidTouchEvent類

2013-05-14 11:01:34

AIR AndroidTouchEvent類

2013-05-03 15:17:59

Android開發Android SDK

2013-05-14 11:18:24

AIR AndroidSwipe手勢

2011-06-16 10:25:29

AndroidAIR

2013-05-14 09:57:37

2013-05-14 10:27:46

Android開發設置程序屬性

2013-05-14 10:37:10

AIR Android設置訪問權限

2013-05-14 11:16:26

AIR Android旋轉手勢

2013-05-14 10:39:27

AIR Android打包APK文件

2013-05-14 10:56:45

AIR Android多點觸摸

2013-05-14 09:50:44

Android開發Flash Build

2013-05-14 10:05:10

Android開發游戲設計

2013-05-14 10:10:28

Android開發棋子類Grid

2012-03-09 13:26:53

2013-05-14 09:54:27

Android開發開源開發環境

2010-08-18 08:21:49

Adobe AIRAndroid

2013-05-14 11:13:02

AIR Android放大縮小手勢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久在线观看 | 91精品国产日韩91久久久久久 | 操到爽 | 成人性视频免费网站 | 国产国产精品久久久久 | 在线国产一区二区 | 日本三级电影在线观看视频 | 久久噜噜噜精品国产亚洲综合 | 中文字幕一区二区三区四区五区 | 亚洲欧美日韩一区二区 | 亚洲国产精品久久久久秋霞不卡 | 欧美一级大黄 | 亚洲午夜在线 | 亚洲视频一区 | 卡通动漫第一页 | 日韩中文字幕在线观看 | 中文字幕一区在线观看视频 | 中文字幕a√| 国产99热在线 | 亚洲视频区 | 久久国产精品久久久久久久久久 | 久草网址| 国产精品a一区二区三区网址 | 国产传媒在线播放 | 欧美一区精品 | www.亚洲视频 | 日本视频免费观看 | 黄色a级一级片 | 看av片网站 | 亚洲视频二 | 日韩视频一区二区在线 | 男人影音| 国产电影一区二区 | 97视频网站 | 色就干| 欧美在线看片 | 亚洲一区二区三区视频 | 欧美成人久久 | www.久| 亚洲成人精品在线观看 | 成人在线视频网址 |