小小扑克牌算法

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

相关推荐
码熔burning2 分钟前
JVM 对象创建的核心流程!
java·jvm
努力努力再努力wz6 分钟前
【C++进阶系列】:万字详解红黑树(附模拟实现的源码)
java·linux·运维·c语言·开发语言·c++
毕设源码纪师姐6 分钟前
计算机毕设 java 高校机房综合管控系统 基于 SSM+Vue 的高校机房管理平台 Java+MySQL 的设备与预约全流程系统
java·mysql·课程设计
宁檬精12 分钟前
算法练习——55.跳跃游戏
数据结构·算法·游戏
王璐WL13 分钟前
【C语言入门级教学】内存函数
c语言·开发语言·算法
啃啃大瓜14 分钟前
python常量变量运算符
开发语言·python·算法
渣哥20 分钟前
HashMap 扩容为啥总是 2 的倍数?一场来自底层的“强迫症”探险
java
熊文豪22 分钟前
【华为OD】找出通过车辆最多颜色
算法·华为od
Running_slave26 分钟前
位运算左移右移应该怎么玩?
前端·javascript·算法
塔中妖27 分钟前
【华为OD】环中最长子串2
算法·华为od