纸牌分发_Java代码实现

本文介绍了一个使用Java编写的纸牌游戏程序,通过枚举类型定义了纸牌的点数和花色,并实现了多人随机发牌的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用Java代码实现纸牌分发的任务,这是很久以前做到一个小程序,现在贴出来,话不多说,直接上代码:

package com.lin.card;

import java.util.LinkedList;
import java.util.Scanner;
import java.util.TreeSet;



public class Card implements Comparable<Card>{

    //扑克牌的点数
    Number n;
    //扑克牌的花色
    Huase h;
    //扑克牌的值,表示一张扑克牌的大小
    int value;
    //有参数的构造方法
    public Card(Number n, Huase h) {
        super();
        this.n = n;
        this.h = h;
        value=n.ordinal()*10+h.ordinal();
    }

    @Override
    public int compareTo(Card c) {
        if(this.value>c.value)
            return 1;
        else if(this.value<c.value)
            return -1;
        else return 0;
    }
    //toString方法
    @Override
    public String toString() {
        String str=null;
        switch (h) {
            case DIAMOND: str="方块"; break;
            case CLUB:  str="梅花";break;
            case HEART: str="红桃";break;
            case SPADE:str="黑桃";break;
        }
        switch(n){
            case TWO:str+="2";break;
            case THREE:str+="3";break;
            case FOUR:str+="4";break;
            case FIVE:str+="5";break;
            case SIX:str+="6";break;
            case SEVEN:str+="7";break;
            case EIGHT:str+="8";break;
            case NINE:str+="9";break;
            case TEN:str+="10";break;
            case JACK:str+="J";break;
            case QUEEN:str+="Q";break;
            case KING:str+="K";break;
            case ACE:str+="A";break;
       } 
        return str;
    }

    /*
     * 定义一个静态方法display
     * 实现为多人随机发牌的功能
     * */
    public static TreeSet<Card>[] display(int players){
        //存放所有扑克牌的集合
        LinkedList<Card> allCards=new LinkedList<Card>();
        for(Number num:Number.values()){
            for(Huase h:Huase.values()){
                allCards.add(new Card(num, h));
            }
        }
        //存放每一个玩家手里的扑克牌
        TreeSet<Card> cards[]=new TreeSet[players+1];
        int i=0;
        //循环随机发放每一个玩家的扑克牌并保存起来,同时把已经发出去的牌从allCards删掉
        for(;i<players;i++){
            cards[i]=new TreeSet<Card>();
            for(int j=0;j<52/players;j++){
                int k=(int) (Math.random()*allCards.size());
                cards[i].add(allCards.remove(k));
            }
        }
        return cards;
    }

    public static void main(String[] args) {
        while(true){
        System.out.print("玩家人数:");
        Scanner sc=new Scanner(System.in);

        int k=sc.nextInt();
        if(52%k!=0){
            System.out.println("不能平均为所给的人数发牌!!!请重新安排人数!扑克牌为52张!!");
        }else{
        TreeSet<Card> cards[]=Card.display(k);
        //循环打印每一个玩家手里的扑克牌
        for (int i = 0; i < cards.length-1; i++) {
            System.out.println("\n第"+(i+1)+"人手里的牌:");
            for(Card c:cards[i]){
                System.out.print(c+" ");
            }
        }
        System.out.println();
        }
        System.out.println();
        }
    }

}


/*
 * 枚举类型,代表扑克牌的点数
 * */
enum Number{
     TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE
    }


/*
 * 枚举类型,代表扑克牌的花色
 * */
enum Huase{
     DIAMOND,CLUB,HEART,SPADE
    }

效果图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Radom7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值