牛牛牌型判定
最新推荐文章于 2025-10-22 19:39:41 发布
原创
最新推荐文章于 2025-10-22 19:39:41 发布
·
1.1w 阅读
·
2
·
6
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
JaveScript
同时被 2 个专栏收录
15 篇文章
订阅专栏
cocos
9 篇文章
订阅专栏
博客介绍了牌型大小规则,包括五小牛、五花牛、炸弹等牌型的大小顺序,还提及牌面数字K到A的大小关系,以及黑桃、红桃、梅花、方块的花色大小关系,同样牌型比大小,同样手牌比花色。
牌型大小:
五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑桃♠️ > 红桃♥️ > 梅花♣️ > 方块♦️,同样的牌型比大小,同样的手牌比花色.
/**
* Created by skyxu on 2019/3/20.
* 在cocoscreator里导入为插件使用
* 插件不支持es6,注意需要按照es5规则写
*/
"use strict";
/**
* 定义手牌类型(按照大小从小到大排序)
* @type {{TYPE_NONE: number, TYPE_NIU_1: number, TYPE_NIU_2: number,
* TYPE_NIU_3: number, TYPE_NIU_4: number, TYPE_NIU_5: number,
* TYPE_NIU_6: number, TYPE_NIU_7: number, TYPE_NIU_8: number,
* TYPE_NIU_9: number, TYPE_NIUNIU: number, TYPE_SILVER: number,
* TYPE_BOOM: number, TYPE_FLOWER: number, TYPE_FIVES: number}}
*/
var HandsType = {
TYPE_NONE: 0, // 没牛, 任意三张牌的和都不是10的倍数
TYPE_NIU_1: 1, // 牛1
TYPE_NIU_2: 2,
TYPE_NIU_3: 3,
TYPE_NIU_4: 4,
TYPE_NIU_5: 5,
TYPE_NIU_6: 6,
TYPE_NIU_7: 7,
TYPE_NIU_8: 8,
TYPE_NIU_9: 9,
TYPE_NIUNIU: 10, // 牛牛, 任意3张和为10的倍数,剩余2张和也为10的倍数
TYPE_SILVER: 11, // 银牛, 五张全是10、J、Q、K
TYPE_BOOM: 12, // 炸弹, 四张点数相同
TYPE_FLOWER: 13, // 5花牛, 五张全是J、Q、K
TYPE_FIVES: 14 // 5小牛(5张加起来小于等于10)
};
/**
*
* @param p{Number} 1-13 (A-K)
* @param s{Number} 1-4 (1方块diamond、2梅花club、3红桃heart、4黑桃spade)
* @constructor
*/
function CardObj(p, s) {
this.point = p; // 牌面点数
this.suit = s; // 牌面花色
}
/**
* 手牌类型返回对象
* @param type{Number} 手牌类型
* @param mCard{CardObj} 手里的最大牌
* @param ncards{Array} 组成牛的三张牌, 手牌分成两组方便展示
* @param pcards{Array} 决定点数的两张牌
* @constructor
*/
function TypeReturn(type, mCard, ncards, pcards) {
this.handsType = type; // 手牌类型
this.maxCard = mCard; // 最大牌
this.nCards = ncards; // 组成牛的牌
this.pCards = pcards; // 决定点数的牌
}
/**
* 创建一副牌,牌面A-K
* 默认已经洗牌
* @return {Array}
*/
function create1pairPoker(isShuffle) {
var cards = [];
for (var i = 1; i <= 13; i++) {
for (var j = 1; j <= 4; j++) {
cards.push(new CardObj(i, j));
}
}
if (isShuffle) {
cards = shuffle(cards);
}
return cards;
}
/**
* 洗牌
* @param arr{Array}
* @return {*}
*/
function shuffle(arr) {
var i, j, temp;
for (i = arr.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
/***
* 从大到小排序手牌
* @param cardsArr{Array} 手牌数组
*/
function sortBig2Samll(cardsArr) {
cardsArr.sort(function (c1, c2) {
return c2.point - c1.point;
});
return cardsArr;
}
/**
* 判定手牌类型
* @param cardsArr{Array} 要判定的手牌信息数组
* @return {TypeReturn}
*/
function getHandsType(cardsArr) {
var len = cardsArr.length;
if (!cardsArr || len < 1 || len > 5) return new TypeReturn(HandsType.TYPE_NONE, cardsArr[0], cardsArr, []);
sortBig2Samll(cardsArr);
var totalPoint = 0;
var realTotalPoint = 0;
var bigJ = true;
var big10 = true;
cardsArr.forEach((card)=>{
totalPoint += card.point <= 10 ? card.point : 10;
realTotalPoint += card.point;
if (card.point < 11){
bigJ = false;
}
if (card.point < 10){
big10 = false;
}
});
// 判断牌型,判断顺序不能变,依次从大到小判断5小牛、5花牛、炸弹、银牛、牛牛、有牛、没牛
if (totalPoint <= 10) {
console.log("五小牛");
return new TypeReturn(HandsType.TYPE_FIVES, cardsArr[0], cardsArr, []);
}
if (bigJ) {
console.log("五花牛");
return new TypeReturn(HandsType.TYPE_FLOWER, cardsArr[0], cardsArr, []);
}
// 牌型是4炸的话最大牌取炸弹牌,比如5555J取5,方便比较大小
if (realTotalPoint - cardsArr[len - 1].point === cardsArr[0].point * 4) {
console.log("炸弹");
return new TypeReturn(HandsType.TYPE_BOOM, cardsArr[0], cardsArr, []);
} else if (realTotalPoint - cardsArr[0].point === cardsArr[len - 1].point * 4) {
console.log("炸弹");
return new TypeReturn(HandsType.TYPE_BOOM, cardsArr[len - 1], cardsArr, []);
}
if (big10) {
console.log("银牛");
return new TypeReturn(HandsType.TYPE_SILVER, cardsArr[0], cardsArr, []);
}
var lave = totalPoint % 10;
for (var i = 0; i < len - 1; i++) {
var ret = 0;
for (var j = i + 1; j < len; j++) {
ret = (cardsArr[i].point <= 10 ? cardsArr[i].point : 10) + (cardsArr[j].point <= 10 ? cardsArr[j].point : 10);
if (ret % 10 === lave) {
var cardPre = [];
var cardSuf = [];
for (var k = 0; k < len; k++) {
if (k != i && k != j) {
cardPre.push(cardsArr[k]);
} else {
cardSuf.push(cardsArr[k]);
}
}
if (lave === 0) {
console.log("牛牛");
return new TypeReturn(HandsType.TYPE_NIUNIU, cardsArr[0], cardsArr, []);
}
console.log("牛", lave);
return new TypeReturn(HandsType["TYPE_NIU_" + lave], cardsArr[0], cardPre, cardSuf);
}
}
}
console.log("没牛.");
return new TypeReturn(HandsType.TYPE_NONE, cardsArr[0], cardsArr, []);
}
/**
* 比较两组手牌大小
* @param cards1{Array}
* @param cards2{Array}
* @return {Boolean} true 表示 cards1 大于 cards2
*/
function compareCards(cards1, cards2) {
var typeReturn1 = getHandsType(cards1);
var typeReturn2 = getHandsType(cards2);
return compareHandsReturn(typeReturn1, typeReturn2);
}
/**
* 比较两个手牌类型大小
* @param typeReturn1{TypeReturn}
* @param typeReturn2{TypeReturn}
*/
function compareHandsReturn(typeReturn1, typeReturn2) {
if (typeReturn1.handsType !== typeReturn2.handsType) {
return typeReturn1.handsType > typeReturn2.handsType;
} else {
if (typeReturn1.maxCard.point !== typeReturn2.maxCard.point) {
return typeReturn1.maxCard.point > typeReturn2.maxCard.point;
} else {
return typeReturn1.maxCard.suit > typeReturn2.maxCard.suit;
}
}
}
确定要放弃本次机会?
福利倒计时
:
:
立减 ¥
普通VIP年卡可用
立即使用
SkyXU123123
关注
关注
2
点赞
踩
6
收藏
觉得还不错?
一键收藏
知道了
11
评论
分享
复制链接
分享到 QQ
分享到新浪微博
扫一扫
举报
举报
专栏目录
网易面试题之 牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因, * 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,
李凯龙
12-07
5836
牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,
* 其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,
* 顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。
*/
11 条评论
您还未登录,请先
登录
后发表或查看评论
11 条评论
weixin_46082653
2019.12.24
加微信私聊
qq_45535678
2019.11.30
留个联系吧。或者加我微13244849820
@扫地僧@
2019.08.15
加个微信
weixin_44936591
2019.04.18
你微信多少?我这里有个棋牌能不能算?
SkyXU123123回复weixin_44936591
2019.04.18
[reply]weixin_44936591[/reply]
1109027098
安 莫、
2019.03.28
/**
* Created by skyxu on 2019/3/20.
* 在cocoscreator里导入为插件使用
* 插件不支持es6,注意需要按照es5规则写
*/
"use strict";
/**
* 定义手牌类型(按照大小从小到大排序)
* @type {{TYPE_NONE: number, TYPE_NIU_1: number, TYPE_NIU_2: number,
* TYPE_NIU_3: number, TYPE_NIU_4: number, TYPE_NIU_5: number,
* TYPE_NIU_6: number, TYPE_NIU_7: number, TYPE_NIU_8: number,
* TYPE_NIU_9: number, TYPE_NIUNIU: number, TYPE_SILVER: number,
* TYPE_BOOM: number, TYPE_FLOWER: number, TYPE_FIVES: number}}
*/
var HandsType = {
TYPE_NONE: 0, // 没牛, 任意三张牌的和都不是10的倍数
TYPE_NIU_1: 1, // 牛1
TYPE_NIU_2: 2,
TYPE_NIU_3: 3,
TYPE_NIU_4: 4,
TYPE_NIU_5: 5,
TYPE_NIU_6: 6,
TYPE_NIU_7: 7,
TYPE_NIU_8: 8,
TYPE_NIU_9: 9,
TYPE_NIUNIU: 10, // 牛牛, 任意3张和为10的倍数,剩余2张和也为10的倍数
TYPE_SILVER: 11, // 银牛, 五张全是10、J、Q、K
TYPE_BOOM: 12, // 炸弹, 四张点数相同
TYPE_FLOWER: 13, // 5花牛, 五张全是J、Q、K
TYPE_FIVES: 14 // 5小牛(5张加起来小于等于10)
};
/**
*
* @param p{Number} 1-13 (A-K)
* @param s{Number} 1-4 (1方块diamond、2梅花club、3红桃heart、4黑桃spade)
* @constructor
*/
function CardObj(p, s) {
this.point = p; // 牌面点数
this.suit = s; // 牌面花色
}
/**
* 手牌类型返回对象
* @param type{Number} 手牌类型
* @param mCard{CardObj} 手里的最大牌
* @param ncards{Array} 组成牛的三张牌, 手牌分成两组方便展示
* @param pcards{Array} 决定点数的两张牌
* @constructor
*/
function TypeReturn(type, mCard, ncards, pcards) {
this.handsType = type; // 手牌类型
this.maxCard = mCard; // 最大牌
this.nCards = ncards; // 组成牛的牌
this.pCards = pcards; // 决定点数的牌
}
/**
* 创建一副牌,牌面A-K
* 默认已经洗牌
* @return {Array}
*/
function create1pairPoker(isShuffle) {
var cards = [];
for (var i = 1; i <= 13; i++) {
for (var j = 1; j <= 4; j++) {
cards.push(new CardObj(i, j));
}
}
if (isShuffle) {
cards = shuffle(cards);
}
return cards;
}
/**
* 洗牌
* @param arr{Array}
* @return {*}
*/
function shuffle(arr) {
var i, j, temp;
for (i = arr.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
/***
* 从大到小排序手牌
* @param cardsArr{Array} 手牌数组
*/
function sortBig2Samll(cardsArr) {
cardsArr.sort(function (c1, c2) {
return c2.point - c1.point;
});
return cardsArr;
}
/**
* 判定手牌类型
* @param cardsArr{Array} 要判定的手牌信息数组
* @return {TypeReturn}
*/
function getHandsType(cardsArr) {
var len = cardsArr.length;
if (!cardsArr || len < 1> 5) return new TypeReturn(HandsType.TYPE_NONE, cardsArr[0], cardsArr, []);
sortBig2Samll(cardsArr);
var totalPoint = 0;
var realTotalPoint = 0;
var bigJ = true;
var big10 = true;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = cardsArr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var card = _step.value;
totalPoint += card.point <= 10 ? card.point : 10;
realTotalPoint += card.point;
if (card.point < 11 xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed> typeReturn2.handsType;
} else {
if (typeReturn1.maxCard.point !== typeReturn2.maxCard.point) {
return typeReturn1.maxCard.point > typeReturn2.maxCard.point;
} else {
return typeReturn1.maxCard.suit > typeReturn2.maxCard.suit;
}
}
}
weixin_45327844回复安 莫、
2019.06.28
你可以说说棋牌后面的内幕吗?
SkyXU123123回复安 莫、
2019.04.01
[reply]liaoanmo[/reply]
加qq吧,1108027098
安 莫、回复SkyXU123123
2019.03.31
联系方式有没?
安 莫、回复SkyXU123123
2019.03.29
真人啊老弟
SkyXU123123回复安 莫、
2019.03.28
[reply]liaoanmo[/reply]
机器人?
c++函数题-牛牛与好数
聪聪冲
02-03
671
若一个数的首位和末位相等,则定义这个数为“好数”。 例如:1231、4512394是好数,而12345、768740则不是好数。 请你编写一个函数,判断是不是好数。如果是好数则返回true,否则返回false。
示例1
输入
1231
返回值
true
说明 首位和末位都是1,相等。
示例2
输入
4
返回值
true
说明 首位和末位都是4,相等。
示例3
输入
100
返回值
false
说明 首位是1,末位是0,不相等。
class Solution {
public:.
lua——牛牛牌型处理相关算法(中)——牌型判定
九日王朝
05-24
1万+
牛牛的牌型按从小到大的顺序分为:无牛
算牛的方式为:先选出三张牌,若能组成十的整数倍 即为有牛,然后再看剩余两张牌除以十的余数。余几就是牛几,若正好也能整除十,即为牛牛。若无法选出三张组成十的整数倍的牌即为无牛。
银牛:1张10 加4张大于10的牌
金牛:5张大于10的牌
炸弹:存在四张相同的牌
五小牛:五张牌总数值相加小于等于10
首先定义牌型,因为客户端不同数的牛显
(转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)
热门推荐
weixin_33860722的博客
06-13
1万+
牌型大小:
五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑桃♠️ > 红桃♥️ > 梅花♣️ > 方块♦️,同样的牌型比大小,同样的手牌比花色.
1 /**
2 * 在cocoscreator里导入为插件使用
3...
每日一个网络知识点:应用层WWW与HTTP
一念的博客
10-22
1798
WWW(World Wide Web)中文译为"万维网",是一个由无数个互相链接的超文本文档组成的全球信息系统。
lua——牛牛牌型处理相关算法(下)——牌型比较
九日王朝
05-24
8332
牛牛的比牌规则为:
单牌比较: k>q>j>10>9>8>7>6>5>4>3>2>a。
花色比较:黑桃>红桃>梅花>方块。
牌型比较:无牛
无牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
有牛牌型比较:比牛数;牛数相同庄吃闲。
牛牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。
银牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比
【牛客】扑克牌大小
SickAgaric的博客
12-11
1015
添加链接描述
php 斗牛 牌型 和 比牌 规则
mute_Long的博客
12-25
1610
参数 :
$Poker 是一个数组
"size": 1 - 13 表示 $size_arr = ['A','二','三','四','五','六','七','八','九','十','J','Q','K'];
"tag": 1 - 4 表示 $tag_arr = ['黑桃','红桃','梅花','方片'];
例子:
同花顺
$Poker = [
['s...
Java麻将游戏核心算法实现:胡牌判定、AI决策与牌型评估系统
最新发布
12-11
Java麻将游戏核心算法实现是一个包含多个关键功能模块的综合项目,它涵盖了胡牌判定、智能决策、听牌检测、牌型评估以及出牌策略等麻将游戏的核心算法。这些算法构成了麻将游戏人工智能(AI)的骨架,并使得AI能够模拟...
温州双扣算法详解:提示与牌型判定教程
这段代码是关于温州双扣游戏算法的一部分实现,主要关注牌型判断和排序逻辑,使用了Lua编程语言。温州双扣是一种流行于中国浙江省温州市的扑克牌游戏,其规则复杂,涉及到牌型识别和组合策略。以下是对这段代码关键...
Java麻将游戏核心算法实现(胡牌判定、智能AI、听牌检测、牌型评估与出牌策略)
11-30
支持标准牌型、特殊牌型及地方变种规则的快速判定。 二、智能决策系统 基于深度强化学习框架构建的AI对战引擎,具备自学习能力与策略优化机制。系统通过蒙特卡洛树搜索与神经网络评估,实现动态出牌策略生成和长期...
2人牛牛游戏自动化测试代码开发
游戏的胜负判定依据是这样的牌型。 标签“求有无牛 比大小”进一步明确说明了测试代码的核心功能,即检测手中牌型是否构成牛,并在有牛的情况下比较两张牌的大小。这是牛牛游戏中的核心机制,是决定玩家胜负的关键...
JAVA牛牛游戏逻辑从入门到赢取倍率的实现
牛牛牌型从低到高分为牛1至牛9,以及牛牛(豹子),金牛(同花顺),顺金(同花顺),以及至尊牛牛(四条加一张单张),最高级别为至尊牛牛。 ### Java牛牛游戏逻辑知识点 #### 1. 创建房间 在游戏开始前,需要一...
JAVA 牛牛逻辑
04-25
java牛牛游戏逻辑实现 ,从创建房间-创建玩家-创建扑克牌-洗牌-发牌-比较大小(判断牛的类型 添加倍率)得到赢的玩家和倍率
lua——牛牛牌型处理相关算法(上)——牌值数据
九日王朝
05-24
1万+
这几天又做了牛牛游戏,在这里把相关算法写一下,与前几天写的赢三张的基本类似,所以大家也可以参考前几篇博客。
牛牛是一种简单却又非常有意思的棋牌游戏,主要是采用一副扑克牌其中的52张(除去大小王);第一局的庄家是随机产生,而后每局的庄家是上一轮游戏中的赢家,每局游戏系统自动洗牌后将5张牌均匀分给给各位玩家。玩家拿到牌后根据一定的游戏规则进行排列组合,庄家和闲家依次进行大小比较从而决定胜负。
C++循环链表的实现
weixin_30398227的博客
01-19
525
// .hpp文件
#include
class NodeCList{
public:
NodeCList();
static NodeCList* create(int element);
int element;
NodeCList* next;
};
class CircleList {
p...
独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
tobecrazy的专栏
11-29
6146
微软前总裁高群耀说过一句话让我印象深刻,大意是我们努力了那么多年,取得了不小的成就,我相信我们一定做对了一些事情。我觉得能够做对事情的一个重要前提是,我们想对了一些事情,而要想对事情就需要掌握一些正确的思考方法。
巴菲特和芒格一定不是靠掷筛子下注的,他们比一些人更接近真相的最重要原因是因为他们掌握了更正确的思维方式。
我个人将思考问题分成7个步骤。
1.正确的定义问题 Define Q
牛牛算法
qq_39536605的博客
04-09
7007
--------------------扑克对象定义说明------------------------------
包路径 business.global.poker
Poker.java PokerDefine.java:
扑克编码说明
方块A,2,3---K:
对应编码顺序 101,102,103-113
梅花A,2,3---K:
对应编码顺序 201,202,203...