斗地主出牌类型的判断

zjkboy 2009-07-25 12:30:45
我声明了一对同位数组
我将扑克牌分别编号1到54 顺序从小到大
并且 记录相应牌的点数 J为11 Q12 K13 A14 215 小王16 大王17
如下:

int[] _bianhao =
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54
};//编号

int[] _dianshu =
{
3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 17
};//点数


如过你还没看明白 另外这两个数组可以帮你理解我的做法

String[] _huase =
{
"红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "红桃", "方片", "花子", "黑桃", "小王", "大王"
};//花色


String[] _paimian =
{
"3", "3", "3", "3", "4", "4", "4", "4", "5", "5", "5", "5", "6", "6", "6", "6", "7", "7", "7", "7", "8", "8", "8", "8", "9", "9", "9", "9", "10", "10", "10", "10", "J", "J", "J", "J", "Q", "Q", "Q", "Q", "K", "K", "K", "K", "A", "A", "A", "A", "2", "2", "2", "2", "小王", "大王"
};//牌面





下面我想要的是 随机抽出54张牌里的某些张纸牌
然后判断我抽的这些牌 是如下牌型的某一种

//火箭
//炸
//单
//对
//三张牌
//三带一
//三带二
//单顺
//双顺
//三顺
//飞机带翅膀单
//飞机带翅膀双
//四带二
//任何牌型都不是

我根据int[] _bianhao和int[] _dianshu写了一套判断方法
但是方法笨的自己都看不下去了
求高人指点如何能高效判断类型
如果能代码示例一二 感激不尽!!
...全文
416 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuweifeng0323 2009-07-26
  • 打赏
  • 举报
回复
定义两个枚举类型,一个代表花色,一个代表点数就是你下面那样啊,至于判断牌,为了简便,我假设只有三条,对子,以及散排三种,那么,我们可以定义一个7位数来表示,比如我的牌是三条A,那么我可以用3141414来表示,3代表是三条,14代表A,而对子比如一对4加一张5,那么我们可以用2040405来表示(把对子的点数写在单牌前面),而散牌比如一张4,一张6,一张9,那么我们可以用1090604来表示(后面六位按牌的大小排列),这样比较牌可以转化为整数的比较,你的牌的玩法可以通过这个例子扩展,这是我的想法,不知道能不能替LZ解惑,我只编写过砸金花的纸牌游戏,如果需要,可以发给你看下
zjkboy 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xuweifeng0323 的回复:]
定义两个枚举类型,一个代表花色,一个代表点数就是你下面那样啊,至于判断牌,为了简便,我假设只有三条,对子,以及散排三种,那么,我们可以定义一个7位数来表示,比如我的牌是三条A,那么我可以用3141414来表示,3代表是三条,14代表A,而对子比如一对4加一张5,那么我们可以用2040405来表示(把对子的点数写在单牌前面),而散牌比如一张4,一张6,一张9,那么我们可以用1090604来表示(后面¡­
[/Quote]

我已试验出新的方法了
谢谢你
zjkboy 2009-07-25
  • 打赏
  • 举报
回复
感觉如果按我们平时人的思维去做这个算法 实在太没效率了
正在实验更好的一个算法
希望大家都来踊跃讨论
cwjieNo1 2009-07-25
  • 打赏
  • 举报
回复
这个应当是可以这样理解,在随机抽取出来的牌中,有LZ所说的组合。
可以这样问:在数组中连续的2个或者2个以上的数字,有这样的结合
有点难啊
zjkboy 2009-07-25
  • 打赏
  • 举报
回复
更新下牌型

//火箭
//炸弹
//单牌
//对牌
//三张牌
//三带一个单
//三带一个对
//单顺
//双顺
//三顺
//飞机带两个单
//飞机带两个对
//四带两个单
//四带两个对
//什么都不是
zjkboy 2009-07-25
  • 打赏
  • 举报
回复
我自己写的实在是笨
我想听听大牛们讲讲有效率的算法
zl3450341 2009-07-25
  • 打赏
  • 举报
回复
帮顶
o_range 2009-07-25
  • 打赏
  • 举报
回复
顶哈
筱伟 2009-07-25
  • 打赏
  • 举报
回复
这个还是自己想比较好,或者可以求助于Google。呵呵
joedao 2009-07-25
  • 打赏
  • 举报
回复
帮你顶下
zjkboy 2009-07-25
  • 打赏
  • 举报
回复
怎么一个人都没有...

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧