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;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值