1.定义一个扑克牌类Card:
package democard;
public class Card {
public String suit;//表示花色
public int rank;//表示牌点数
@Override
public String toString() {
return "{"+suit +rank+"}";
}
//实例方法,初始化牌的点数和花色
public Card(String suit, int rank){
this.suit=suit;
this.rank=rank;
}
}
2.实现游戏功能:
1.初始化一副牌
//初始化一副牌
public List<Card> buyCard(){
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);
//通过循环产生52个对象,将每一个对象的地址存放到牌堆(cardlist)当中
cardlist.add(card);
}
}
return cardlist;
}
2.洗牌
//洗牌
public void shuffleCard(List<Card> cardlist){
Random random=new Random();//调用时间戳随机生成一个数
for (int i = cardlist.size()-1; i >0; i--) {//让其与每一个位置的牌进行交换
int randindex=random.nextInt(i);
swap(cardlist,i,randindex);
}
}
3.交换牌
//交换牌
public void swap(List<Card> cardlist,int i,int j){
Card tmp=cardlist.get(i);
cardlist.set(i,cardlist.get(j));
cardlist.set(j,tmp);
}
4.发牌
//发牌
//每个人发五张,发给三个人
public List<List<Card>> play(List<Card> cardlist){
List<List<Card>> hand=new ArrayList<>();
//定义一个二维数组,存放每一个一维数组的地址
List<Card> hand1=new ArrayList<>();
List<Card> hand2=new ArrayList<>();
List<Card> hand3=new ArrayList<>();
hand.add(hand1);//将每一位玩家的牌和二维数组产生联系
hand.add(hand2);
hand.add(hand3);
for (int i = 0; i <3 ; i++) {
for (int j = 0; j < 5; j++) {
Card card=cardlist.remove(0);
//从牌堆里删除第一张牌,类似于头删
//将每删除的一张牌存到card当中,在添加给每一位玩家,实现了发牌的功能
hand.get(i).add(card);
}
}
return hand;
//将二位数组的地址返回,以后调用者可以用该地址查看牌堆剩余的牌以及各个玩家的牌
}
3.玩游戏
package democard;
import java.util.List;
public class Test {
public static void main(String[] args) {
Game game=new Game();
List<Card> cardList=game.buyCard();
System.out.println("洗牌前:"+cardList);
game.shuffleCard(cardList);
System.out.println("洗牌后:"+cardList);
List<List<Card>> hand=game.play(cardList);
for (int i = 0; i <3 ; i++) {
System.out.println("第"+(i+1)+"个人的牌是:"+hand.get(i));
}
System.out.println("剩下的牌:"+cardList);
}
}
最后实现的效果如下:
该算法是对List<List<Colletion ? extends E>> 的运用以及理解 ,希望大家支持!!