思路:
1、定义扑克牌的类,定义成员变量(扑克牌的牌面值和花色),构造成语方法,重写成员方法
2、定义一个字符串数组存放四种花色
3、买牌:52张牌(每种花色13张牌)
4、洗牌:获取牌数,引用随机函数Random生成随机数rand,从最后一张牌开始换牌
5、构造换牌的方法:定义tmp来接收i下标的值,j下标的值给i,j接收tmp的值(j为随机数rand)
6、揭牌:定义一个二维数组hand,一人一个List揭牌,轮流揭牌
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class Card{
private int rank; //牌面值
private String suit; //花色
public Card(int rank,String suit){
this.rank = rank;
this.suit = suit;
}
@Override
public String toString() {
return "[ "+this.suit+" "+this.rank+" ]";
}
}
public class Test1 {
private static final String[] suits = {"♥","♠","♣","♦"}; //四种花色
public static List<Card> buyCard(){ //假设买的牌没有大小王,只有1-13
ArrayList<Card> cards = new ArrayList<>();
//52张牌,四种花色
for (int i = 0; i < 4; i++) {
for (int j = 1; j <= 13; j++) {
//String suit = suits[i];
//int rank = j;
//Card card = new Card(rank,suit);
//cards.add(card);
cards.add(new Card(j,suits[i])); //一张牌
}
}
return cards; //返回52张牌
}
private static void swap(List<Card> cards,int i,int j){ //换牌
Card tmp = cards.get(i); //获取i下标的元素
cards.set(i,cards.get(j)); //获取j下标的元素给i下标
cards.set(j,tmp); //重置j下标的值为tmp
}
public static void shuffle(List<Card> cards){ //洗牌
int size = cards.size(); // size=52
for (int i = size-1; i > 0; i--) { //从最后一张牌开始换牌
Random random = new Random(); //生成随机数
int rand = random.nextInt(i); //生成0到i-1的下标
swap(cards,i,rand);
}
}
public static void main(String[] args) {
List<Card> cards = buyCard();
System.out.println("买牌:"+cards);
shuffle(cards);
System.out.println("洗牌:"+cards);
System.out.println("揭牌:3个人每人轮流揭5张牌"); //一人一个List揭牌,轮流揭牌
//二维数组--> hand 的每个元素是个List<Card>
ArrayList<List<Card>> hand = new ArrayList<>();
List<Card> hand1 = new ArrayList<>(); //一人一个List揭牌
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
//每个人轮流揭牌
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
Card card = cards.remove(0); //揭到一张牌,说明移除了一张牌,第二张牌就变为了0下标
//每次揭牌,揭的都是数组0下标的牌
hand.get(j).add(card); //第j个人揭牌
}
}
System.out.println("第一个人的牌为:"+hand1);
System.out.println("第二个人的牌为:"+hand2);
System.out.println("第三个人的牌为:"+hand3);
System.out.println("剩下的牌为:"+cards);
}
}