public class Card {
public String suit;
public int rank;
public Card(String suit, int rank) {
this.suit = suit;
this.rank = rank;
}
@Override
public String toString() {
return "{" + suit + rank + '}';
}
}
再定义一个Game类来给扑克牌赋值、制作扑克牌、洗牌、发牌等操作。
用一个数组来存放花色:
java复制代码
public static final String[] SUITS = {"♥","♠","♣","♦"};
有了扑克牌花色之后,可以再利用循环给扑克牌添加数字:
java复制代码
//制造扑克牌
public List<Card> createCards(){
List<Card> cardList = new ArrayList<>();
for(int i = 0; i < SUITS.length; i++){
for(int j = 1; j <= 13; j++ ){
Card card = new Card(SUITS[i],j);
cardList.add(card);
}
}
Card card1 = new Card("Great King",1);
Card card2 = new Card("Little King",1);
cardList.add(card1);
cardList.add(card2);
return cardList;
}
//洗牌
public void shuffle(List<Card> cardList){
Random random = new Random();
for(int i = cardList.size() - 1; i > 0; i--){
int randIndex = random.nextInt(i);//产生0~ i-1 的随机数
swap(cardList,i,randIndex);
}
}
private void swap(List<Card> cardList, int i, int j){//交换两牌位置
Card tmp = cardList.get(i);
cardList.set(i,cardList.get(j));//把牌j放到牌i的位置
cardList.set(j,tmp);//把牌i(tmp)放到牌j的位置
}
扑克牌洗好之后,我们就可以玩牌了,我们制定一个简单规则,三个人玩牌,轮流抽一张牌,各抽5张:
java复制代码
public List<List<Card>> play(List<Card> cardList){
List<List<Card>> hand = new ArrayList<>();
List<Card> hand0 = new ArrayList<>();
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
hand.add(hand0);
hand.add(hand1);
hand.add(hand2);
for(int i = 0; i < 5; i++){//每人各抽5张
for(int j = 0; j < 3; j++){//3人轮流抽牌
Card card = cardList.remove(0);//将抽到的牌取出
hand.get(j).add(card);//谁抽的放谁手中
}
}
return hand;
}
我们再写一个Test类来测试以上代码,看看运行效果:
java复制代码
import java.util.List;
public class Test {
public static void main(String[] args) {
Game game = new Game();
List<Card> cardList = game.createCards();
System.out.println("初始牌:" + cardList);
game.shuffle(cardList);//洗牌
System.out.println("洗过的牌:"+cardList);
List<List<Card>> hand = game.play(cardList);
for(int i = 0; i < hand.size();i++){
System.out.println("第"+(i + 1)+"个人的牌是:"+hand.get(i));
}
System.out.println("剩下的牌:"+cardList);
}
}