模拟保皇游戏开始的发牌过程。规则:4副扑克,5个玩家。1)有一个大王标记为皇上。每次发牌时,所发牌中有该大王的玩家是皇上。2)皇帝选择侍卫(也叫保儿、腿子,游戏过程中与皇帝一伙):作为皇上的玩家从自己的牌中选择一张拥有相同三张(点数和花色都相同)的一张牌(不能是2、3、大小王),其他四个玩家中有这张牌的就是侍卫。例如,皇上有三个红桃5,其他四个玩家中有红桃5的玩家就是侍卫。特殊情况是:1)皇上有一套四张牌相同的点数的牌,皇帝可以自己做侍卫;2)皇帝没有满足要求的牌,无法获得侍卫。程序要求:程序启动后生成5个玩家,并自动给他们发牌。然后输出:1)皇帝和侍卫的名字及其手里的牌(每张牌输出为“花色”+“点数”,如红桃5,牌之间用“,”分割),并按照大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3的顺序排列,相同点数但不同花色的牌要把相同花色的牌放在一起;2)那张作为侍卫所特有的牌(“花色”+“点数”)。如果无法得到侍卫,则程序输出相应的提示。例如,程序运行后输出如下的结果:
皇帝是:玩家1
皇帝的牌是:[皇上, 小王, 小王, 小王, 小王, 方片2, 黑桃2, 黑桃A, 黑桃A, 红桃A, 方片K, 梅花K, 黑桃K, 红桃K, 梅花Q, 梅花Q, 黑桃Q, 方片J, 方片J, 方片J, 红桃J, 梅花9, 黑桃9, 黑桃9, 方片8, 梅花8, 红桃8, 梅花7, 黑桃7, 黑桃7, 红桃7, 梅花6, 梅花6, 黑桃6, 黑桃6, 方片5, 梅花5, 黑桃5, 黑桃5, 梅花4, 梅花4, 梅花4, 方片3, 红桃3]
侍卫对应的牌是:方片J
侍卫是:玩家2
侍卫的牌是:[方片2, 黑桃2, 红桃2, 方片A, 方片K, 梅花K, 梅花K, 黑桃K, 红桃K, 红桃K, 黑桃Q, 红桃Q, 方片J, 方片10, 黑桃10, 红桃10, 红桃10, 红桃10, 方片9, 红桃9, 方片8, 梅花8, 梅花8, 黑桃8, 黑桃8, 黑桃8, 红桃8, 红桃8, 方片7, 黑桃7, 黑桃7, 方片6, 黑桃6, 黑桃5, 梅花4, 黑桃4, 红桃4, 红桃4, 方片3, 梅花3, 黑桃3, 红桃3, 红桃3]
poker类:
public class poker {
private int type;
private int number;
public poker(int a, int b) {
type = a;
number = b;
}
public int getType() {
return type;
}
public int getNumber() {
return number;
}
public String getPoker(int type, int number) {
String s1 = null, s2 = null;
switch (number) {
case 11:
s2 = "J";
break;
case 12:
s2 = "Q";
break;
case 13:
s2 = "K";
break;
case 14:
s2 = "A";
break;
case 15:
s2 = "2";
break;
default:
s2 = number + "";
}
switch (type) {
case 1:
s1 = "红桃";
break;
case 2:
s1 = "黑桃";
break;
case 3:
s1 = "梅花";
break;
case 4:
s1 = "方块";
break;
case 5:
s1 = "小王";
s2 = "";
break;
case 6:
s1 = "大王";
s2 = "";
break;
case 7:
s1 = "皇帝";
s2 = "";
break;
}
return s1 + s2;
}
public String toString() {
return getPoker(type, number);
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + number;
result = prime * result + type;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
poker other = (poker) obj;
if (number != other.number)
return false;
if (type != other.type)
return false;
return true;
}
}
玩家:
import java.util.*;
public class player {
public List<poker> myPoker = new LinkedList<poker>();
public int[][] cnt = new int[5][16];
public player() {
for (int i = 1; i < 5; i++) {
for (int j = 3; j < 16; j++) {
cnt[i][j] = 0;
}
}
}
public void show() {
System.out.print("[" + myPoker.get(0));
for (int i = 1; i < myPoker.size(); i++) {
System.out.print("," + myPoker.get(i));
}
System.out.println("]");
}
}
import java.util.*;
public class Test {
List<poker> pokers = new LinkedList<poker>();
List<player> players = new LinkedList<player>();
public Test() {
for (int i = 1; i <= 4; i++) {
for (int j = 3; j <= 15; j++) {
for (int k = 1; k <= 4; k++) {
pokers.add(new poker(i, j));
}
}
}
for (int i = 0; i < 4; i++) {
pokers.add(new poker(5, 16));
}
for (int i = 0; i < 3; i++) {
pokers.add(new poker(6, 17));
}
pokers.add(new poker(7, 18));
for (int i = 0; i < 5; i++) {
players.add(new player());
}
}
public void deal(int n) {
int x = n % 5;
player temp = players.get(x);
poker t = pokers.get(n);
if (t.getType() <= 4 && t.getNumber() <= 15) {
temp.cnt[t.getType()][t.getNumber()]++;
}
temp.myPoker.add(t);
Collections.sort(temp.myPoker, new pokerCompare());
}
public void begin() {
Collections.shuffle(pokers);
for (int i = 0; i < pokers.size(); i++) {
deal(i);
}
}
public void print() {
player temp = null;
for (int i = 0; i < 5; i++) {
temp = players.get(i);
if (("皇帝").equals(temp.myPoker.get(0).toString())) {
System.out.println("皇帝是:玩家" + (i + 1));
System.out.print("皇帝的牌是:");
temp.show();
break;
}
}
boolean hasbodyguard = false;
for (int i = 1; i <= 4; i++) {
for (int j = 3; j <= 15; j++) {
if (temp.cnt[i][j] >= 3) {
hasbodyguard = true;
for (int k = 0; k < 5; k++) {
if (players.get(k).cnt[i][j] == 1) {
System.out.println("侍卫对应的牌是:" + new poker(i, j).toString());
System.out.println("侍卫是:玩家" + (k + 1));
System.out.print("侍卫的牌是:");
players.get(k).show();
break;
}
}
}
if (hasbodyguard)
break;
}
}
if (!hasbodyguard) {
System.out.println("没有侍卫");
}
}
public static void main(String[] args) {
Test baohuang = new Test();
baohuang.begin();
baohuang.print();
}
}
class pokerCompare implements Comparator<poker> {
public int compare(poker o1, poker o2) {
if (o1.getNumber() < o2.getNumber())
return 1;
else if (o1.getNumber() > o2.getNumber())
return -1;
if (o1.getType() < o2.getType())
return 1;
else if (o1.getType() > o2.getType())
return -1;
return 0;
}
}