小小扑克牌算法

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

相关推荐
Knight_AL8 小时前
MyBatis 报错:Parameter ‘xxx‘ not found 的原因与解决方案
java·tomcat·mybatis
一条泥憨鱼8 小时前
Java网络编程:Socket通信从入门到起飞
java·开发语言·网络·网络编程
磊 子8 小时前
STL算法库讲解1
开发语言·c++·算法
8Qi88 小时前
LeetCode 474:一和零(Ones and Zeroes)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
西安邮电大学8 小时前
分布式锁三种实现
java·redis·后端·其他·面试
stolentime8 小时前
CF2066D2 Club of Young Aircraft Builders (hard version)题解
c++·算法·动态规划·组合数学
码不停蹄的玄黓8 小时前
SpringBoot 实现自定义注解
java·spring boot·spring
一个不知名程序员www8 小时前
算法学习入门---算法题DAY3
c++·算法
施棠海8 小时前
自定义并可深度定制的数字滚动选择器完整源代码与相关注意事项
java·开发语言
七夜zippoe8 小时前
DolphinDB向量化计算:高性能数据处理
算法·dolphindb