package com.dragon.java.hwddz;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*1. 寫一個可以給斗地主三家隨機發牌的程序。
a:牌可以隨機發給三個玩家
b:在控制台打印每個玩家的牌。
c:對每個玩家手中的牌按照大寫排序。
```
牌的花色:"♠", "♥", "♣", "♦"
*思路:創建一個容器存儲所有的牌,再創建三個容器分別表示三個用戶的牌,三個用戶輪流從第一個容器中取牌,
*剩下三張為底牌。把大王和小王也算進去**/
public class Test {
public static void main(String args[]) {
Map<Integer, String> mapPoker = new HashMap<>();
List<Integer> listIndex = new ArrayList<>();
Poker.setPoker(mapPoker, listIndex);
Poker.washPoker(listIndex);
// 定義用戶
Player[] players = new Player[3];
players[0] = new Player("躺之徳");
players[1] = new Player("小剪");
players[2] = new Player("呆立叫");
// 用戶容器
List<Integer> tzd = new ArrayList<>();
List<Integer> xj = new ArrayList<>();
List<Integer> dlj = new ArrayList<>();
List<Integer> dp = new ArrayList<>();
Player.getPoker(tzd, xj, dlj, dp, listIndex);
// int index = Player.getMaxNumber(players);
// System.out.println(players[index].getName() + "搶到了地主!");
players[0].showPoker(tzd, mapPoker);
players[1].showPoker(xj, mapPoker);
players[2].showPoker(dlj, mapPoker);
// players[index].showDp(dp, mapPoker);
System.out.println("\n" + "底牌:");
for (Integer integer : dp) {
System.out.print(mapPoker.get(integer) + " ");
}
}
}
--> Poker類用於存入54張撲克牌
package com.dragon.java.hwddz;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class Poker {
private static String[] pokerColor = { "♠", "♥", "♣", "♦" };
private static String[] pokerNum = { "3", "4", "5", "6", "7", "8", "9",
"10", "J", "Q", "K", "A", "2" };
// 存入54張不同的牌,並給每張牌一個標號
public static void setPoker(Map<Integer, String> mapPoker,
List<Integer> listIndex) {
int index = 0;
for (String nums : pokerNum) {
for (String colors : pokerColor) {
String poker = colors.concat(nums);
mapPoker.put(index, poker);
listIndex.add(index);
index++;
}
}
mapPoker.put(index, "大☝王");
listIndex.add(index);
index++;
mapPoker.put(index, "小☟王");
listIndex.add(index);
}
// 洗牌 --> 即洗標號
public static void washPoker(List<Integer> listIndex) {
Collections.shuffle(listIndex);
}
}
--> Player類對玩家進行發牌和顯示處理(寫完我就後悔了,J,Q,K,A,2的排序太low了..package com.dragon.java.hwddz;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class Player {
private String name;
Player() {
super();
}
Player(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 發牌流程
public static void getPoker(List<Integer> player1, List<Integer> player2,
List<Integer> player3, List<Integer> dp, List<Integer> list) {
for (int i = 0; i < list.size(); i++) {
if (i >= list.size() - 3) {
dp.add(list.get(i));
} else if (i % 3 == 1) {
player1.add(list.get(i));
} else if (i % 3 == 2) {
player2.add(list.get(i));
} else if (i % 3 == 0) {
player3.add(list.get(i));
}
}
}
// 顯示牌面
public void showPoker(List<Integer> list, Map<Integer, String> mapPoker) {
System.out.println("\n" + name + "的手牌是:");
List<String> listPoker = new ArrayList<>();
for (Integer key : list) {
listPoker.add(mapPoker.get(key));
}
Collections.sort(listPoker, new MyComparator());
for (String string : listPoker) {
System.out.print(string + " ");
}
}
// public void showDp(List<Integer> dp, Map<Integer, String> mapPoker) {
// List<String> listPoker = new ArrayList<>();
// for (Integer key : dp) {
// listPoker.add(mapPoker.get(key));
// }
// Collections.sort(listPoker, new MyComparator());
// for (String string : listPoker) {
// System.out.print(string + " ");
// }
// }
public int throwsElbows() {
Random random = new Random();
int num = random.nextInt(6) + 1;
System.out.println(name + "搖了" + num + "點");
return num;
}
// 請忽略下面注釋...
// public static int getMaxNumber(Player[] players) {
// List<Integer> numbers = new ArrayList<>();
// for (int i = 0; i < players.length; i++) {
// numbers.add(players[i].throwsElbows());
// }
// Collections.sort(numbers);
// for (int i = 0; i < numbers.size() - 1; i++) {
// if (numbers.get(numbers.size() - 1) == numbers.get(i)) {
// System.out.println(players[numbers.size() - 1].name + "和"
// + players[i].name + "搖的點數相同");
// System.out.println("他們打了一架! --> " + players[i].name + "贏了!");
// return i;
// }
// }
// return numbers.size() - 1;
// }
// 牌面的比較排序 --> 看得就煩...
public static class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
String m1 = o1.substring(1, 2);
String m2 = o2.substring(1, 2);
if (m1.equals("1")) {
m1 = "a";
} else if (m1.equals("J")) {
m1 = "b";
} else if (m1.equals("Q")) {
m1 = "c";
} else if (m1.equals("K")) {
m1 = "d";
} else if (m1.equals("A")) {
m1 = "e";
} else if (m1.equals("2")) {
m1 = "f";
}
if (m2.equals("1")) {
m2 = "a";
} else if (m2.equals("J")) {
m2 = "b";
} else if (m2.equals("Q")) {
m2 = "c";
} else if (m2.equals("K")) {
m2 = "d";
} else if (m2.equals("A")) {
m2 = "e";
} else if (m2.equals("2")) {
m2 = "f";
}
return m1.compareTo(m2);
}
}
}
--> 寫完發現邏輯是不是有問題啊...