Files
youle_cocos/projects/niuniu/js/niuniu/nn_logic.js
T
joywayerandClaude Opus 4.8 7ab748919a chore: 纳入项目全部源码进根仓库统一管理
删除 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>
2026-06-28 11:55:13 +08:00

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/");