前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【发牌游戏】基于顺序表实现

【发牌游戏】基于顺序表实现

作者头像
用户11288949
发布2024-09-24 13:38:57
1040
发布2024-09-24 13:38:57
举报
文章被收录于专栏:学习

前言: 小编这里将运用顺序表实现模拟发牌的规则,前提是阅读这篇文章的uu具备相应的知识 并且小编在编写代码时,忽略了大小王,以及J,Q,K都是由11,12,13代替的。

思路分析:

首先我们要明白在一副扑克牌中有花色,和数字,所以我们在面向对象编程时,首先要先定义一个类,初始化这两个变量,然后分析,我们肯定要将一副牌表示出来,然后打乱这幅牌,者涉及到两个方法,最后实现分牌,这也是一个方法,最后主函数实现。

相关代码:

按照以上思路讲解,有以下几个步骤和讲解。

1.初始化相关变量:
代码语言:javascript
复制
public class Card {
    private int rank;
    private String suit;

    public Card(int rank, String suit) {
        this.rank = rank;
        this.suit= suit;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "("+suit+":"+rank+")";
    }
}

首先小编定义了两个变量rank代表数值,suit代表花色,然后就是经典的构造方法,以及get和set函数 ,(这两个变量是私有的,需要通过共有的get set函数调用,构造方法,方便在实例化对象时直接赋值)然后重写了tostring方法,这里方便按照指定格式直接输出对象。

2.实现所有牌的打印:

代码如下:

代码语言:javascript
复制
public class Cardlist {
    public static final String[] SUIT={"♥","♣","♦","♠"};

    
    //存放牌
    public  List<Card> cards(){
        List<Card> list=new ArrayList<>(52);
        for (int i=0;i<SUIT.length;i++){
            for (int j = 1; j <=13 ; j++) {
                int rank=j;
                String suit=SUIT[i];
                Card card=new Card(j,suit);
                list.add(card);
            }
        }
        return list;
    }

这里首先初始话数组,将,梅花,红桃,黑桃,方片存入,定义一个存放牌的顺序表并声明它的范围,通过双重循环,将四种花色,13种数字对应的牌放到顺序表中。(这里将花色,与数字的信息放到card对象中后,通过顺序表list的方法add添加进去)

3.实现牌的打乱操作 :

代码如下:

代码语言:javascript
复制
 public List<Card> swap(List<Card> list){
        for (int i = list.size()-1; i >0; i--) {
            Random r=new Random();
            int index=r.nextInt(i);
            Card card=list.get(i);
            list.set(i,list.get(index));
            list.set(index, card);
        }
        return list;
    }

这里小编的思路是,通过随机函数,随机出来数字,然后交换实现打乱,这里通过顺序表中最后一个位置与随机前面的数(注意不包含最后一个位置,每次随机都是不能包含要交换的位置)实现交换,这样就不会随机到自己本身的索引。(在交换时通过顺序表get下标对应的扑克牌的信息,然后存入一个对象中,再实现交换,最后将对象拿给顺序表),这里与冒泡排序一样的道理。

4.实现扑克牌的发牌操作:

代码如下:

代码语言:javascript
复制
 public List<List<Card>> getCard(List<Card> list){
        List<List<Card>> person=new ArrayList<>();
        List<Card> person1=new ArrayList<>();
        List<Card> person2=new ArrayList<>();
        List<Card> person3=new ArrayList<>();

        person.add(person1);
        person.add(person2);
        person.add(person3);

        for (int i = 0; i <5 ; i++) {
            for (int j = 0; j <3 ; j++) {
                Card card=list.remove(0);
                person.get(j).add(card);
            }
        }
        return person;

    }

这里小编用了List<List<Card>>,表示在一个顺序表中还含有一个顺序表:

如下图所示:

其中0下表对应一个地址代表person1, 1下表对应一个地址代表person2, 2下表对应一个地址代表person3, 然后每个person1,person2,person3,都是一个顺序表,用这个顺序表里存放每个人的牌

代码通过person对象add(person1,person2,person3)添加了每个列表,然后通过双重循环,将打乱的牌的第一个牌删除并传给card(模拟了摸牌的操作),在通过person的get函数去调用第一个person1列表,并将card传给person1,就完成了发牌的操作。

5.主函数:
代码语言:javascript
复制
 public static void main(String[] args) {
        Cardlist cardlist=new Cardlist();
        List<Card> ret=cardlist.cards();
        System.out.println(ret);
        System.out.println("把牌洗乱后");
        List<Card> ret1=cardlist.swap(ret);
        System.out.println(ret1);


        List<List<Card>> ret2=cardlist.getCard(ret1);
        System.out.println("第一个人的牌:"+ret2.get(0));
        System.out.println("第二个人的牌:"+ret2.get(1));
        System.out.println("第三个人的牌:"+ret2.get(2));

在最后输出时,ret2相当于person顺序表,调用get函数实现得到对应位置的顺序表,并打印其中的信息。

6.输出效果:

[(♥:1), (♥:2), (♥:3), (♥:4), (♥:5), (♥:6), (♥:7), (♥:8), (♥:9), (♥:10), (♥:11), (♥:12), (♥:13), (♣:1), (♣:2), (♣:3), (♣:4), (♣:5), (♣:6), (♣:7), (♣:8), (♣:9), (♣:10), (♣:11), (♣:12), (♣:13), (♦:1), (♦:2), (♦:3), (♦:4), (♦:5), (♦:6), (♦:7), (♦:8), (♦:9), (♦:10), (♦:11), (♦:12), (♦:13), (♠:1), (♠:2), (♠:3), (♠:4), (♠:5), (♠:6), (♠:7), (♠:8), (♠:9), (♠:10), (♠:11), (♠:12), (♠:13)] 把牌洗乱后 [(♥:5), (♥:10), (♦:6), (♥:8), (♠:5), (♥:1), (♥:13), (♠:12), (♣:5), (♥:3), (♠:13), (♣:9), (♣:11), (♣:6), (♥:7), (♥:6), (♣:7), (♦:7), (♦:5), (♠:11), (♦:4), (♦:9), (♥:2), (♣:1), (♦:1), (♣:8), (♦:2), (♥:12), (♦:11), (♣:4), (♠:10), (♦:12), (♠:3), (♦:10), (♦:3), (♠:1), (♠:6), (♣:12), (♥:11), (♠:4), (♠:7), (♣:3), (♦:13), (♠:8), (♠:9), (♣:10), (♥:4), (♥:9), (♠:2), (♣:2), (♦:8), (♣:13)] 第一个人的牌:[(♥:5), (♥:8), (♥:13), (♥:3), (♣:11)] 第二个人的牌:[(♥:10), (♠:5), (♠:12), (♠:13), (♣:6)] 第三个人的牌:[(♦:6), (♥:1), (♣:5), (♣:9), (♥:7)]

这里小编这给每个人发了五张牌。

总结:

限于小编能力有限,并且这只是一个发牌的模拟,没有非常完善,希望各位uu在评论区发表宝贵意见。代码在这里:Sequence: 顺序表相关代码,里面的Card包里哦;

制作不易,麻烦给小编点一个赞吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路分析:
  • 相关代码:
    • 1.初始化相关变量:
      • 2.实现所有牌的打印:
        • 3.实现牌的打乱操作 :
          • 4.实现扑克牌的发牌操作:
            • 5.主函数:
              • 6.输出效果:
              • 总结:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档