文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java-扑克牌的创建以及发放

2023-09-03 18:19

关注

Java-扑克牌的创建以及发放

大家好,我是晓星航。今天为大家带来的是 Java-扑克牌的创建以及发放的讲解!😀

题目:创建一个扑克牌(不需要包含大小王),分别分发给3个人,一个人发5张牌,输出结果要求包含全套牌(52张牌),以及3个人各自的牌的花色以及数字。

1.扑克牌的源代码

import java.util.ArrayList;import java.util.List;import java.util.Random;class Card {    private int rank;//数字    private String suit;//花色    public Card(int rank, String suit) {        this.rank = rank;        this.suit = suit;    }    @Override    public String toString() {        return "[ 花色:"+this.suit+" "+this.rank+" ]";    }}//没有大小王:1,2,3,4,5,6,7,8,9,10,11,12,13public class TestDemo {    private static final String[] suits = {"♥","♠","♣","♦"};    public static List<Card> buyCard() {        ArrayList<Card> cards = new ArrayList<>();        for (int i = 0; i < 4; i++) {            for (int j = 1; j <= 13; j++) {                cards.add(new Card(j,suits[i]));            }        }        return cards;    }    private static void swap(List<Card> cards,int i,int j) {//      Card tmp = cards[i];        Card tmp = cards.get(i);//      cards[i] = cards[j];        cards.set(i,cards.get(j));//      cards[j] = tmp;        cards.set(j,tmp);    }    public static void shuffle(List<Card> cards) {        int size = cards.size();        for (int i = size-1; i > 0; i--) {            Random random = new Random();            int rand = random.nextInt(i);            swap(cards,i,rand);        }    }    //扑克牌:    public static void main(String[] args) {        List<Card> cards = buyCard();        System.out.println("买牌:"+cards);        shuffle(cards);        System.out.println("洗牌:"+cards);        System.out.println("接牌:3个人每个人轮流接5张牌");        ArrayList<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 < 5; i++) {            for (int j = 0; j < 3; j++) {                Card card = cards.remove(0);                hand.get(j).add(card);            }        }        System.out.println("第1个人的牌: "+hand1);        System.out.println("第2个人的牌: "+hand2);        System.out.println("第3个人的牌: "+hand3);        System.out.println("剩下的牌: "+cards);    }

2.扑克牌运行结果

3.扑克牌代码创建原理讲解

3.1创建扑克牌前的准备工作

class Card {    private int rank;//数字    private String suit;//花色    public Card(int rank, String suit) {        this.rank = rank;        this.suit = suit;    }    @Override    public String toString() {        return "[ 花色:"+this.suit+" "+this.rank+" ]";    }}

这为后续扑克牌的花色以及数字大小创建了类。

    public static void main(String[] args) {        List<Card> cards = buyCard();        System.out.println("买牌:"+cards);        shuffle(cards);        System.out.println("洗牌:"+cards);        System.out.println("接牌:3个人每个人轮流接5张牌");                System.out.println("第1个人的牌: "+hand1);        System.out.println("第2个人的牌: "+hand2);        System.out.println("第3个人的牌: "+hand3);        System.out.println("剩下的牌: "+cards);    }}

这里我们写好了我们扑克牌的基本菜单逻辑,即买牌(52张),再洗牌(打乱牌),最后将所有牌分发给玩游戏的三个人(每人五张)。

3.2 52张扑克牌的创建(除去大小王)

    public static List<Card> buyCard() {        ArrayList<Card> cards = new ArrayList<>();        for (int i = 0; i < 4; i++) {            for (int j = 1; j <= 13; j++) {                cards.add(new Card(j,suits[i]));            }        }        return cards;    }

这里我们定义了buyCard方法来创建我们的52张牌,cards是我们存放卡牌的位置(包含数字以及花色),通过双循环来创建我们梅花♣、方片♦、红桃♥和黑桃♠这四种牌。

3.3洗牌

    private static void swap(List<Card> cards,int i,int j) {//      Card tmp = cards[i];        Card tmp = cards.get(i);//      cards[i] = cards[j];        cards.set(i,cards.get(j));//      cards[j] = tmp;        cards.set(j,tmp);    }    public static void shuffle(List<Card> cards) {        int size = cards.size();        for (int i = size-1; i > 0; i--) {            Random random = new Random();            int rand = random.nextInt(i);            swap(cards,i,rand);        }    }

在写我们的shuffle洗牌方法前我们写了swap交换方法,其中swap使用的是空瓶交换原理通过List中get方法来交换数值以及相对应的花色。

而shuffle方法我们则用了size来代表我们卡牌的数量,通过random随机方法来生成随机数传给我们swap交换方法当作形参从而完成我们扑克牌的洗牌。

3.4发牌

System.out.println("接牌:3个人每个人轮流接5张牌");ArrayList<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 < 5; i++) {    for (int j = 0; j < 3; j++) {        Card card = cards.remove(0);        hand.get(j).add(card);    }}System.out.println("第1个人的牌: "+hand1);System.out.println("第2个人的牌: "+hand2);System.out.println("第3个人的牌: "+hand3);System.out.println("剩下的牌: "+cards);

在创建好牌和洗完牌之后当然就是我们的发牌了,我们发牌采取了创建hand的动态数组来储存我们的牌,然后我们创建了hand1、hand2以及hand3的三个动态数组来分别表示我们的三个人,通过两次循环达到3个人每个人轮流接5张牌的目的。

最后完成的效果图如下:

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

来源地址:https://blog.csdn.net/xinhang10/article/details/129249979

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯