1. 程式人生 > 其它 >發牌器

發牌器

技術標籤:每日作業遊戲javarandom

在這裡插入圖片描述

設計一個隨機發牌器,該發牌器每次發牌十三張,程式執行後顯示所得牌組的資訊,包括紙牌的大小花色

個人思路(不對的地方歡迎來錘):
建立一個撲克類,其含有屬性變數大小 和 花色
將生成的撲克放進一個集合容器
生成隨機數,隨機在容器裡取出
例項程式碼:

public class Task114 {
	public static void main(String[] args) {
		System.out.println("老九學堂組織打撲克,小新、靜香、大雄、胖達參與了本次活動");
		//建立玩家列表
		String player[
] = {"小新", "靜香", "大雄", "胖達"}; //先生成一副牌(本程式也可以生成多幅撲克牌,和選擇的不同遊戲人數) List<Poker> list1 = pokerProd(1); List<List<Poker>> listplayer = deal(list1, 4); for (int i = 0; i < 4; i++) { System.out.println(player[i] + "得手牌:" + listplayer.
get(i)); } } //發牌器,根據人數發牌 public static List<List<Poker>> deal(List<Poker> pokerList, int num) { List<List<Poker>> listPlayer = new ArrayList<>(); List<Integer> randomList = new ArrayList<>(); //存放隨機數 Random random = new Random(); int rand =
0; //先生成一個撲克牌數量的隨機數列表 for(int i = 0;i < pokerList.size();i++){ rand = random.nextInt(pokerList.size()); if(randomList.contains(rand)){//如果列表中已存在,重新在這一次迴圈新增隨機數 i--; continue; } randomList.add(rand); } //生成了num個玩家的撲克牌列表 for(int i = 0; i < num; i++) { listPlayer.add(new ArrayList<Poker>()); } //發牌問題,涉及到是否可以整除 if(pokerList.size() % num == 0) { //如果可以整除,num個人均勻分牌 int temp = pokerList.size() / num; for(int j = 0; j < num; j++) { for(int i = 0 + temp * j; i < temp + temp * j; i++) { //玩家列表裡面的第j個玩家新增撲克牌,撲克牌根據隨機列表中的隨機數在撲克牌列表中隨機取出 listPlayer.get(j).add(pokerList.get(randomList.get(i))); } } } else { //如果不能整除,說明牌不能均分 int temp1 = pokerList.size() % num; //存放多餘的牌的數量 int temp2 = pokerList.size() / num; //先每人分得這些牌,後面的牌一張一張勻開,勻完為止 for(int j = 0; j < num; j++) { for(int i = 0 + temp2 * j; i < temp2 + temp2 * j; i++) { //從後往前摸牌,這是一個一個非常牛逼的技能,在三國殺中 listPlayer.get(j).add(pokerList.get(randomList.get(i))); } } //勻剩餘的牌,剩餘的牌肯定不會大於玩家數量 for(int i = 0; i < temp1; i++) { listPlayer.get(i).add(pokerList.get(randomList.get(pokerList.size() - 1 - i))); } } return listPlayer; } //撲克生成 public static List<Poker> pokerProd(int n){ //建立一個撲克容器 List<Poker> pokerList = new ArrayList<Poker>(); //幾副牌就製造幾次 for (int j = 0; j < n; j++) { // 此處不考慮大小王了,根據傳入引數判斷幾副牌 for (int i = 0; i < 13; i++) { pokerList.add(new Poker("♥", (i + 1) + "")); pokerList.add(new Poker("♦", (i + 1) + "")); pokerList.add(new Poker("♠", (i + 1) + "")); pokerList.add(new Poker("♣", (i + 1) + "")); } } return pokerList; } } class Poker { private String num; //數字1-k private String color; //花色,紅桃,黑桃,方片,梅花 public Poker() { // TODO 自動生成的建構函式存根 } //撲克是通過構造方法建造的,所以對其修改要在構造方法中 public Poker(String color, String num) { if(num.equals("11")) { this.num = "J"; }else if(num.equals("12")) { this.num = "Q"; }else if(num.equals("13")) { this.num = "K"; }else { this.num = num; } this.color = color; } public String getNum() { return num; } public String getColor() { return color; } public void setNum(String num) { this.num = num; } public void setColor(String color) { this.color = color; } @Override public String toString() { return color + num; } }