Think in ActionScript 3.0Ⅲ
2009-05-30 12:07:59 来源:WEB开发网接下来定义三个变量分别表示圈内还剩多少人,所报的数是多少和数组下标。
最后让数组下标加 1,当指到最后时,将数组下标置为 0,因为这是一个圈,要用循环的数组来表示。
8.4.3 出圈游戏 —— 面向对象(cirgame/ CircleGame2.as)
回顾上一个例子,在面向过程的程序中,明明是围成的一个圈儿,却要看成是一个数组;明明是一个个小孩儿却要看成是数组的一个个元素。这不就是为了让计算机看懂吗?但是,面向对象是更加接近人类的思维模式,我们在现实中看到的就是一个个小孩儿,怎么能说是数组?那么这一个个小孩儿就是一个个对象,他们都是 Kid。围成的这个圈,就是一个 KidCircle。很自然吧,比大自然还自然!下面来体会面向对象的设计思想:
package cirgame {
public class CircleGame2 {
public function CircleGame2() {
var kc:KidCircle = new KidCircle(5);
var countNum:int = 0;
var k:Kid = kc.head;
while (kc.count > 0) {
countNum++;
if (countNum == 3) {
trace(k.id + 1);
kc.remove(k);
countNum = 0;
}
k = k.right;
}
}
}
}
// 每个 Kid 都有自己的 id,并且左右手还拉着其它的 Kid
class Kid {
var id:uint;
var left:Kid;
var right:Kid;
}
// 这个圈子里可以加入或移除一些 Kid
class KidCircle {
var count:uint = 0;
var head:Kid;
var rear:Kid;
function KidCircle(n:uint) {
for (var i = 0; i < n; i++) {
var kid:Kid = new Kid();
add(kid);
}
}
function add(kid:Kid):void {
kid.id = count;
if (count == 0) {
head = kid;
rear = kid;
kid.left = kid;
kid.right = kid;
} else {
rear.right = kid;
kid.left = rear;
kid.right = head;
head.left = kid;
rear = kid;
}
count++;
}
function remove(kid:Kid):void {
if (count <= 0) {
return;
} else if (count == 1) {
head = rear = null;
} else {
kid.left.right = kid.right;
kid.right.left = kid.left;
if (kid == head) {
head = kid.right;
} else if (kid == rear) {
rear = kid.left;
}
}
count--;
}
}
下面是 KidCircle 类,代表围成的圈子,这个圈子可以加入或移除一些 Kid,因此有 add 和 remove 两个方法。head 和 rear 两个成员变量用于指向队首和队尾的两个 Kid,因为些添加的 Kid 要放在队尾(rear)的后面,因为这是一个圈子,所以还需要让队尾的小孩儿拉住队首(head)的小孩儿,因此需要保存这两个成员变量。
最后是测试类,主要的逻辑和前一个例子比较像,这里就不多解释了。
通过这个例子大家可以看出,我们无形之间就完成了一个数据结构 —— 双向循环链表。而前面面向过程的例子,实际上就是一个顺序的存储结构 —— 线性表。
后面,我会带大家写一个贪吃蛇的游戏,目的是学习面向对象编程的思想(并非该游戏本身),在贪吃蛇中我们就会运用到类似于单向链表的结构,如果双向链表掌握了,那么单向一定没问题。
通过本节请大家认真体会面向对象的设计思想。一次学会,终身受用。
Tags:Think in ActionScript
编辑录入:爽爽 [复制链接] [打 印]- ››include指令与<jsp:include>动作的区别
- ››Intent和IntentFilter详解
- ››thinkphp上传错误解决方法
- ››ActionScript 2.0中的! 逻辑 NOT 运算符
- ››Interface继承至System.Object?
- ››input按钮在IE浏览器的兼容
- ››ActionScript 3.0 性能方面优化小知识整理收集
- ››Intent调用大全
- ››IntentService实现原理及内部代码
- ››Internet Explorer 无法打开
- ››Intel和Nokia宣称MeeGo将比Android更加开放且方便...
- ››innerText、outerText、innerHTML、outerHTML的区...
更多精彩
赞助商链接