删除 YouleNexus 内嵌 .git,统一由根仓库唯一管理。提交: - projects/ 旧 H5 模板 Game_Surface_3 与各子游戏源码 - cocoscreator_projects/YouleNexus 工程 + cocos-creator-mcp 扩展源码 - CLAUDE.md、.mcp.json 等配置 library/temp/node_modules/dist 等缓存由 .gitignore 排除。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
485 lines
9.6 KiB
JavaScript
485 lines
9.6 KiB
JavaScript
/*
|
|
逻辑算法等
|
|
*/
|
|
/*
|
|
扑克牌的统一编码规则:
|
|
1,牌面花色的定义 5:王 4:黑桃 3:红心 2:梅花 1:方块
|
|
2,牌面数值的定义 01-A 02-2...09:9 10:10 11:J 12:Q 13:K 98:小王99:大王
|
|
3,牌编码的定义 3位数字 第一位为牌面花色 第二三位为牌面数值
|
|
4,大小王的定义 598:小王 599:大王
|
|
|
|
101
|
|
*/
|
|
|
|
|
|
//创建牌局牌
|
|
function nn_newCards(pairs){
|
|
function cardinfo (id, flower, val, code, gameval){
|
|
//单张牌信息
|
|
var card = {};
|
|
card.id = id; //绝对id
|
|
card.flower = flower; //牌面花色
|
|
card.val = val; //牌面数值
|
|
card.code = code; //牌编码
|
|
card.gameval = gameval;//游戏中对应数值
|
|
return card;
|
|
};
|
|
|
|
if(pairs == null){
|
|
pairs = 1;
|
|
}
|
|
var cards = [];
|
|
for (var i = 1; i <= pairs; i++) {
|
|
for (var j = 1; j <= 4; j++) {
|
|
for (var k = 0; k < 13; k++) {
|
|
var id = (i - 1) * 54 + (j - 1) * 13 + k;
|
|
var code = j * 100 + k + 1;
|
|
var val = k + 1;
|
|
if(val > 10){
|
|
val = 10;
|
|
}
|
|
var pai = cardinfo(id, j, k + 1, code,val);
|
|
cards.push(pai);
|
|
};
|
|
};
|
|
//小王
|
|
var xiao = cardinfo((i - 1) * 54 + 52, 5, 98, 598,10);
|
|
cards.push(xiao);
|
|
//大王
|
|
var da = cardinfo((i - 1) * 54 + 53, 5, 99, 599,10);
|
|
cards.push(da);
|
|
};
|
|
return cards;
|
|
};
|
|
|
|
//玩家手牌信息
|
|
var NN_cardsInfo = function(_cards){
|
|
this.cards = _cards;
|
|
this.type = "";
|
|
this.Multiple = 0; //牌输赢倍数
|
|
this.niu = -1; //牛几
|
|
};
|
|
|
|
NN_cardsInfo.prototype.AnalysisType = function(cardlist,type_mult){
|
|
//分析牌型(cardlist-所有牌,type_mult-倍数类型)
|
|
if(type_mult == 3){
|
|
type_mult = 2;
|
|
}
|
|
|
|
var clist = [];
|
|
var vallist = []; //牌对应数值列表
|
|
var g_vallist = []; //游戏对应数值列表
|
|
for(var i=0;i<this.cards.length;i++){
|
|
clist[i] = cardlist[this.cards[i]];
|
|
vallist[i] = clist[i].val;
|
|
g_vallist[i] = clist[i].gameval;
|
|
}
|
|
|
|
//判断类型
|
|
//炸弹
|
|
var arr_s = vallist.sort();
|
|
if((arr_s[0] == arr_s[1] && arr_s[1] == arr_s[2] && arr_s[2] == arr_s[3])
|
|
||(arr_s[1] == arr_s[2] && arr_s[2] == arr_s[3] && arr_s[3] == arr_s[4])){
|
|
this.type = "bomb";
|
|
if(type_mult == 1){
|
|
this.Multiple = 7;
|
|
}else if(type_mult == 2){
|
|
this.Multiple = 13;
|
|
}
|
|
return;
|
|
}
|
|
//五小
|
|
if(clist[0].gameval + clist[1].gameval + clist[2].gameval + clist[3].gameval + clist[4].gameval <= 10){
|
|
this.type = "wx";
|
|
if(type_mult == 1){
|
|
this.Multiple = 6;
|
|
}else if(type_mult == 2){
|
|
this.Multiple = 12;
|
|
}
|
|
return;
|
|
}
|
|
|
|
//五花牛
|
|
if(clist[0].val >= 10 && clist[1].val >= 10 && clist[2].val >= 10 && clist[3].val >= 10 && clist[4].val >= 10){
|
|
this.type = "nmw";
|
|
if(type_mult == 1){
|
|
this.Multiple = 5;
|
|
}else if(type_mult == 2){
|
|
this.Multiple = 11;
|
|
}
|
|
return;
|
|
}
|
|
|
|
//判断牛几
|
|
var arr = [0,1,2,3,4];
|
|
outer:
|
|
for(var i=0;i<3;i++){
|
|
for(var j=i+1;j<4;j++){
|
|
for(var k=j+1;k<=4;k++){
|
|
if((g_vallist[i] + g_vallist[j] + g_vallist[k])%10 == 0){
|
|
arr.splice(k,1);
|
|
arr.splice(j,1);
|
|
arr.splice(i,1);
|
|
break outer;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(arr.length == 2){//有牛
|
|
var a = (g_vallist[arr[0]] + g_vallist[arr[1]])%10;
|
|
this.type = "n" + a;
|
|
this.niu = a;
|
|
if(type_mult == 1){
|
|
if(a == 0){ //牛牛
|
|
this.Multiple = 4;
|
|
this.type = "nn";
|
|
this.niu = 10;
|
|
}else if(a == 9){ //牛九
|
|
this.Multiple = 3;
|
|
}else if(a == 8){ //牛八
|
|
this.Multiple = 2;
|
|
}else { //牛一~牛七
|
|
this.Multiple = 1;
|
|
}
|
|
}else if(type_mult == 2){
|
|
if(a == 0){ //牛牛
|
|
this.Multiple = 10;
|
|
this.type = "nn";
|
|
this.niu = 10;
|
|
}else{
|
|
this.Multiple = a;
|
|
}
|
|
}
|
|
return;
|
|
}else{//无牛
|
|
this.type = "wn";
|
|
this.Multiple = 1;
|
|
this.niu = 0;
|
|
return;
|
|
}
|
|
};
|
|
|
|
function NN_toCardImg(card) {
|
|
//转换成显示牌的图片对应的帧数
|
|
if(card == null){//返回牌背面帧数
|
|
return 55;
|
|
}else{//返回正面牌帧数
|
|
return card+1;
|
|
}
|
|
};
|
|
|
|
function NN_setPositionSeat(myseat) {
|
|
//设置方位和座位对应转换
|
|
var a = myseat - 0;
|
|
for(var i = 0; i < NN_Desk.personMax; i ++){
|
|
if(i + a < NN_Desk.personMax){
|
|
NN_FS[i] = i + a;//方位对应座位
|
|
NN_SF[i + a] = i;//座位对应方位
|
|
}else {
|
|
NN_FS[i] = i + a - NN_Desk.personMax;
|
|
NN_SF[i + a - NN_Desk.personMax] = i;
|
|
}
|
|
}
|
|
};
|
|
|
|
function getStrLength(str){
|
|
//获取字符串长度
|
|
var cArr = str.match(/[^\x00-\xff]/ig);
|
|
return str.length + (cArr == null ? 0 : cArr.length);
|
|
};
|
|
|
|
|
|
|
|
function subString(str, len, hasDot)
|
|
{
|
|
var newLength = 0;
|
|
var newStr = "";
|
|
var chineseRegex = /[^\x00-\xff]/g;
|
|
var singleChar = "";
|
|
var strLength = str.replace(chineseRegex,"**").length;
|
|
for(var i = 0;i < strLength;i++)
|
|
{
|
|
singleChar = str.charAt(i).toString();
|
|
if(singleChar.match(chineseRegex) != null)
|
|
{
|
|
newLength += 2;
|
|
}
|
|
else
|
|
{
|
|
newLength++;
|
|
}
|
|
if(newLength > len)
|
|
{
|
|
break;
|
|
}
|
|
newStr += singleChar;
|
|
}
|
|
|
|
if(hasDot && strLength > len)
|
|
{
|
|
newStr += "...";
|
|
}
|
|
return newStr;
|
|
}
|
|
|
|
function NN_playSound(wav_type,play_type,sex,wait_time){
|
|
//播放音效
|
|
if(wav_type != null){
|
|
if(Utl.ReadData(Utl.Config.sound) != 1){return;}
|
|
if(play_type == null){
|
|
play_type = 0;
|
|
}
|
|
if(sex == null){
|
|
sex = 1;
|
|
}
|
|
if(wait_time == null){
|
|
wait_time = 0;
|
|
}
|
|
var sound = "";
|
|
switch (wav_type){
|
|
case "bgm"://游戏背景音
|
|
sound = "00101.mp3";
|
|
break;
|
|
case "ksyx"://开始游戏
|
|
sound = "00102.mp3";
|
|
break;
|
|
case "buttom"://按钮
|
|
sound = "00051.mp3";
|
|
break;
|
|
case "xz"://下注
|
|
sound = "00145.mp3";
|
|
break;
|
|
case "djj"://第几局
|
|
sound = "00103.mp3";
|
|
break;
|
|
case "dz"://倒桩
|
|
sound = "00104.mp3";
|
|
break;
|
|
case "ysz"://摇色子
|
|
sound = "00105.mp3";
|
|
break;
|
|
case "fp"://发牌
|
|
sound = "00106.mp3";
|
|
break;
|
|
case "jb"://金币
|
|
sound = "00107.mp3";
|
|
break;
|
|
case "js"://结算
|
|
sound = "00108.mp3";
|
|
break;
|
|
case "sl"://胜利
|
|
sound = "00109.mp3";
|
|
break;
|
|
case "sb"://失败
|
|
sound = "00110.mp3";
|
|
break;
|
|
case "wn"://无牛
|
|
if(sex == 2){
|
|
sound = "00125.mp3";
|
|
}else {
|
|
sound = "00111.mp3";
|
|
}
|
|
break;
|
|
case "n1"://牛1
|
|
if(sex == 2){
|
|
sound = "00126.mp3";
|
|
} else {
|
|
sound = "00112.mp3";
|
|
}
|
|
break;
|
|
case "n2"://牛2
|
|
if(sex == 2){
|
|
sound = "00127.mp3";
|
|
} else {
|
|
sound = "00113.mp3";
|
|
}
|
|
break;
|
|
case "n3"://牛3
|
|
if(sex == 2){
|
|
sound = "00128.mp3";
|
|
} else {
|
|
sound = "00114.mp3";
|
|
}
|
|
break;v
|
|
case "n4"://牛4
|
|
if(sex == 2){
|
|
sound = "00129.mp3";
|
|
} else {
|
|
sound = "00115.mp3";
|
|
}
|
|
break;
|
|
case "n5"://牛5
|
|
if(sex == 2){
|
|
sound = "00130.mp3";
|
|
} else {
|
|
sound = "00116.mp3";
|
|
}
|
|
break;
|
|
case "n6"://牛6
|
|
if(sex == 2){
|
|
sound = "00131.mp3";
|
|
} else {
|
|
sound = "00117.mp3";
|
|
}
|
|
break;
|
|
case "n7"://牛7
|
|
if(sex == 2){
|
|
sound = "00132.mp3";
|
|
} else {
|
|
sound = "00118.mp3";
|
|
}
|
|
break;
|
|
case "n8"://牛8
|
|
if(sex == 2){
|
|
sound = "00133.mp3";
|
|
} else {
|
|
sound = "00119.mp3";
|
|
}
|
|
break;
|
|
case "n9"://牛9
|
|
if(sex == 2){
|
|
sound = "00134.mp3";
|
|
} else {
|
|
sound = "00120.mp3";
|
|
}
|
|
break;
|
|
case "nn"://牛牛
|
|
if(sex == 2){
|
|
sound = "00135.mp3";
|
|
} else {
|
|
sound = "00121.mp3";
|
|
}
|
|
break;
|
|
case "shunzi": //顺子
|
|
if(sex == 2){
|
|
sound = "00157.mp3";
|
|
} else {
|
|
sound = "00152.mp3";
|
|
}
|
|
break;
|
|
case "tonghua": //同花
|
|
if(sex == 2){
|
|
sound = "00158.mp3";
|
|
} else {
|
|
sound = "00153.mp3";
|
|
}
|
|
break;
|
|
case "hulu": //葫芦
|
|
if(sex == 2){
|
|
sound = "00156.mp3";
|
|
} else {
|
|
sound = "00151.mp3";
|
|
}
|
|
break;
|
|
case "wuxiao": //五小牛
|
|
if(sex == 2){
|
|
sound = "00137.mp3";
|
|
} else {
|
|
sound = "00123.mp3";
|
|
}
|
|
break;
|
|
case "wuhua": //五花牛
|
|
if(sex == 2){
|
|
sound = "00136.mp3";
|
|
} else {
|
|
sound = "00122.mp3";
|
|
}
|
|
break;
|
|
case "bomb": //炸弹
|
|
if(sex == 2){
|
|
sound = "00138.mp3";
|
|
} else {
|
|
sound = "00124.mp3";
|
|
}
|
|
break;
|
|
case "flush": //同花顺
|
|
if(sex == 2){
|
|
sound = "00159.mp3";
|
|
} else {
|
|
sound = "00154.mp3";
|
|
}
|
|
break;
|
|
case "bigbomb": //五炸
|
|
sound = "00155.mp3";
|
|
break;
|
|
case "qdz": //确定庄
|
|
sound = "00139.mp3";
|
|
break;
|
|
case "xp": //洗牌
|
|
sound = "00140.mp3";
|
|
break;
|
|
case "hd_zd": //炸弹
|
|
sound = "00141.mp3";
|
|
break;
|
|
case "hd_pb": //碰杯
|
|
sound = "00142.mp3";
|
|
break;
|
|
case "hd_xh": //鲜花
|
|
sound = "00143.mp3";
|
|
break;
|
|
case "hd_zj"://抓鸡
|
|
sound = "00144.mp3";
|
|
break;
|
|
case "rob": //抢
|
|
if(sex == 2){
|
|
sound = "00148.mp3";
|
|
} else {
|
|
sound = "00146.mp3";
|
|
}
|
|
break;
|
|
case "norob"://不抢
|
|
if(sex == 2){
|
|
sound = "00149.mp3";
|
|
} else {
|
|
sound = "00147.mp3";
|
|
}
|
|
break;
|
|
case "typeReward"://不抢
|
|
sound = "00150.mp3";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if(!Utl.isMainScene() || sound == ""){
|
|
return;
|
|
}
|
|
if(wait_time > 0){
|
|
window.setTimeout(function(){
|
|
Func.play_wav(sound,play_type);
|
|
},wait_time);
|
|
}else {
|
|
Func.play_wav(sound,play_type);
|
|
}
|
|
}else{
|
|
//关闭音效
|
|
for(var i=102;i<=149;i++){
|
|
Func.play_wav("00"+i+".mp3",-1);
|
|
}
|
|
}
|
|
};
|
|
|
|
function uaredirect(murl){
|
|
//
|
|
try{
|
|
if(document.getElementById("bdmark") != null) {
|
|
return
|
|
}
|
|
var urlhash = window.location.hash;
|
|
if(!urlhash.match("fromapp")){
|
|
if((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))){
|
|
location.replace(murl);
|
|
}
|
|
}
|
|
}catch(err){}
|
|
}
|
|
//uaredirect("http://m.5ixuexiwang.com/");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|