栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现扑克牌程序(数据结构)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现扑克牌程序(数据结构)

思路:

在实现之前,先要想好步骤,思路清晰才不会出错。
要实现一副扑克牌,首先要创建这个类,然后有一副扑克牌,之后进行洗牌,抓牌。
1.定义一个Card类
2.实现这个游戏:
①构造一副扑克牌(52张)这里不包含大小王
②洗牌
③三个人每个人抓五张牌


代码实现及其细节: 1.定义一个Card类

一张牌中包括两个属性:花色和牌面值

public class MyCard {
    public char suit;   //花色
    public String rank; //牌面值

    public MyCard(String rank, char suit) {
        this.suit = suit;
        this.rank = rank;
    }
    public String toString(){
        return String.format("[%s %c]",rank,suit);
    }
}
2.实现这个游戏

写一个CardGame来实现这个扑克牌游戏,其中分为很多细小的分支。
1.买一副牌
前面写了Card来表示一张牌,这里我们买一副牌,就是52个Card放在一起,就组成一个List,所以这里一副牌的类型为List

public List buyDeck(){
        //首先将花色和牌面值陈列出来
        //因为牌面值有A,J,Q,K,这里采用的是字符串数组
        //也可以将A,J,Q,K单独处理,剩下的写作一个整型数组
        char[] suits={'♦','♥','♠','♣'};
        String[] ranks={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        //创建52张牌
        List deck=new ArrayList<>(52);
        for(int i=0;i<4;i++){
            for(int j=0;j<13;j++){
                deck.add(new MyCard(ranks[j],suits[i]));
            }
        }
        return deck;
    }

2.洗牌:
使用随机数

    //写一个交换函数方便洗牌方法实现
    public void swap(List deck,int i,int j){
        MyCard temp=deck.get(i);
        deck.set(i,deck.get(j));
        deck.set(j,temp);
    }

    public void shuffle(List deck){
        //设置随机数
        Random r=new Random();//实例化一个Random类
        for(int j=deck.size()-1;j>0;j--){
            int i=r.nextInt(j);   //随机产生一个大于等于0小于51的整数
            swap(deck,i,j);       //将生成的0-51的随机数与与最后一个数交换实现洗牌
        }
    }

3.主函数:
在这里实现发牌,每人五张牌,三个人轮流抓,将三个人放在一个List当中,三个人中的牌信息为List,所以hands的类型为List>.

    public static void main(String[] args){
        CardGame cg=new CardGame();
        List deck=cg.buyDeck();
        System.out.println("刚买回来的牌:");
        System.out.println(deck);
        cg.shuffle(deck);
        System.out.println("洗完的牌:");
        System.out.println(deck);
        //三人轮流抓牌,一人抓五张
        //将三个玩家放到一个List当中
        List> hands=new ArrayList<>(3);
        //三个人手中每个人五张牌
        hands.add(new ArrayList<>(5));
        hands.add(new ArrayList<>(5));
        hands.add(new ArrayList<>(5));
        //ABC三个人抓牌
        for(int i=0;i<5;i++){
            for(int j=0;j<3;j++){
                //从deck里面抓走的
                //抓的时候把最顶上的抓走
                hands.get(j).add(deck.remove(0));;
            }
        }
        System.out.println("剩下的牌:");
        System.out.println("A手中的牌:");
        System.out.println(hands.get(0));
        System.out.println("B手中的牌:");
        System.out.println(hands.get(1));
        System.out.println("C手中的牌:");
        System.out.println(hands.get(2));
    }

输出结果:

后面的没显示全


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号