利用Collections工具类的排序操作可以写个斗地主游戏。当然这个简易版斗地主只是实现了洗牌、发牌功能。
public class ShowHand {
// 支持玩家数
private final int PLAY_NUM = 3;
private String[] types = { "方块", "草花", "红心", "黑桃" };
private String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K", "A" };
// 每局游戏中桌上剩下的牌,其数量不确定,且增删频繁,用LinkedList存储
private List<String> cards = new LinkedList<String>();
private String[] players = new String[PLAY_NUM];
// 玩家手中的牌
private List<String>[] playersCards = new List[PLAY_NUM];
/**
* 初始化扑克牌,放入52张扑克牌 并且洗牌(随机排序)
*/
public void initCards() {
for (int i = 0; i < types.length; i++) {
for (int j = 0; j < values.length; j++) {
cards.add(types[i] + values[j]);
}
}
Collections.shuffle(cards);
}
/**
* 初始化玩家,分配姓名
*/
public void initPlayers(String... names) {
if (names.length > PLAY_NUM || names.length < 2) {
System.out.println("玩家数不对");
return;
} else {
for (int i = 0; i < names.length; i++) {
players[i] = names[i];
}
}
}
/**
* 初始化玩家手中扑克牌:每个玩家开始时手中扑克牌数量为null 程序使用长度为0的LinkedList表示
*/
public void initPlayerCards() {
for (int i = 0; i < players.length; i++) {
if (players[i] != null && !players[i].equals("")) {
playersCards[i] = new LinkedList<String>();
}
}
}
/**
* 用于测试,输出全部桌上未派出扑克牌
*/
public void showAllCards() {
for (String card : cards) {
System.out.println(card);
}
}
/**
* 派扑克牌
*
* @param first
* 最先派给谁
*/
public void deliverCard(String first) {
// first元素在数组中的下标
int firstPos = ArrayUtils.indexOf(players, first) - 1;
for (int i = firstPos; i < PLAY_NUM; i++) {
if (players[i] != null) {
playersCards[i].add(cards.get(0));
cards.remove(0);
}
}
for (int i = 0; i < firstPos; i++) {
if (players[i] != null) {
playersCards[i].add(cards.get(0));
cards.remove(0);
}
}
}
/**
* 输出玩家手上的扑克牌
*/
public void showPlayerCards() {
for (int i = 0; i < PLAY_NUM; i++) {
if (players[i] != null) {
System.out.println(players[i] + ":");
for (String card : playersCards[i]) {
System.out.print(card + "\t");
}
}
System.out.println();
}
}
public static void main(String[] args) {
ShowHand sh = new ShowHand();
sh.initPlayers("小白", "小黄", "小黑");
sh.initCards();
sh.initPlayerCards();
sh.showAllCards();
System.out.println("----------");
sh.deliverCard("小黄");
sh.showPlayerCards();
sh.deliverCard("小黑");
sh.showPlayerCards();
}
}
京公网安备 11010502036488号