AIR Android:编写主类Main(1)

移动开发 Android
第一个AIR Android程序:翻转黑白棋,本模块将编写一个完整的移动小游戏,并把它部署在手机上。因此,我们将亲历一个移动程序完整的诞生过程,从程序设计、代码编写,到最后的安装。在这个过程中会涉及很多Android开发的技术细节,读者也可以近距离感受AIR带来的开发乐趣。本文为大家介绍编写主类Main。

编写主类Main

接下来编写主类Main的代码。按照之前的设计,主程序主要有以下两个功能:

创建棋盘

处理用户的交互动作

下面先来实现***个功能。

1.创建棋盘

上一节使用了二维矩阵来描述地图数据,其实编写代码没那么复杂,直接用一个二维数组就可以实现这个功能,代码如下:

 

  1. var gameMap:Array = new Array();      
  2. //每一行用一维数组来表示    
  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是两个常量,这样看起来更直观。利用数组,正好将地图上的信息全面展示出来,从中可以看到每个棋子的初始状态及在棋盘上的位置,创建棋盘的工作就变得简单多了,如代码清单2-2所示。

代码清单2-2 创建棋盘

  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.  //根据数组创建棋盘  
  9.  for ( var row:uint = 0; row < rowCount; row++)  
  10.  {  
  11.          //获取每一行的数据  
  12.          rowArray = gameMap[row];  
  13.          len = rowArray.length;  
  14.          for ( i = 0; i < len; i++)  
  15.          {  
  16.                  //创建Grid,并赋予初始值。GRID_RADIUS常量定义了棋子的尺寸  
  17.                  grid = new Grid(rowArray[i], GRID_RADIUS);  
  18.                  //计算出棋子在棋盘上的编号  
  19.                  grid.id = row * column_number + i;  
  20.                  //设置棋子的坐标  
  21.                  grid.x = i * (GRID_RADIUS*2 + space);  
  22.                  grid.y = row * (GRID_RADIUS*2 + space);  
  23.                  //将棋子放在一个容器中,方便管理  
  24.                  grid_container.addChild(grid);  
  25.                  //按照编号将棋子保存在数组中,待以后查找  
  26.                  grids[grid.id] = grid;  
  27.          }  
  28.  } 

在创建棋盘时,使用数组grids保存了对所有棋子的引用,且棋子在数组中的索引和棋子在棋盘上的编号一一对应,这样在查找周边棋子时,只需要计算出周边棋子的id即可。

棋盘创建完毕后,接下来处理用户交互动作。

2.处理用户交互动作

由于所有的棋子都被放在同一个容器中,因此可以只对容器添加监听器,而不用监听每个棋子的鼠标事件,如代码清单2-3所示。

代码清单2-3 处理用户交互动作

  1. grid_container.addEventListener(MouseEvent.CLICK, onClickHandler);  
  2.  
  3.  private function onClickHandler(e:MouseEvent):void  
  4.  {  
  5.          //由于没有其他地方监听对象的鼠标事件,因此中止冒泡事件     
  6.          e.stopImmediatePropagation();    
  7.          var grid:Grid = e.target as Grid;  
  8.          //只有单击对象是棋子才执行后面的代码  
  9.          if ( grid == null) return;  
  10.          //翻转当前单击的棋子  
  11.          grid.doFlip();  
  12.          //翻转周围的四个棋子,用一个临时数组存放周围棋子的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.          //记录下棋子的总数  
  25.          var totalGrid:int = grids.length;  
  26.          //循环数组,翻转周围棋子        
  27.          for ( var i:uint = 0len:uint = ids.length; i < len; i++)  
  28.          {  
  29.                  var index:int = ids[i];  
  30.                  //上面或下面的棋子可能不存在,需要判断,如果超过数组界限,则不存在  
  31.                  if (index <0 || index >= totalGrid) continue;  
  32.                  grid = grids[index];  
  33.                  if ( grid != null )  
  34.                  {  
  35.                  grid.doFlip();  
  36.                  }  
  37.            }  
  38.            //处理完棋子的翻转后,***检查当前棋子是不是都变白了      
  39.            if ( isAllWhite() )  
  40.            {  
  41.                  //game over  
  42.                  gameOver();  
  43.            }  
  44.  }
责任编辑:闫佳明 来源: book.51cto.com
相关推荐

2013-05-14 10:16:35

Android开发主类Main

2013-05-14 10:23:31

Android开发主类Main

2013-05-14 11:01:34

AIR AndroidTouchEvent类

2013-05-14 11:04:58

AIR AndroidTouchEvent类

2013-05-03 15:17:59

Android开发Android SDK

2011-06-16 10:25:29

AndroidAIR

2013-05-14 11:18:24

AIR AndroidSwipe手势

2013-05-14 09:57:37

2013-05-14 10:56:45

AIR Android多点触摸

2013-05-14 10:37:10

AIR Android设置访问权限

2013-05-14 11:16:26

AIR Android旋转手势

2013-05-14 10:27:46

Android开发设置程序属性

2013-05-14 10:39:27

AIR Android打包APK文件

2013-05-14 10:10:28

Android开发棋子类Grid

2013-05-14 10:05:10

Android开发游戏设计

2013-05-14 09:50:44

Android开发Flash Build

2012-03-09 13:26:53

2010-08-18 08:21:49

Adobe AIRAndroid

2013-05-14 11:13:02

AIR Android放大缩小手势

2013-05-14 09:54:27

Android开发开源开发环境
点赞
收藏

51CTO技术栈公众号