用JAVA实现扑克牌

本文介绍了如何使用JAVA来实现一个三人扑克牌游戏。包括游戏规则、规则分析以及关键代码实现,如Poker类、Pokers类和测试用例。通过创建Poker对象表示单张牌,再构建Pokers类来管理并操作整副扑克牌,实现洗牌和抽牌功能。

扑克牌

游戏规则

规则:三个玩家,每个人轮流抽牌。

分析规则

  1. 1先买一副扑克牌 52张牌 4个花色
  2. 洗牌
  3. 抽牌

分析

首先有一张牌,才能有整个扑克牌
所以我们先创建一张牌的对象(Poker),Poker对象中包含的成员有描述的花色和数字,以及初始化的构造方法;然后再创建一整个扑克牌,Pokers对象中包含的成员有买扑克牌的方法、交换的方法、洗牌的方法,其中买扑克牌的方法里面我们自定义类型的集合专门存放52张扑克牌,洗牌的方法里面运用了产生随机数发生器(Random)

代码

Poker

public class Poker {
    private String suit;//牌色
    private int num;//数字

    public Poker(String suit, int num) {
        this.suit = suit;
        this.num = num;
    }

    public String getSuit() {
        return suit;
    }

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

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return String.format("[%s,%d]",suit,num);
    }
}

Pokers

public class Pokers {
    public List<Poker> buyPoker(){
        List<Poker> list=new ArrayList<>(52);//13*4=52

        String[] suits={"♠","♥","♣","♦"};

        for (int i = 0; i < suits.length; i++) {

            for (int j = 1; j <= 13 ; j++) {

                String suit=suits[i];
                int num=j;

                Poker poker=new Poker(suit,num);

                list.add(poker);
            }
        }
        return list;
    }
    //交换
    public void Swap(List<Poker> list,int i,int j){

        Poker temp=list.get(i);

        list.set(i,list.get(j));

        list.set(j,temp);
    }
//洗牌可以理解为互相交换牌
    public void Shuffle(List<Poker> list){
        Random random=new Random();//随机数发生器

        //注意这里是i从最后的元素开始,这样会让牌洗的更干净
        for (int i = list.size()-1; i > 0; i--) {

            int ret=random.nextInt(i);//随机生成【0,i)之间的数字

            Swap(list,i,ret);

        }
    }

}

TestDemo(测试)

public class TestDemo {
public static void main(String[] args) {
Pokers pokers=new Pokers();

    System.out.println("刚买的扑克牌");

   List<Poker>list=pokers.buyPoker();

    System.out.println(list);

    System.out.println("开始洗牌");

    pokers.Shuffle(list);

    System.out.println(list);



    List<List<Poker>> listPeople=new ArrayList<>(3);

    //这里要小心:没有创建(add)是无法获得(get)

    listPeople.add(new ArrayList<>());
    listPeople.add(new ArrayList<>());
    listPeople.add(new ArrayList<>());
    //三个人,每个人轮流抓5张牌-相当于二维数组,3行5列
    for (int i = 0; i < 5; i++) {

        for (int j = 0; j < 3; j++) {

            //remove方法是删除原来的牌+返回删除的元素
            listPeople.get(j).add(list.remove(0));
        }
    }
    int i=0;

    for (List<Poker> people:listPeople) {

        i++;
        System.out.println("第"+i+"个人手中的牌:");

        System.out.print(people);

        System.out.println();
    }
    //剩余的牌

    System.out.println("剩余的牌有:");

    System.out.println(list);

}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值