小小扑克牌算法

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

相关推荐
loveLifeLoveCoding9 分钟前
Java List sort() 排序
java·开发语言
草履虫·15 分钟前
【Java集合】LinkedList
java
AngeliaXue17 分钟前
Java集合(List篇)
java·开发语言·list·集合
世俗ˊ18 分钟前
Java中ArrayList和LinkedList的比较
java·开发语言
zhouyiddd23 分钟前
Maven Helper 插件
java·maven·intellij idea
wx2004110226 分钟前
Codeforces Round 973 (Div. 2) - D题
数据结构·c++·算法
攸攸太上31 分钟前
Docker学习
java·网络·学习·docker·容器
Milo_K39 分钟前
项目文件配置
java·开发语言
程序员大金43 分钟前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源