黑马程序员技术交流社区
标题:
斗地主 模拟
[打印本页]
作者:
雨来
时间:
2015-12-27 18:37
标题:
斗地主 模拟
package com.itheima;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeSet;
public class Poker2 {
/**
* 分析: 模拟用户发扑克
*
* 1、 要有一副扑克
* 2、分扑克之前要洗一下排
* 3、每个人手中的排会自动排顺序
* 4、三个人 考虑底牌问题(斗地主)
*/
public static void main(String[] args) {
//创建一副扑克
String [] color={"红桃","黑桃","梅花","方块",};
String [] pk ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//拼pk 四色花 以 pK 为主拼
//for(int i = 0 ;i <pk.length; i ++)
//用增强for
//初使化计数器用 来当做 扑克的索引
int index = 0;
//创建一个有序集合 来存储 索引
ArrayList<Integer> alist = new ArrayList<>();
//创建一个HashMap来存储 poker
HashMap<Integer,String> hm = new HashMap<>();
for(String s1:pk) {
for(String s2: color) {
hm.put(index, s2.concat(s1)+"\t"); // 为扑克的格式良好 我们加下Table 转义符"\t"
alist.add(index);//这里的index 自动装箱
index++;
}
}//出了大for则扑克已经拼结完成 但还差 大王和小王
//测试一下拼了多少张扑克
//System.out.println(alist.size()); // 52张排
//测试一下index 出了for 是多少
//System.out.println(index); // 52 但我们是 从0 开始的 也就是说角标52 代表第三第排
//那么我们添加大王
hm.put(index, "大王"+"\t");
alist.add(index);
//添加小王
index++;
hm.put(index, "小王"+"\t");
alist.add(index);
//洗牌
Collections.shuffle(alist);//打索引洗乱
//创建3个人 这个三个要获取集合中的角标 而其还要有自然排序的功能 那么选TreeSet集合
TreeSet<Integer> zhangzhen = new TreeSet<>();
TreeSet<Integer> huwenpeng = new TreeSet<>();
TreeSet<Integer> limingdao = new TreeSet<>();
TreeSet<Integer> dipai = new TreeSet<>(); //把它们封装成一个集合
//TreeSet<TreeSet<Integer>> tsset = new TreeSet<>(); //封装人的集合
//Iterator<TreeSet<Integer>> it = tsset.iterator(); //获取人集合的迭代器
//用for 循环
/* //添加人
tsset.add(zhangzhen);
tsset.add(huwenpeng);
tsset.add(limingdao);
tsset.add(dipai);
*/
//发排
for(int i = 0; i<alist.size(); i++) {
//参把底牌軣出来
/*if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
dipai.add(i);
}
else if(i%3==0) {
zhangzhen.add(i);
}
else if(i%3==1) {
huwenpeng.add(i);
}
else {
limingdao.add(i);
}
*/
//错误 分析: i 是ArrayList的角标 通过角标才能获取出 ArrayList集合中的元素 这里的元素
//HashMap 里的Key一一对应 如上面的 则会只输出张珍一个人的。
if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
dipai.add(alist.get(i));
}
else if(i%3==0) {
zhangzhen.add(alist.get(i));
}
else if(i%3==1) {
huwenpeng.add(alist.get(i));
}
else {
limingdao.add(alist.get(i));
}
}
seepoker("张珍",zhangzhen,hm);//tsset
seepoker("胡文鹏",huwenpeng,hm);
seepoker("李明道",limingdao,hm);
seepoker("底牌",dipai,hm);
}
//封装一个方法 在显示器输出每个人排
//分析:我们只要显示功能 则无需要返回值 那么 参数列表是 一 要有人 TreeSet 二 要有排 HashMap 三 还要有姓名
//
public static void seepoker(String name, TreeSet<TreeSet<Integer>> ts, HashMap<Integer,String> hs) {
for(TreeSet<Integer> tsm:ts) { //把 3个人封装集合 集合的
System.out.println(name+"排是:");
for(Integer key:tsm) { //参数不加泛型下面会报错切记切记
System.out.print(hs.get(key)); //这里不要换行
}
//加一个换行
System.out.println();
}
}
}
复制代码
作者:
谢光智
时间:
2015-12-27 19:42
6666666666666
作者:
隔壁老猫
时间:
2015-12-27 20:46
最近都爱玩斗地主
作者:
蛋炒饭
时间:
2015-12-27 20:58
不错不错 可以可以
作者:
逃不掉
时间:
2015-12-27 21:38
好牛的样子吗!
作者:
NUMONE
时间:
2015-12-27 22:11
学习了,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2