浏览模式 : 普通 | 列表
1 | 

源代码下载

地图有了,算法也有了.那么现在就是如何把这些给结合起来并显示出来了.

我们游戏中的每一个图案,我们可以把他抽象为一个方块类 Block类.因为他是可以被点击的,所以我们可以直接用一个SimpleButton来实现,SimpleButton它有四个属性可以设置按钮各种状态的显示对象.

我们的算法在什么时候调用呢?什么每点一次Block就得调用一次呢?其实是没有必要的,必须得上次已经有点过一次图案了,那么再点击另外一个图案时才需要调用算法来进行寻路检测,因此我们必须要记录上一次到底是点了哪一个按钮,以及本次到底点了哪个按钮?我在程序里分别使用了两个数组来记录这两个数据,上一次按下的记录为lastClick:Array,本次按的为nowClick:Array,如果游戏刚开始还没有点击过任何一个图案或者刚消完一对图案,那么此时的上一个点击就为空了,所以就设为[-1,-1],所以只要判断上一次点击的不是[-1,-1],而且现在按的不跟上一次按的一样,就是调用算法的时候了.

本人对数组有种特别的感情,因为数组有一个好处,就是他的副本跟他本身在内存中指的都是同一个地址,这有点类似于C++中的指针,所以,我们只需要修改其中的一个,就可以全部都修改到,所以我们在实例化一个Block实例的时候,传了一个nowClick的副本给他,然后在每一次点击图案的时候,对副本进行改值,此时,nowClick本身的值也跟着给改了.

以下是Block类的全代码.

/*
Author: Alan.Lin
Blog:http://www.conanlwl.net
连连...


在第一节中,我们已经知道了如何生成一个初始地图,那么接下来就是必须对此地图中对被点击到的两个图案进行连接测试,当然,首先必须要求两个点击的图案必须一样,否则就无需做连接测试了

那么连接的情况就有:

  • 直线相连
  • 一个折点的相连
  • 二个折点的相连

那么我们先来实现直线相连测试的算法.直线相连,分为两种情总,一种是两个目标图案处于同一行,另一种就是处于同一列.

以下是判断的代码:

c为列,r为行,所以c1,r1为第一个图案的坐标,c2,r2为第二个图案的坐标.我们将他抽像为一个点吧.那么第一个图案设为点P,第二个图案设为点Q

//判断同一直线上的两个点是否通畅
        private function lineCheck(c1:uint,r1:uint,c2:uint,r2:...


一.地图的生成

在上一篇文章中,我们已经试玩了本连连看的DEMO了.而地图是由一个由M*N个的矩形图案组成的.因此我们可以设定地图的行数为ROWS,列数为COLS,然后用一个二维数组来存储地图元素MapArray[ROWS][COLS],其中每个数字代表一种图案.而0则为通路,也即无图.所以,我们的地图数组可能是以下这样的一组数据

[[0,0,0,0,0,0],
 [0,1,2,1,3,0],
 [0,4,4,2,5,0],
 [0,6,5,6,3,0],
 [0,0,0,0,0,0]]

想想为何要在周围的一圈加上0?答案在以后的寻路代码中解答.

那么,这样的地图有什么特点呢?

  1. 地图中的每一个数字的个数都是偶数,也即都是成对的出现
  2. 地图的排列必须是随机排列的.
  3. 地图中的每一个数字的种类不能大于已有的图案的个数

那么一共有多少对大于0的数字呢?一共是(ROWS-2)*(COLS-2)/2对.那么初始地图的设计思路便是,先用一个一维的临时数组,tempArray,成对的往这个数组里推一个随机的大于0的数字进去,一共推(ROWS-2)*(COLS-2)/2次,则此时的tempArray的元素可能为,[2,2,3,3,1,1,6,6,4,4,5,5],接着再通过数组的自定义排序函数将数组打乱最后再将此数组转化为二维的数组并同时在周围加多一圈的0以后,即为我们的初始地图了.以下是生成初始地图的代码:

        public static const COLS:uint...


[DEMO]连连看试玩

[ 2008-5-31 17:16:39 | 作者 : Conanlwl ]

游戏试玩地址:点击试玩 

由于每天的时间有限,所以用了几天的时间做了这个FLASH游戏连连看~~~这个DEMO在普通的连连看的游戏模式上加了多达十种的游戏新模式,新添了不少的可玩性..由于是DEMO版,所以没有添加时间限制,帮助次数限制,以及游戏关卡的限制,所以现在大家想玩什么模式就玩什么模式~~~

另..由于个人界面设计能力有限..所以整个游戏几乎是没有任何人机界面的元素在里面,完全就是一个祼游戏,所以希望哪位朋友能够帮我设计设计一下游戏界面啊~~

1 |