牌类游戏中取出顺子的算法(as2.0)
//一直忙啊,都好长时间没写BLOG了,今天刚写到一个自动从一套牌中取出顺子的算法就贴上来吧。
//以下用斗地主作为例子: 把代码贴到FLASH中导出即可看到效果,只限FLASH8 AS2版本
散牌组 = [[17, 4], [12, 3], [15, 0], [14, 2], [14, 3], [10, 3], [5, 3], [11, 3], [12, 1], [3, 0], [8, 0], [15, 3], [6, 3], [13, 1], [14, 1], [7, 2], [4, 3], [10, 1], [15, 2]];
散牌组.sortOn(0, 1 | 16);
顺子牌组 = new Array();
//建立调试点数
调试点数 = new Array();
for (var i = 0; i<散牌组.length; i++) {
调试点数.push(散牌组[i][0]);
}
trace("原牌组="+调试点数);
for (var i = 0; i<散牌组.length-5; i++) {
//用来记录合格的编号
var 编号数组 = new Array();
//追加值用来判断如果成对的跳跃判断数
var 跳跃值 = 0;
for (var j = 0; j<散牌组.length-i; j++) {
//trace(散牌组[i+j][0]+"=="+(散牌组[i+j+1][0]-1+跳跃值)+" 跳跃值="+跳跃值);
if (散牌组[i+j][0]+跳跃值 == 散牌组[i+j+1][0]+跳跃值 && 散牌组[i+j+1][0]<=15) {
跳跃值++;
} else if (散牌组[i+j][0]+跳跃值 == 散牌组[i+j+1][0]-1+跳跃值 && 散牌组[i+j+1][0]<=15) {
编号数组.push(i+j);
} else {
break;
}
}
if (编号数组.length>=5) {
var 临时牌组 = new Array();
var 减编号 = 0;
for (var j = 0; j<编号数组.length; j++) {
var 删除值 = 散牌组.splice(编号数组[j]-减编号, 1);
减编号++;
临时牌组.push(删除值[0]);
}
顺子牌组.push(临时牌组);
i = 0;
}
}
trace("抽取的组队数="+顺子牌组.length);
trace("=============处理取牌后的结果=========");
for (var n = 0; n<顺子牌组.length; n++) {
调试点数 = new Array();
for (var i = 0; i<顺子牌组[n].length; i++) {
调试点数.push(顺子牌组[n][i][0]);
}
trace("顺子牌组"+n+"="+调试点数);
}
调试点数 = new Array();
for (var i = 0; i<散牌组.length; i++) {
调试点数.push(散牌组[i][0]);
}
trace("抽取后剩下的散牌="+调试点数);