棋牌游戏 梭哈发牌和比牌算法
作者:admin 日期:2007-09-06
//梭哈发牌和比牌算法
演示如下:
Flash动画
牌形 = function (对象, 花色, 点数) {
//trace("执行牌形 "+对象+" "+花色+" "+点数);
//把数字花色换为字符花色
if (花色 == 0) {
花色 = "方块";
} else if (花色 == 1) {
花色 = "梅花";
} else if (花色 == 2) {
花色 = "红桃";
} else if (花色 == 3) {
花色 = "黑桃";
}
this[对象].黑桃._visible = false;
this[对象].红桃._visible = false;
this[对象].梅花._visible = false;
this[对象].方块._visible = false;
this[对象][花色]._visible = true;
this[对象][花色].gotoAndStop(点数);
};
洗牌 = function () {
//动态设置总牌52张
var 总牌:Array = new Array();
for (var i = 0; i<4; i++) {
for (var j = 8; j<=14; j++) {
总牌.push([i, j]);
}
}
//设置玩家的牌组
//5个玩家
for (var i = 1; i<=5; i++) {
this["牌组"+i] = new Array();
//发牌数据给玩家(5张)
for (var j = 1; j<=5; j++) {
//随机抽总牌
var 随机值 = int(random(总牌.length));
//添进牌组
var 抽中值 = 总牌.splice(随机值, 1);
this["牌组"+i].push(抽中值[0]);
//让牌数据形象化
牌形(("玩家"+i+j), 抽中值[0][0], 抽中值[0][1]);
//this["玩家"+i+j].牌形(this["牌组"+i][0, this["牌组"+i][1]]);
}
}
/*
for (var i = 1; i<=4; i++) {
trace(this["牌组"+i]);
}
*/
};
洗牌();
//牌级分类
类型数组 = ["散牌", "对子", "双对", "三条", "顺子", "同花", "葫芦", "铁支", "同花顺"];
判断牌类型 = function (牌, 判断起始) {
牌数 = 牌.length;
var 牌组 = new Array();
//设置默认值
if (判断起始 == undefined) {
判断起始 = 0;
}
if (牌数 == undefined) {
牌数 = 5;
}
var 最终类型 = "";
var 追加值 = [0, 0];
牌数--;
//排序
if (判断起始 == 0) {
//trace("排序牌");
牌组 = 牌;
} else {
for (var i = 判断起始; i<=牌数; i++) {
牌组.push(牌[i]);
}
}
牌组.sortOn(1, 2 | 16);
//trace(牌组);
//临时显示
/*
var 显示 = "";
for (var i = 0; i<牌数; i++) {
显示 += 牌组[i][1]+" ";
}
//trace(显示);
//
*/
//牌数为4 从0算起
if (牌数 == 4) {
var 对比值 = 牌组[0][1];
//检测是否是顺子
for (var i = 1; i<5; i++) {
对比值--;
if (对比值 != 牌组[i][1]) {
//返回不是同花顺也不是顺子
//return false;
最终类型 = 0;
break;
}
}
//检测是否是同花
var 对比值 = 牌组[0][0];
for (var i = 1; i<5; i++) {
if (对比值 != 牌组[i][0]) {
if (最终类型 != 0) {
最终类型 = 4;
break;
}
}
}
if (最终类型 == "") {
最终类型 = 8;
}
} else {
最终类型 = 0;
}
//追加最大牌的花色和牌面
if (判断起始 == 0) {
追加值 = [牌组[0][1], 牌组[0][0]];
} else {
追加值 = [牌组[判断起始-1][1], 牌组[判断起始-1][0]];
}
//检查对子
var 对比值 = 0;
var 牌类型 = 0;
var 对子数 = 1;
var 最终对子数 = 0;
var temp = 0;
if (判断起始 != 0) {
判断起始--;
}
for (var i = 判断起始; i<=牌数; i++) {
/*
trace("");
trace("i="+i);
trace("对比值"+对比值);
trace("牌值"+牌组[i][1]);
*/
if (对比值 != 牌组[i][1]) {
//trace("牌不同");
if (对子数>最终对子数) {
最终对子数 = 对子数;
//trace("最终对子数"+最终对子数);
}
对子数 = 1;
对比值 = 牌组[i][1];
//牌类如果全散牌为5点。2对为2类或3类
牌类型++;
} else {
//trace("牌同");
//对子数++;
对子数++;
//对子数追加
//单对追加
if (temp == 0 or 对子数>=3) {
追加值[0] = 牌组[i][1];
追加值[1] = 0;
temp = 牌类型;
} else if (temp != 牌类型) {
//双对追加
if (追加值[0]>牌组[i][1]) {
追加值[1] = 牌组[i][1];
} else {
//当位置1小于位置2时换位
var temp_h = 追加值[0];
追加值[0] = 牌组[i][1];
追加值[1] = temp_h;
}
}
}
}
if (对子数>最终对子数) {
最终对子数 = 对子数;
//trace("最终对子数"+最终对子数);
}
//判断类型
var 类型值 = [牌类型, 最终对子数];
trace("类型值="+类型值);
if (类型值.toString() == "2,4") {
//4带1
最终类型 = 7;
} else if (类型值.toString() == "2,3") {
//3带对
最终类型 = 6;
} else if (类型值.toString() == (牌数-1)+",3") {
//3带1
最终类型 = 3;
} else if (类型值.toString() == (牌数-1)+",2") {
//双对
最终类型 = 2;
} else if (类型值.toString() == 牌数+",2") {
//单对
最终类型 = 1;
}
//判断同色
if (牌数 == 4) {
if (最终类型 != 8) {
var 对比值 = 牌组[0][0];
for (var i = 1; i<5; i++) {
if (对比值 != 牌组[i][0]) {
i = 10;
}
}
//trace(i);
if (i == 5) {
最终类型 = 5;
}
}
}
//trace("追加值="+追加值);
//trace(最终类型);
trace("牌类型及大小: "+[最终类型, 追加值[0], 追加值[1]]);
trace("");
return [最终类型, 追加值[0], 追加值[1]];
};
//比较牌大小
比较牌 = function () {
//显示各玩家牌级
比牌级 = new Array();
for (var i = 1; i<=5; i++) {
返回值 = 判断牌类型(this["牌组"+i], 0);
返回值.push("牌组"+i);
比牌级.push(返回值);
this["状态"+i].text = 类型数组[返回值[0]];
}
比牌级.sortOn([0, 1, 2], 2 | 16);
//trace(比牌级);
//trace(比牌级[0][3]);
//显示
for (var i = 0; i<5; i++) {
_root["大小"+比牌级[i][3].charAt(2)].text = "第"+(i+1);
}
};
比较牌();
//按钮重刷
button1.onRelease = function() {
trace("---------------------");
洗牌();
比较牌();
};
//=====================================
//
//转载请注明出处:羽柴 鬼铃-blog
// www.ycflash.com/blog
//
//=====================================
点击下载此文件
演示如下:
Flash动画牌形 = function (对象, 花色, 点数) {
//trace("执行牌形 "+对象+" "+花色+" "+点数);
//把数字花色换为字符花色
if (花色 == 0) {
花色 = "方块";
} else if (花色 == 1) {
花色 = "梅花";
} else if (花色 == 2) {
花色 = "红桃";
} else if (花色 == 3) {
花色 = "黑桃";
}
this[对象].黑桃._visible = false;
this[对象].红桃._visible = false;
this[对象].梅花._visible = false;
this[对象].方块._visible = false;
this[对象][花色]._visible = true;
this[对象][花色].gotoAndStop(点数);
};
洗牌 = function () {
//动态设置总牌52张
var 总牌:Array = new Array();
for (var i = 0; i<4; i++) {
for (var j = 8; j<=14; j++) {
总牌.push([i, j]);
}
}
//设置玩家的牌组
//5个玩家
for (var i = 1; i<=5; i++) {
this["牌组"+i] = new Array();
//发牌数据给玩家(5张)
for (var j = 1; j<=5; j++) {
//随机抽总牌
var 随机值 = int(random(总牌.length));
//添进牌组
var 抽中值 = 总牌.splice(随机值, 1);
this["牌组"+i].push(抽中值[0]);
//让牌数据形象化
牌形(("玩家"+i+j), 抽中值[0][0], 抽中值[0][1]);
//this["玩家"+i+j].牌形(this["牌组"+i][0, this["牌组"+i][1]]);
}
}
/*
for (var i = 1; i<=4; i++) {
trace(this["牌组"+i]);
}
*/
};
洗牌();
//牌级分类
类型数组 = ["散牌", "对子", "双对", "三条", "顺子", "同花", "葫芦", "铁支", "同花顺"];
判断牌类型 = function (牌, 判断起始) {
牌数 = 牌.length;
var 牌组 = new Array();
//设置默认值
if (判断起始 == undefined) {
判断起始 = 0;
}
if (牌数 == undefined) {
牌数 = 5;
}
var 最终类型 = "";
var 追加值 = [0, 0];
牌数--;
//排序
if (判断起始 == 0) {
//trace("排序牌");
牌组 = 牌;
} else {
for (var i = 判断起始; i<=牌数; i++) {
牌组.push(牌[i]);
}
}
牌组.sortOn(1, 2 | 16);
//trace(牌组);
//临时显示
/*
var 显示 = "";
for (var i = 0; i<牌数; i++) {
显示 += 牌组[i][1]+" ";
}
//trace(显示);
//
*/
//牌数为4 从0算起
if (牌数 == 4) {
var 对比值 = 牌组[0][1];
//检测是否是顺子
for (var i = 1; i<5; i++) {
对比值--;
if (对比值 != 牌组[i][1]) {
//返回不是同花顺也不是顺子
//return false;
最终类型 = 0;
break;
}
}
//检测是否是同花
var 对比值 = 牌组[0][0];
for (var i = 1; i<5; i++) {
if (对比值 != 牌组[i][0]) {
if (最终类型 != 0) {
最终类型 = 4;
break;
}
}
}
if (最终类型 == "") {
最终类型 = 8;
}
} else {
最终类型 = 0;
}
//追加最大牌的花色和牌面
if (判断起始 == 0) {
追加值 = [牌组[0][1], 牌组[0][0]];
} else {
追加值 = [牌组[判断起始-1][1], 牌组[判断起始-1][0]];
}
//检查对子
var 对比值 = 0;
var 牌类型 = 0;
var 对子数 = 1;
var 最终对子数 = 0;
var temp = 0;
if (判断起始 != 0) {
判断起始--;
}
for (var i = 判断起始; i<=牌数; i++) {
/*
trace("");
trace("i="+i);
trace("对比值"+对比值);
trace("牌值"+牌组[i][1]);
*/
if (对比值 != 牌组[i][1]) {
//trace("牌不同");
if (对子数>最终对子数) {
最终对子数 = 对子数;
//trace("最终对子数"+最终对子数);
}
对子数 = 1;
对比值 = 牌组[i][1];
//牌类如果全散牌为5点。2对为2类或3类
牌类型++;
} else {
//trace("牌同");
//对子数++;
对子数++;
//对子数追加
//单对追加
if (temp == 0 or 对子数>=3) {
追加值[0] = 牌组[i][1];
追加值[1] = 0;
temp = 牌类型;
} else if (temp != 牌类型) {
//双对追加
if (追加值[0]>牌组[i][1]) {
追加值[1] = 牌组[i][1];
} else {
//当位置1小于位置2时换位
var temp_h = 追加值[0];
追加值[0] = 牌组[i][1];
追加值[1] = temp_h;
}
}
}
}
if (对子数>最终对子数) {
最终对子数 = 对子数;
//trace("最终对子数"+最终对子数);
}
//判断类型
var 类型值 = [牌类型, 最终对子数];
trace("类型值="+类型值);
if (类型值.toString() == "2,4") {
//4带1
最终类型 = 7;
} else if (类型值.toString() == "2,3") {
//3带对
最终类型 = 6;
} else if (类型值.toString() == (牌数-1)+",3") {
//3带1
最终类型 = 3;
} else if (类型值.toString() == (牌数-1)+",2") {
//双对
最终类型 = 2;
} else if (类型值.toString() == 牌数+",2") {
//单对
最终类型 = 1;
}
//判断同色
if (牌数 == 4) {
if (最终类型 != 8) {
var 对比值 = 牌组[0][0];
for (var i = 1; i<5; i++) {
if (对比值 != 牌组[i][0]) {
i = 10;
}
}
//trace(i);
if (i == 5) {
最终类型 = 5;
}
}
}
//trace("追加值="+追加值);
//trace(最终类型);
trace("牌类型及大小: "+[最终类型, 追加值[0], 追加值[1]]);
trace("");
return [最终类型, 追加值[0], 追加值[1]];
};
//比较牌大小
比较牌 = function () {
//显示各玩家牌级
比牌级 = new Array();
for (var i = 1; i<=5; i++) {
返回值 = 判断牌类型(this["牌组"+i], 0);
返回值.push("牌组"+i);
比牌级.push(返回值);
this["状态"+i].text = 类型数组[返回值[0]];
}
比牌级.sortOn([0, 1, 2], 2 | 16);
//trace(比牌级);
//trace(比牌级[0][3]);
//显示
for (var i = 0; i<5; i++) {
_root["大小"+比牌级[i][3].charAt(2)].text = "第"+(i+1);
}
};
比较牌();
//按钮重刷
button1.onRelease = function() {
trace("---------------------");
洗牌();
比较牌();
};
//=====================================
//
//转载请注明出处:羽柴 鬼铃-blog
// www.ycflash.com/blog
//
//=====================================
点击下载此文件评论: 2 | 引用: 0 | 查看次数: 3460
回复
]谢谢
很不错,有很大的帮助,我是个初学者,希望和柴兄交个朋友,有问题的时候可以交流下。QQ:5484219
发表评论
你没有权限发表评论!
上一篇
下一篇


文章来自:
Tags: 





