Room类 主入口
sort为洗牌顺序,主要是为了方便测试bug,可以重现牌局
landowner 是 0,1,2 三个玩家 谁为地主.
public class Room {
public static void main(String[] args) {
ArrayList<Player> player = new ArrayList<Player>();
player.add(new Player("P1"));
player.add(new Player("P2"));
player.add(new Player("P3"));
String sort = "48,31,41,43,28,19,32,51,20,29,27,60,17,12,33,59,38,55,61,57,10,22,39,34,42,24,53,37,21,13,58,23,44,15,45,18,16,49,40,25,26,30,63,47,36,52,11,14,46,54,62,56,50,35";
int landowner = 1;
// new Game().start(player,sort,landowner);
new Game().start(player);
}
}
Game类
负责生成54张扑克,和洗牌,分配地主.
以及 最后 打印整个牌局.
public class Game {
private LinkedHashMap<String, Poker> _unvalidPoker = new LinkedHashMap<String, Poker>();
private LinkedHashMap<String, Poker> _underPoker = new LinkedHashMap<String, Poker>();
private ArrayList<Loop> _record = new ArrayList();
public void start(ArrayList<Player> player) {
start(player,null,-1);
}
public void start(ArrayList<Player> player, String sort, int num) {
dealPoker(player,makePoker(sort));
Player landowner = makeLandowner(player,num);
Player winer = beginLoop(landowner,player);
end(winer);
System.out.println("process:");
for (Loop loop : _record) {
loop.printLog();
}
end(winer);
}
public Player beginLoop(Player landowner, ArrayList<Player> player) {
Loop loop = null;
Player user = landowner;
for (int i = 1; i < 11; i++) {
loop = new Loop(i);
user = loop.start(user,player);
_record.add(loop);
if(isFinalWiner(user)) {
break;
}
}
return user;
}
public boolean isFinalWiner(Player user) {
return user.getHandPoker().keySet().size()<=0;
}
public void end(Player player) {
System.out.println(player.getFullName()+" win!!!");
}
public ArrayList<Poker> makePoker(String sort) {
Map<String, Poker> map = new HashMap<>();
Poker poker = null;
int index = 10;
for (String s : Poker.TYPES) {
for (int i = 0; i < Poker.LABELS.length; i++) {
poker = new Poker(index++, Poker.VALUES[i], Poker.LABELS[i],s);
map.put(poker.getId(),poker);
}
}
poker = new Poker(index++).bigKing();
map.put(poker.getId(),poker);
poker = new Poker(index++).smallKing();
map.put(poker.getId(),poker);
ArrayList<Poker> idList = new ArrayList<>();
if(StringUtils.isNotBlank(sort)) {
String[] ids = StringUtils.split(sort,",");
for (String id : ids) {
if(StringUtils.isBlank(id)) {
continue;
}
idList.add(map.get(id));
}
}else {
idList.addAll(map.values());
Collections.shuffle(idList);
}
System.out.print("config: ");
for (Poker p : idList) {
System.out.print(p.getId());
System.out.print(",");
}
System.out.println();
return idList;
}
public void dealPoker(ArrayList<Player> player, ArrayList<Poker> list) {
for (int i = 0; i < list.size(); i++) {
if (i >= list.size() - 3) {
_underPoker.put(list.get(i).getId(),list.get(i));
} else {
player.get(i % 3).getPoker(list.get(i));
}
}
}
public Player makeLandowner(ArrayList<Player> player, int num) {
if(num<0) {
Random r = new Random();
num = r.nextInt(3);
}
Player landowner = player.get(num);
landowner.landowner();
Iterator<String> iterator = _underPoker.keySet().iterator();
while (iterator.hasNext()) {
landowner.getPoker(_underPoker.get(iterator.next()));
}
for (Player p1 : player) {
p1.sort();
System.out.print(p1.getName());
p1.printLabel();
}
return landowner;
}
}