模拟扑克牌类,生成一副扑克牌,打乱顺序,发牌

来源:互联网 发布:underscore源码解析 编辑:程序博客网 时间:2024/04/29 03:57

定义一个Card类,用于存储构建扑克牌的基本元素

public class Card {


public static final int DIAMOND = 0; // 方块(钻石)
public final static int CLUB = 1; // 梅花
public static final int HEART = 2; // 红桃(红心)
public static final int SPADE = 3; // 黑桃(花锄)
public static final int JOKER = 4; // 王


final public static int THREE = 0;
public final static int FOUR = 1;
public final static int FIVE = 2;
public final static int SIX = 3;
public final static int SEVEN = 4;
public final static int EIGHT = 5;
public final static int NINE = 6;
public final static int TEN = 7;
public final static int JACK = 8;// J
public final static int QUEEN = 9;// Q
public final static int KING = 10;// K
public final static int ACE = 11;// A
public final static int DEUCE = 12; // 2
public final static int BLACK = 13; // 小王
public final static int COLOR = 14;// 大王


/** 花色, 0代表方块, 1代表梅花 */
private int suit;
/** 点数, 0代表3, 1代表4, 2代表5 ... */
private int rank;


public Card() {
}


public Card(int suit, int rank) {
setRank(rank);
setSuit(suit);
}


public int getRank() {
return rank;
}


public void setRank(int rank) {
this.rank = rank;
}


public int getSuit() {
return suit;
}


public void setSuit(int suit) {
this.suit = suit;
}


private static final String[] SUIT_NAMES = { "方块", "梅花", "红桃", "黑桃", "" };
private static final String[] RANK_NAMES = { "3", "4", "5", "6", "7", "8",
"9", "10", "J", "Q", "K", "A", "2", "小王", "大王" };


/** 覆盖Object 类的toString() */
public String toString() {
return SUIT_NAMES[this.suit] + RANK_NAMES[this.rank];
}


// public static void main(String[] args) {
// System.out.println(new Card(0, 0).toString());
// }
}


定义玩家类Player



import java.util.Arrays;


public class Player {
private String name;
Card[] cards = {};

public Player() {
super();
// TODO Auto-generated constructor stub
}

public Player(String name) {
super();
this.name = name;
}

/*
* 发牌实现方法
*/
public void add(Card card){
cards = Arrays.copyOf(cards, cards.length+1);
cards[cards.length-1] = card;
}
@Override
public String toString(){

return name+"->"+Arrays.toString(cards);
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}

}




构造一个测试类
import java.util.Arrays;
import java.util.Random;


public class TestCard {
public static void main(String[] args) {
//生成一副扑克牌
Card[] cards = new Card[54];
int index = 0;
for (int i = Card.THREE; i <= Card.DEUCE; i++) {//等同于  for(int i = 0; i<=12;i++)
cards[index++] = new Card(index%4,i);
cards[index++] = new Card(index%4,i);
cards[index++] = new Card(index%4,i);
cards[index++] = new Card(index%4,i);
}
cards[index++] = new Card(Card.JOKER,Card.BLACK);//小王
cards[index++] = new Card(Card.JOKER,Card.COLOR);//大王
System.out.println(Arrays.toString(cards));
/*
* 打乱次序
*/
Random scn = new Random();
for (int i = 0; i < cards.length-1; i++) {
int rNum = scn.nextInt(cards.length-1-i);
Card card = cards[rNum];
cards[rNum] = cards[cards.length-1-i];
cards[cards.length-1-i] = card;
}
System.out.println(Arrays.toString(cards));

/*
* 发牌

*定义三个玩家
*/
Player[] players ={new Player("胡歌"),
new Player("霍建华"),
new Player("王凯"),
};
for (int i = 0; i < cards.length-3; i++) {//留三张底牌
players[i%3].add(cards[i]);//给每个玩家发牌
}
System.out.println(players[0]);//输出每个玩家手中的扑克牌
System.out.println(players[1]);
System.out.println(players[2]);

}
}



1 0
原创粉丝点击