java学习笔记(二十五)模拟斗地主发牌与洗牌
2017-05-11 12:45
281 查看
生活中,我们经常和朋友一起玩斗地主纸牌游戏,大家都知道斗地主有54张牌,大王和小王还有四种花色的A~k,那么斗地主中的发牌和洗牌用java是怎么完成的呢?
案列分析:
1.先创建两个String数组存储牌的点数和花色
2.斗地主中有洗牌这一功能,那么我们就可以用Collections这个集合工具类中的shuffle()这个方法,所以创建一个ArrayList集合
3.创建hashmap来存储牌的序号和牌的内容
4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
5.将大王和小王加入hs中,序号加入lists中
6.洗牌,洗牌的时候洗索引
7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
8.写一个看牌的方法
9.看牌
代码如下:
结果如下:
张三的牌是: ♠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
案列分析:
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
相关文章推荐
- Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)
- Java基础知识强化之集合框架笔记71:模拟斗地主洗牌和发牌并对牌进行排序的案例
- 【Java学习笔记】16.TreeMap集合实现斗地主洗牌发牌
- Java基础知识强化之集合框架笔记70:模拟斗地主洗牌和发牌(ArrayList)
- java 从零开始,学习笔记之基础入门<tomcat>(二十五)
- [原]Java程序员的JavaScript学习笔记(6——面向对象模拟)
- Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button
- 用java模拟斗地主洗牌和发牌
- 黑马程序员——用java模拟斗地主洗牌和发牌
- redis学习笔记---java操作redis,使用expire模拟指定时间段内限制ip访问的次数;
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<tomcat>(二十五)
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
- Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response
- 用java编写模拟斗地主洗牌发牌程序
- JAVA学习笔记29——模拟实现ArrayList
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- JAVA学习笔记(2)_____线程同步锁(synchronized)模拟火车售票窗口
- JAVA学习笔记33——模拟实现HandSet+数据存储综合练习(javabean版+容器板)
- JAVA学习笔记38——模拟实现Iterator+HashMap的“分拣”原理+“分拣”的应用
- Java Web 学习笔记之三: HttpURLConnection 模拟表单上传文件