本次想要创建的是模拟扑克牌(无大小鬼)
运用ArrayList实现,作为认识并使用的一个例子
首先对于一张牌,有花色和牌号
所以要先创建一个类来存储这两样东西
public class Card {
//卡牌的格式
public String suit;
public int rank;
@Override
public String toString() {
return "{"+"suit=" + suit +
", rank=" + rank + "}";
}
}
规定好了一张牌的类型后,我们就来创建出一副牌
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class CardDemo {
//设计卡牌的花色
public static String[] suits = {"♥","♠","♦","♣"};
//创建牌
public static List<Card> Cards(){
//共四种花色,每种花色13张牌,先免去大小鬼
ArrayList<Card> ret = new ArrayList<>();//创建一个list来存储牌
for(int i = 0; i < 4; i++){//四种花色
for(int j = 1; j <= 13; j++) {//每一种花色有13张牌
Card card = new Card();//创建一张新牌
card.suit = suits[i];//牌的花色赋值
card.rank = j;//牌的牌号赋值
ret.add(card);//将牌添加到牌堆中
}
}
return ret;//返回创建好的一副牌
}
}
看一下部分效果
既然是扑克牌,在使用之前我们通常要将其打乱。我们也可以实现这一个功能
洗牌
//洗牌
public static void swap(List<Card> list,int i, int r){
Card tmp = list.get(i);
list.set(i,list.get(r));//将r下标的元素放置到下标i
list.set(r,tmp);
}
public static void shuffle(List<Card> list){
//打乱列表中的元素
//从数组后面开始0~n,因为从前面开始的话,随机数前面还要给一一个限定值,n~size()
Random random = new Random();
for(int i = list.size()-1; i > 0; i--){
int r = random.nextInt(i);//得到0~i-1的随机数
swap(list,i,r);
}
}
下面我们实现的是,三个人轮流抽牌五回合
//三个人轮流抽牌五个回合
public static List<List<Card>> pick(List<Card> Cards){
List<List<Card>> ret = new ArrayList<>();
//创建三list,相当于三个人的手牌
for(int i = 0; i < 3; i++){
ret.add(new ArrayList<>());
}
for(int i = 0; i < 5; i++){
for(int j = 0; j < 3; j++){//0~2三个人,每个人每次抽一张,共抽五次
ret.get(j).add(Cards.remove(0));//ret.get(j)等价于list[j]
}
}
return ret;
}