MATLAB大神求助
在扑克游戏中,一局牌由五张牌组成,组成的牌的大小由低向高如下:
High Card: 最高值的牌.
One Pair: 两张面值一样的牌(一对).
Two Pairs: 两个值不同的对子(两对).
Three of a Kind: 三张面值一样的牌(三个头).
Straight: 所有的牌面值为连续数值(杂花顺).
Flush: 所有的牌花色相同(同花).
Full House: 三个头加一对(三带两)
Four of a Kind: 四张牌面值相同(炸弹).
Straight Flush: 所有的牌花色相同并且为连续数值(同花顺).
Royal Flush: 10,J,Q,K和A,并且为相同花色(通天)。
牌的面值大小排序如下:2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace.
如果两个玩家的牌具有同样的排序(上面介绍的几种),那么他们牌的大小由手中最大的牌决定。例如,一对8比一对5大(见下面例一);但是如果两个玩家都用一对Q,那么他们手中最大的牌就用来比较大小(见下面例四);如果他们最高面值的牌也相等,那么就用次高面值的牌比较,以此类推。
考虑下面的几个例子:
文件 poker.txt包含一千局随机牌。每一行包含十张牌(用空格分隔);前五张是玩家1的牌,后五张是玩家2的牌。所有的牌都是合理的(没有非法字符或者重复的牌)。每个玩家的牌没有顺序,并且每一局都有明确的输赢。
其中玩家1能赢多少局?
其中poker.txt的内容是(这个是要读取txt文件的):
8C TS KC 9H 4S 7D 2S 5D 3S AC
5C AD 5D AC 9C 7C 5H 8D TD KS
3H 7H 6S KC JS QH TD JC 2D 8S
TH 8H 5C QS TC 9H 4D JC KS JS
7C 5H KC QH JD AS KH 4C AD 4S
5H KS 9C 7D 9H 8D 3S 5D 5C AH
6H 4H 5C 3H 2H 3S QH 5S 6S AS
TD 8C 4H 7C TC KC 4C 3H 7S KS
7C 9C 6D KD 3H 4C QS QC AC KH
JC 6S 5H 2H 2D KD 9D 7C AS JS
AD QH TH 9D 8H TS 6D 3S AS AC
2H 4S 5C 5S TC KC JD 6C TS 3C
QD AS 6H JS 2C 3D 9H KC 4H 8S
KD 8S 9S 7C 2S 3S 6D 6S 4H KC 展开
如果牌面都一样,只是花色不一样,那么是不是判平手?
例如两副牌都是T J Q K A 的同花顺,只是花色不同
根据你上变所给的条件,分辨不出大小
嗯,这题中所给的牌局,都是有确定输赢的,没有平手。也就是说题目中所给的牌局中不会出现牌序相同花色不同的情况。
poker.txt 文档中其实有一千局牌,上面是我截取的,这题考察了从文档中读取数据。
还有题目中的每付牌的比较情况实在不好弄(对大量数据操作)。
既然考察读取数据,那读取数据部分还是留给你自己写
我帮你写判断胜负的部分
提示一下,只要一个大的循环不断读取每一行的10张牌的信息
然后,比较得出胜负结果,记录一下
最后,数据读完,就可以统计输赢情况了
虽然很多组数据,但是说白了只要能够处理一组数据
用循环就可以处理很多组数据了
这里我用随机数随机从52张牌中抽取10张存在pocker元胞数组内
前5张分给玩家1,后5张分给玩家2
实际你要分析txt文件的时候,可以逐行读取10张牌判断赢家
最后的输出部分可以不要,记录一下输赢情况就可以了
判断大小时,主要就是根据规则为每幅五张牌制定一个panbie矩阵
其中panbie矩阵第一个元素是分类,按照
散牌 一对 两队 三张 顺子 同花 三带二 四带一 同花顺
1 2 3 4 5 6 7 8 9
的顺序分为1~9,9类
而判别后边的数是子类里面,再分大小的办法
例如:
如果是散牌 那么 panbie矩阵的第一个数就是1
后面的就是从大到小的5张牌的点数
如果是一对 那么 panbie矩阵的第一个数就是2
后面的就是从大到小的5张牌的点数
如果是三张 那么 panbie矩阵的第一个数就是4
后面的就是这共同三张的点数
判断输赢的时候,从第一位开始,不相同,胜负已分
如果相同 再判断下一位,直到分出胜负
在我的程序里如果有点数相同,花色不同的情况,会输出玩家0胜利
也就是平局的情况,如果你的数据里面没有这种情况,就肯定能分出胜
字数太多,程序只能上传文件了