java学习笔记(二十五)模拟斗地主发牌与洗牌

生活中,我们经常和朋友一起玩斗地主纸牌游戏,大家都知道斗地主有54张牌,大王和小王还有四种花色的A~k,那么斗地主中的发牌和洗牌用java是怎么完成的呢?
案列分析:
1.先创建两个String数组存储牌的点数和花色
2.斗地主中有洗牌这一功能,那么我们就可以用Collections这个集合工具类中的shuffle()这个方法,所以创建一个ArrayList集合
3.创建hashmap来存储牌的序号和牌的内容
4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
5.将大王和小王加入hs中,序号加入lists中
6.洗牌,洗牌的时候洗索引
7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
8.写一个看牌的方法
9.看牌
代码如下:

package com.edu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.TreeSet;

public class Poker {
    public static void main(String[] args) {
        //1.先创建两个String数组存储牌的点数和花色
        //点数
        String []numbers={"3","4","5","6","7","8","9","10","J","O","k","A","2"};
        String []colors={ "♥", "♠", "♣", "♦" };
        //2.因为要洗牌所以用ArrayList集合存储牌的序号
        ArrayList<Integer> lists = new ArrayList<Integer>();
        //3.创建hashmap来存储牌的序号和牌的内容
        HashMap<Integer, String> hs = new HashMap<Integer, String>();
        //4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
        int index=0;
        for (String number : numbers) {
            for (String color : colors) { 
                hs.put(index, color+number);
                lists.add(index);
                index++;    
            }   
        }
        //5.将大王和小王加入hs中,序号加入lists中
        lists.add(index);
        hs.put(index, "大王");
        index++;//序号加1
        lists.add(index);
        hs.put(index, "小王");
        //6.洗牌,洗牌的时候洗索引
        Collections.shuffle(lists);
        //7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
        TreeSet<Integer> zhangsan = new TreeSet<Integer>();
        TreeSet<Integer> lisi = new TreeSet<Integer>();
        TreeSet<Integer> wangwu = new TreeSet<Integer>();
        TreeSet<Integer> dipai = new TreeSet<Integer>();
        //用for循环发牌
        for (int i = 0; i < lists.size(); i++) {
            if(i>=lists.size()-3){
                dipai.add(lists.get(i));
            }else if(i%3==0){
                zhangsan.add(lists.get(i));
            }else if(i%3==1){
                lisi.add(lists.get(i));
            }else if(i%3==2){
                wangwu.add(lists.get(i));
            }       
        }
        lookpoker("张三", zhangsan, hs);
        lookpoker("李四", lisi, hs);
        lookpoker("王五", wangwu, hs);
        lookpoker("底牌", dipai, hs);
    }
    //8.写一个看牌的方法
    public static void lookpoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hs){
        System.out.print(name+"的牌是:  ");
        for (Integer it : ts) {
            System.out.print(hs.get(it)+" ");   
        }
        System.out.println();   
    }
}

结果如下:
张三的牌是: ♠4 ♦6 ♥8 ♠8 ♥9 ♣9 ♠10 ♥O ♠O ♣O ♦O ♥k ♠k ♥A ♥2 ♣2 ♦2
李四的牌是: ♣3 ♦4 ♥5 ♠5 ♣5 ♣6 ♥7 ♣8 ♦8 ♠9 ♦9 ♥10 ♣10 ♥J ♣J ♣A ♠2
王五的牌是: ♥3 ♦3 ♥4 ♣4 ♦5 ♥6 ♠6 ♠7 ♣7 ♦7 ♦10 ♠J ♣k ♠A ♦A 大王 小王
底牌的牌是: ♠3 ♦J ♦k

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值