android air 开发游戏,AIR Android:编写主类Main(1)

本文介绍了如何使用ActionScript创建一个井字棋游戏的主类Main,包括创建棋盘和处理用户交互动作。通过二维数组表示棋盘数据,简化了地图的创建。同时,为容器添加监听器以处理棋子的点击事件,实现棋子的翻转和检查游戏结束条件。整个过程展示了游戏逻辑的基本实现。
摘要由CSDN通过智能技术生成

编写主类Main

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

创建棋盘

处理用户的交互动作

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

1.创建棋盘

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

vargameMap:Array=newArray();

//每一行用一维数组来表示

gameMap[0] = [BLACK, WHITE, WHITE, BLACK];

gameMap[1] = [WHITE, BLACK, BLACK, WHITE];

gameMap[2] = [WHITE, BLACK, BLACK, WHITE];

gameMap[3] = [BLACK, WHITE, WHITE, BLACK];

BLACK和WHITE是两个常量,这样看起来更直观。利用数组,正好将地图上的信息全面展示出来,从中可以看到每个棋子的初始状态及在棋盘上的位置,创建棋盘的工作就变得简单多了,如代码清单2-2所示。

代码清单2-2 创建棋盘

column_number=4;

varrowCount:uint=gameMap.length;

var rowArray:Array;

var i:uint, len:uint;

var grid:Grid;

//棋子的间距

varspace:int=10;

//根据数组创建棋盘

for ( varrow:uint=0; row

{

//获取每一行的数据

rowArray=gameMap[row];

len=rowArray.length;

for (i=0; i

{

//创建Grid,并赋予初始值。GRID_RADIUS常量定义了棋子的尺寸

grid=newGrid(rowArray[i], GRID_RADIUS);

//计算出棋子在棋盘上的编号

grid.id=row* column_number + i;

//设置棋子的坐标

grid.x= i * (GRID_RADIUS*2 + space);

grid.y=row* (GRID_RADIUS*2 + space);

//将棋子放在一个容器中,方便管理

grid_container.addChild(grid);

//按照编号将棋子保存在数组中,待以后查找

grids[grid.id] = grid;

}

}

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

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

2.处理用户交互动作

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

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

grid_container.addEventListener(MouseEvent.CLICK, onClickHandler);

private function onClickHandler(e:MouseEvent):void

{

//由于没有其他地方监听对象的鼠标事件,因此中止冒泡事件

e.stopImmediatePropagation();

vargrid:Grid=e.target as Grid;

//只有单击对象是棋子才执行后面的代码

if (grid== null) return;

//翻转当前单击的棋子

grid.doFlip();

//翻转周围的四个棋子,用一个临时数组存放周围棋子的id

varids:Array=newArray(grid.id - column_number, grid.id + column_number);

//如果棋子是在最左端,则左边是空的,反之左边存在棋子

if ( grid.id % column_number != 0 )

{

ids.push(grid.id - 1);

}

//如果棋子是在最右端,则右边是空的,反之右边存在棋子

if ( grid.id % column_number != (column_number-1) )

{

ids.push(grid.id + 1);

}

//记录下棋子的总数

vartotalGrid:int=grids.length;

//循环数组,翻转周围棋子

for ( vari:uint=0,len:uint=ids.length; i

{

varindex:int=ids[i];

//上面或下面的棋子可能不存在,需要判断,如果超过数组界限,则不存在

if (index<0|| index>= totalGrid) continue;

grid=grids[index];

if ( grid != null )

{

grid.doFlip();

}

}

//处理完棋子的翻转后,***检查当前棋子是不是都变白了

if ( isAllWhite() )

{

//game over

gameOver();

}

}

【编辑推荐】

【责任编辑:闫佳明 TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值