牌类游戏中取出顺子的算法

  • 来源: 中国IT实验室 作者: somesun   2008-03-18/11:20
  • //一直忙啊,都好长时间没写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("抽取后剩下的散牌="+调试点数);

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多