规则:
1.从3名玩家中随机选一名地主(20张牌=17张+3张底牌)
2.剩余2名玩家为农民(17张牌)
代码:
/**
* 斗地主自动发牌器(54张牌)
*/
public class AutoDeal {
/* 点数 */
private static final JSONObject CARD_COUNT = JSONObject.parseObject("{\"1\":\"A\",\"11\":\"J\",\"12\":\"Q\",\"13\":\"K\",\"14\":\"小王\",\"15\":\"大王\"}", Feature.OrderedField);
/* 花色 */
private static final JSONObject CARD_COLOR = JSONObject.parseObject("{\"0\": \"方片\",\"1\": \"梅花\",\"2\": \"红桃\",\"3\": \"黑桃\"}", Feature.OrderedField);
/* 玩家人数 */
private static final int PLAYER_COUNT = 3;
public static void showPlayerCard( Map<String,String> player, Map<String,Object> playerCard ) {
for (int i = 1; i <= PLAYER_COUNT; i++) {
List<String> playerCardList = (List<String>) playerCard.get(i+"");
System.out.println("玩家"+i+"("+player.get(i+"")+")已拥有"+playerCardList.size()+"张牌:"+playerCardList);
}
}
public static void main(String[] args) {
List<String> cardList = new ArrayList<String>();
Map<String,Object> playerCard = new HashMap<String,Object>();
Map<String,String> player = new HashMap<String,String>();
System.out.println("抢地主");
Random random = new Random();
int landowner = random.nextInt(PLAYER_COUNT)+1;//随机数:1-3
for (int i = 1; i <= PLAYER_COUNT; i++) {
List<String> playerCardList = new ArrayList<String>();
playerCard.put(i+"", playerCardList);
if( i == landowner ) {
player.put(i+"", "地主");
} else {
player.put(i+"", "农民");
}
System.out.println("玩家"+i+":"+player.get(i+""));
}
int playerIndex = 0;
while( cardList.size() <= 54 ) {
int count = random.nextInt(15)+1;//随机数:1-15
int color = random.nextInt(4);//随机数:0-3
//生成牌
String card = count >= 14 ?
CARD_COUNT.getString(count+"") :
( CARD_COLOR.getString(color+"") + (1<count&&count<=10 ? count+"" : CARD_COUNT.getString(count+"")) );
if( !cardList.contains(card) ) {
cardList.add(card);
if( cardList.size() <= 51 ) {
List<String> playerCardList = (List<String>) playerCard.get((playerIndex+1)+"");
playerCardList.add(card);
playerCard.put((playerIndex+1)+"", playerCardList);
playerIndex = (playerIndex+1)%PLAYER_COUNT;
System.out.println("\n当前发牌:"+card);
System.out.println("当前已发牌数:"+cardList.size()+",当前已发牌:"+cardList);
} else if( cardList.size() > 51 ) {//3张底牌
System.out.println("\n底牌:"+card);
List<String> landownerCardList = (List<String>) playerCard.get(landowner+"");
landownerCardList.add(card);
playerCard.put(landowner+"", landownerCardList);
}
showPlayerCard(player, playerCard);
}
if( cardList.size() == 54 ) {
break;
}
}
}
}
测试结果: