目录
1.基本框架的实现
1.首先要生成一副有顺序的新牌,通过实现方法来有序的生成
2.每张牌都是有数字和花色组成。
3.通过实现方法去将牌的顺序打乱,
4.定义三个牌栏表示每个人抽取的牌
2.Card类中是包含每一张牌的信息
public class Card {
public int number;//数字
public String suit;//花色
public Card(int number, String suit) {
this.number = number;//数字
this.suit = suit;
}
@Override
public String toString() {
return "{"+suit+" "+number+"}";
}
}
3.Cards类包含了各种方法
public class Cards {
//定义一个数字储存每一种花色,以便以后生成牌时所需
public static final String[] suits = {"♠","♥","♣","♦"};
//生成牌的方法,这里只生成52张牌,不包含大小王
public List<Card> BuyCard(){
List<Card> list = new ArrayList<>();//用来储存生产的牌
for (int i = 0; i < 4; i++) {
for (int j = 1; j <13 ; j++) {
String suit = suits[i];
Card card = new Card(j,suit);//每次生成的一张牌
list.add(card);//将牌添加
}
}
return list;
}
交换下标不同的两张牌,以便后来打乱牌的顺序
public void swap(List<Card> list,int i,int j){
Card temp = list.get(j);
list.set(j,list.get(i));//这里使用的时List自带的方法get();
list.set(i,temp);
}
public void shuff(List<Card> list){
Random random = new Random();
for (int i =list.size()-1;i>0; i--) {
int index = random.nextInt(i);//生成范围为i~0之间的随机数,作为牌的下标,
//将下表为i和index的牌交换
swap(list,i,index);
}
}
public void Deaw(List<Card> cardList) {
//生成三个空的顺序表,用来储存每个抓到的牌
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
//hands表示一个二维的顺序表,每个元素又是一个顺序表,它的成员为三个顺序表
List<List<Card>> hands = new ArrayList<>();
hands.add(hand1);
hands.add(hand2);
hands.add(hand3);
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
//每次抓取洗好的牌的第一张
Card card = cardList.remove(0);
//二位顺序表中,按序获取每个顺序表,将牌放在表中
hands.get(j).add(card);
}
}
//打印每个人的牌
System.out.println("第1个人的牌:" + hand1);
System.out.println("第2个人的牌:" + hand2);
System.out.println("第3个人的牌:" + hand3);
}
}
4.TestCard类是主要流程的实现
public class TestCard {
public static void main(String[] args) {
//生成一个Cards类,以便使用其中的方法
Cards cards = new Cards();
//生成一副有序的牌
List<Card> cardList = cards.BuyCard();
//打印生产的牌
System.out.println(cardList);
System.out.println("洗牌之前");
System.out.println(cardList);
System.out.println("洗牌之后:");
//将牌的顺序打乱
cards.shuff(cardList);
System.out.println(cardList);
//抓牌
System.out.println("抓拍");
cards.Deaw(cardList);
//打印的剩下的牌
System.out.println("剩下的牌");
System.out.println(cardList);
}
}