小小扑克牌算法

1.定义一个扑克牌类Card:

java 复制代码
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.初始化一副牌

java 复制代码
//初始化一副牌
    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.洗牌

java 复制代码
//洗牌
    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.交换牌

java 复制代码
//交换牌
    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.发牌

java 复制代码
//发牌
    //每个人发五张,发给三个人
    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.玩游戏

java 复制代码
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>> 的运用以及理解 ,希望大家支持!!

相关推荐
风象南23 分钟前
SpringBoot中6种自定义starter开发方法
java·spring boot·后端
mghio9 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室14 小时前
java日常开发笔记和开发问题记录
java
咖啡教室14 小时前
java练习项目记录笔记
java
鱼樱前端15 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea15 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea15 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
算AI16 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
李少兄17 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http