Java 實驗 容器題目 保皇遊戲
模擬保皇遊戲開始的發牌過程。規則: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;
}
}