一副扑克有52张牌,每张牌由一个花色和一个数字构成。
花色为以下四者之一:
方片 D
黑桃 S
红桃 H
梅花 C
数字为以下13者之一,且大小顺序如下:
2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A
花色是大小无序的,但数字有序,2最小,A最大。
一手牌有5张。根据花色和数字的不同,其大小按照以下规则决定。
满足下面规则的手牌会大于满足上面规则的手牌。
同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌
散牌:
不符合其他任何规则的五张牌。 比较最大一张牌的大小,如果相同,比较第二大的牌的牌点数,如果五张牌的牌点数都相同,则为平局。
对子:
有两张同样大小的牌片。 比较两张大小一样的牌的牌点数,如果相同,依次比较剩余的三张牌大小。若大小都相同,则为平局。
两对:
有两个对子牌。 比较大对子的大小,若相同,比较小对子的大小,若还相同,比较单张牌的大小,若还相同,则为平局。
三条:
有三张同样大小的牌片。 比较三张大小一样的牌的牌点数大小。
顺子:
五张相连的牌。 比较最大的牌点数。若大小都相同,则为平局。
同花:
五张牌的花色相同。 按照散排规则比较大小。
葫芦:
三条+对子。 比较三张大小一样的牌的牌点数。
铁支:
有四张同样大小的牌片。 比较四张大小一样的牌的牌点数。
同花顺:
同一种花色的顺子。 比较最大的牌的牌的大小。若大小都相同,则为平局。
你的工作是为两手牌判断大小。
包含四个文件类:
Pai类:包含两个成员变量,数字和色号。
Player类:包含两个成员变量,玩家姓名及牌池。
Kanpai类及Fapai类:完成输出及随机发牌的功能性任务。
Main主函数:构建52张牌并打乱。
Compare类:完成两个玩家牌大小的比较,首先要将两个玩家手中 的牌进行排序,在按照 ” 同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌 “ 顺序进行比较。
备注:Compare类已罗列,完整代码点击此处
package demo;
import java.util.ArrayList;
import java.util.Collections;
//同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌
public class Compare {
public static String compare(Player a, Player b) {
String result = "Black";
ArrayList<Pai> aList = a.getList();
ArrayList<Pai> bList = b.getList();
//判断牌面,先对其按照牌大小排序
Collections.sort(aList);
Collections.sort(bList);
//比较
if (IsTonghuashun(aList) || IsTonghuashun(bList)) {
if (IsTonghuashun(aList) && IsTonghuashun(bList)) {
int i = aList.get(0).getN();
int j = bList.get(0).getN();
if (i < j) {
return "white";
} else if (i == j) {
return "ping and none";
} else if (i > j) {
return result;
}
} else if (!IsTonghuashun(aList) && IsTonghuashun(bList)) {
return "white";
} else if (IsTonghuashun(aList) && !IsTonghuashun(bList)) {
return result;
}
}//01.同花顺比较第一张
else if (IsTiezhi(aList) || IsTiezhi(bList)) {
if (IsTiezhi(aList) && IsTiezhi(bList)) {
int i0 = aList.get(0).getN();
int j0 = bList.get(0).getN();
int i1 = aList.get(1).getN();
int j1 = bList.get(1).getN();
if (i1 < j1) {
return "white";
} else if (i1 > j1) {
return result;
}
} else if (!IsTiezhi(aList) && IsTiezhi(bList)) {
return "white";
} else if (IsTiezhi(aList) && !IsTiezhi(bList)) {
return result;
}
}//02.铁支比较第二张
else if (IsHulu(aList) || IsHulu(bList)) {
if (IsHulu(aList) && IsHulu(bList)) {
int i = aList.get(2).getN();
int j = bList.get(2).getN();
if (i < j) {
return "white";
} else if (i > j) {
return result;
}
} else if (!IsHulu(aList) && IsHulu(bList)) {
return "white";
} else if (IsHulu(aList) && !IsHulu(bList)) {
return result;
}
}//03.葫芦比较第三张
else if (IsTonghua(aList) || IsTonghua(bList)) {
if (IsTonghua(aList) && IsTonghua(bList)) {
for (int i = aList.size() - 1; i >= 0; i--) {
int x = aList.get(i).getN();
int y = bList.get(i).getN();
if (x == y) {
continue;
} else if (x < y) {
return "white";
} else {
return result;
}
}
return "ping and none";
} else if (!IsTonghua(aList) && IsTonghua(bList)) {
return "white";
} else if (IsTonghua(aList) & !IsTonghua(bList)) {
return result;
}
}//04.同花花色一致时按散牌大小比较
else if (IsShunzi(aList) || IsShunzi(bList)) {
if (IsShunzi(aList) && IsShunzi(bList)) {
int i = aList.get(0).getN();
int j = bList.get(0).getN();
if (i < j) {
return "white";
} else if (i == j) {
return "ping and none";
} else if (i > j) {
return result;
}
} else if (!IsShunzi(aList) && IsShunzi(bList)) {
return "white";
} else if (IsShunzi(aList) && !IsShunzi(bList)) {
return result;
}
}//05.顺子比较第一张
else if (IsSantiao(aList) || IsSantiao(bList)) {
if (IsSantiao(aList) && IsSantiao(bList)) {
int i = aList.get(2).getN();
int j = bList.get(2).getN();
if (i < j) {
return "white";
} else if (i > j) {
return result;
}
} else if (!IsSantiao(aList) && IsSantiao(bList)) {
return "white";
} else if (IsSantiao(aList) && !IsSantiao(bList)) {
return result;
}
}//06.三条
else if (IsLiangdui(aList) || IsLiangdui(bList)) {
if (IsLiangdui(aList) && IsLiangdui(bList)) {
int a4 = aList.get(4).getN();
int b4 = bList.get(4).getN();
int[] a_liangdui = getLiangdui(aList);
int[] b_liangdui = getLiangdui(bList);
if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] == b_liangdui[0]) {
int aNum = 0, bNum = 0;
for (int i = 0; i < aList.size(); i++) {
int listNum = aList.get(i).getN();
if (listNum != a_liangdui[0] && listNum != a_liangdui[1]) {
aNum = listNum;
break;
}
}
for (int i = 0; i < bList.size(); i++) {
int listNum = bList.get(i).getN();
if (listNum != b_liangdui[0] && listNum != b_liangdui[1]) {
bNum = listNum;
break;
}
}
if (aNum == bNum) {
return "ping and none";
} else if (aNum < bNum) {
return "white";
} else if (aNum > bNum) {
return result;
}
} else if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] < b_liangdui[0]) {
return "white";
} else if (a_liangdui[1] == b_liangdui[1] && a_liangdui[0] > b_liangdui[0]) {
return result;
} else if (a_liangdui[1] < b_liangdui[1]) {
return "white";
} else if (a_liangdui[1] > b_liangdui[1]) {
return result;
}
} else if (!IsLiangdui(aList) && IsLiangdui(bList)) {
return "white";
} else if (IsLiangdui(aList) && !IsLiangdui(bList)) {
return result;
}
}//07.两对
else if (IsDuizi(aList) || IsDuizi(bList)) {
int a4 = aList.get(4).getN();
int b4 = bList.get(4).getN();
if (IsDuizi(aList) && IsDuizi(bList)) {
int ax = getDuizi(aList);
int bx = getDuizi(bList);
if (ax == bx) {
if (a4 == b4) {
for (int i = aList.size() - 2; i >= 0; i--) {
int x = aList.get(i).getN();
int y = bList.get(i).getN();
if (x == y) {
continue;
} else if (x < y) {
return "white";
} else {
return result;
}
}
return "ping and none";
} else if (a4 < b4) {
return "white";
} else if (a4 > b4) {
return result;
}
} else if (ax < bx) {
return "white";
} else {
return result;
}
} else if (!IsDuizi(aList) && IsDuizi(bList)) {
return "white";
} else if (IsDuizi(aList) && !IsDuizi(bList)) {
return result;
}
}//08.对子
else {
for (int i = aList.size() - 1; i >= 0; i--) {
int x = aList.get(i).getN();
int y = bList.get(i).getN();
if (x == y) {
continue;
} else if (x < y) {
return "white";
} else {
return result;
}
}
return "ping and none";
}//09.散牌(散牌无需判断,最后一种肯定是散牌)
return result;
}
public static boolean IsTonghuashun(ArrayList<Pai> list) {
boolean b = false;
//花色判断
int color = list.get(0).getC();
int num = list.get(0).getN();
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getC() != color) {
return b;
}
}
//顺子判断
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getN() - num != i) {
return b;
}
}
return true;
}
public static boolean IsTiezhi(ArrayList<Pai> list) {
boolean b = false;
int num0 = list.get(0).getN();
int num1 = list.get(1).getN();
if (num0 != num1) {
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getN() - num1 != 0) {
return b;
}
}
} else if (num0 == num1) {
for (int i = 2; i < list.size() - 1; i++) {
if (list.get(i).getN() - num1 != 0) {
return b;
}
}
}
return true;
}
public static boolean IsHulu(ArrayList<Pai> list) {
boolean b = false;
int num0 = list.get(0).getN();
int num1 = list.get(1).getN();
int num2 = list.get(2).getN();
int num3 = list.get(3).getN();
int num4 = list.get(4).getN();
if (num0 != num2) {
if (num1 != num0 || num2 != num3 || num2 != num4) {
return b;
}
} else if (num0 == num2) {
if (num1 != num0 || num3 != num4) {
return b;
}
}
return true;
}
public static boolean IsTonghua(ArrayList<Pai> list) {
boolean b = false;
int color = list.get(0).getC();
int num = list.get(0).getN();
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getC() != color) {
return b;
}
}
return true;
}
public static boolean IsShunzi(ArrayList<Pai> list) {
boolean b = false;
int num = list.get(0).getN();
for (int i = 1; i < list.size(); i++) {
if (list.get(i).getN() - num != i) {
return b;
}
}
return true;
}
public static boolean IsSantiao(ArrayList<Pai> list) {
boolean b = true;
int num0 = list.get(0).getN();
int num1 = list.get(1).getN();
int num2 = list.get(2).getN();
int num3 = list.get(3).getN();
int num4 = list.get(4).getN();
if (num1 == num2 && num0 == num2) {
return b;
} else if (num1 == num2 && num3 == num2) {
return b;
} else if (num3 == num2 && num4 == num2) {
return b;
}
return false;
}
public static boolean IsLiangdui(ArrayList<Pai> list) {
boolean b = true;
int num0 = list.get(0).getN();
int num1 = list.get(1).getN();
int num2 = list.get(2).getN();
int num3 = list.get(3).getN();
int num4 = list.get(4).getN();
if (num0 != num1) {
if (num1 == num2 && num3 == num4) {
return b;
}
} else if (num0 == num1) {
if (num2 != num3) {
if (num3 == num4) {
return b;
}
} else if (num2 == num3) {
return b;
}
}
return false;
}
public static boolean IsDuizi(ArrayList<Pai> list) {
boolean b = true;
int num0 = list.get(0).getN();
int num1 = list.get(1).getN();
int num2 = list.get(2).getN();
int num3 = list.get(3).getN();
int num4 = list.get(4).getN();
if (num0 == num1 || num1 == num2 || num2 == num3 || num3 == num4) {
return b;
}
return false;
}
public static int getDuizi(ArrayList<Pai> list) {
int dui = 0;
for (int i = 0; i < list.size() - 1; i++) {
int x = list.get(i).getN();
int y = list.get(i + 1).getN();
if (x == y) {
dui = x;
break;
}
}
return dui;
}
public static int[] getLiangdui(ArrayList<Pai> list) {
int[] liangdui = {0, 0};
int smallNum = list.get(1).getN();
int bigNum = list.get(3).getN();
int max;
if (smallNum > bigNum) {
max = smallNum;
bigNum = max;
smallNum = bigNum;
}
liangdui[0] = smallNum;
liangdui[1] = bigNum;
return liangdui;
}
}
笔者第一次使用CSDN,向各位大神学习。请大家给我点赞赞!!!转载请注明出处~~~~哈哈哈,虽然没人看,仪式感总要有的!!!