1. 程式人生 > >Java 實驗 容器題目 保皇遊戲

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;
	}
}