JAVA学习笔记(十八)

经典案例:模拟斗地主洗牌发牌

案例介绍:按照斗地主的规则,完成洗牌发牌的动作。

案例需求分析:

准备牌:

  完成数字与纸牌的映射关系:

  使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

洗牌:

  通过数字完成洗牌发牌

发牌:

  将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

  存放的过程中要求数字大小与斗地主规则的大小对应。

  将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:

  通过Map集合找到对应字符展示。

  通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

实现步骤:

  首先,要修改java文件编码,由GBK修改为UTF-8,因为默认的字符编码GBK没有我们要的梅花、方片、黑桃、红桃(♠♥♦♣)等特殊字符。

下面是具体代码:

package homework0418;

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

public class DoudiZhu {

    public static void main(String[] args) {
        //创建一个HashMap集合
        HashMap<Integer,String> pokers=new HashMap<Integer,String>();
        //创建花色数组
        String[] colors= {"黑桃","梅花","方块","红桃"};
        //创建点数数组
        String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //创建一副牌 花色+点数
        int count=0;
        //创建一个存储索引的ArrayList集合
        ArrayList<Integer> indexs=new ArrayList<Integer>();
        for(String num:numbers) {
            for(String c:colors) {
            pokers.put(count, c+num);
            indexs.add(count);
            count++;
        }
            }
        indexs.add(0);
        pokers.put(0, "小王");
        indexs.add(1);
        pokers.put(1, "大王");
        //洗牌
        Collections.shuffle(indexs);
        //发牌
        //创建四个TreeSet集合分别存储三个人的牌和底牌编号
        TreeSet<Integer> zhangsan=new TreeSet<Integer>();
        TreeSet<Integer> lisi=new TreeSet<Integer>();
        TreeSet<Integer> wangwu=new TreeSet<Integer>();
        TreeSet<Integer> bottom=new TreeSet<Integer>();
        for(int i=0;i<indexs.size();i++) {
            if(i<3) {
                bottom.add(indexs.get(i));
            }else if(i%3==0) {
                zhangsan.add(indexs.get(i));
            }else if(i%3==1) {
                lisi.add(indexs.get(i));
            }else if(i%3==2) {
                wangwu.add(indexs.get(i));
            }
        }
        //通过索引查看pokers中对应的牌
        look("张三",zhangsan,pokers);
        look("李四",lisi,pokers);
        look("王五",wangwu,pokers);
        look("底牌",bottom,pokers);
    }
    private static void look(String name,TreeSet<Integer> ts,HashMap<Integer,String> pokers) {
        System.out.print(name+"的牌是:");
        for(int i:ts) {
            System.out.print(pokers.get(i)+" ");
        }    
        System.out.println();
            }
}

 

posted @ 2018-05-10 16:30  445412434  阅读(157)  评论(0编辑  收藏  举报