像往常一样编写ActionScript代码
打开FlashDevelop(FD),创建项目FlipIt,FD会自动创建主程序Main类。不要急于编写主程序,为了让程序的结构更合理,可以先将其中某些功能分离出来,增强代码的灵活性。在这个游戏中,可以独立出来的一个对象就是棋子。
创建棋子类Grid
棋子是构成棋盘的基础。从面向对象编程的角度分析,每个棋子的使用方法完全相同,都支持翻转变色,每个棋子有自己的状态,不同的状态决定了其颜色。换句话说,棋子这个对象包含了一个处理翻转行为的方法和一个存放自身状态的属性。
根据上面的分析创建Grid类来表示棋子,如代码清单2-1所示。
代码清单2-1 棋子Grid类
- package
- {
- import flash.display.Graphics;
- import flash.display.Sprite;
- public class Grid extends Sprite
- {
- //棋子的值
- private var _value:Boolean;
- //圆的半径
- private var _radius:int;
- //id,即棋子在地图上的位置,用来寻找周围的棋子
- public var id:int;
- public function Grid( value:Boolean = false, radius:int = 30)
- {
- _value = value;
- _radius = radius;
- //获取初始值后,画圆
- draw();
- }
- //翻转棋子
- public function doFlip():void
- {
- //改变值,并重新绘制圆
- _value = !_value;
- draw();
- }
- //判断棋子是不是白色状态
- public function isWhite():Boolean
- {
- return _value == true;
- }
- //每次状态变化时,都调用draw进行重绘
- private function draw():void
- {
- var g:Graphics = graphics;
- g.clear();
- //如果当前值为true,则用白色作为填充色
- if ( isWhite() )
- {
- g.beginFill(0xFFFFFF);
- }
- else
- {
- g.beginFill(0x333333);
- }
- //画圆,并保证Sprite的注册点在原点
- g.drawCircle(_radius, _radius, _radius);
- g.endFill();
- }
- }
- }
Grid类中没有使用图片素材,只是动态绘制了一个圆来代表棋子。初次创建或调用doFlip方法后,若棋子的值发生变化,都会调用draw方法重新绘制圆,并改变填充色。属性id很重要,记录了棋子本身在棋盘上的编号,后面我们将通过id值来寻找它四周的棋子。