Java之斗地主案例

Java之斗地主案例

第一种

步骤分析:

  1. 定义数字数组
  2. 定义花色数组
  3. 定义扑克牌盒子集合
  4. 将大小王单独添加到盒子集合
  5. 循环遍历将数字数组与花色数组进行组合连接,然后添加进扑克牌集合
  6. 将扑克牌集合进行随机排序
  7. 定义3人与底牌集合
  8. 遍历存储(发牌)
  9. 看牌
package cn.ddz;

import java.util.ArrayList;
import java.util.Collections;

public class FAL {
	public static void main(String[] args) {
		String num[] = {"A","2","3","4","5","6","7","8","9","J","Q","K"};//定义数字数组
		String[] fc = {"♣","♠","♦","♥"};//定义梅花那些东西数组
		ArrayList<String> puker = new ArrayList<>();//定义扑克牌盒子集合
		//将大小王单独添加到盒子集合
		puker.add("大鬼");
		puker.add("小鬼");
		//循环遍历将数字数组与花色数组合添加进扑克牌集合
		for(String f : fc) {
			for(String n : num) {
				puker.add(f.concat(n));//concat():String中的方法
			}
		}
		
		Collections.shuffle(puker);//进行随机排序
		
		//定义3人与底牌集合
		ArrayList<String> zhangSan = new ArrayList<String>();
		ArrayList<String> liSi = new ArrayList<String>();
		ArrayList<String> zhaoLiu = new ArrayList<String>();
		ArrayList<String> diPai = new ArrayList<String>();
		//遍历存储
		for(int i=0; i<puker.size(); i++) {
			//底牌
			if(i>=puker.size()-3) {
				diPai.add(puker.get(i));
			}
			//对三人进行发牌
			if(i % 3 == 0) {
				//zhangSan
				zhangSan.add(puker.get(i));
			}else if(i % 3 == 1) {
				//liSi
				liSi.add(puker.get(i));
			}else {
				//zhaoLiu
				zhaoLiu.add(puker.get(i));
			}
		}
		
		//展示牌
		System.out.println("张三:"+zhangSan);
		System.out.println("李四:"+liSi);
		System.out.println("赵柳:"+zhaoLiu);
		System.out.println("底牌:"+diPai);
	}
}

结果:

在这里插入图片描述

可以看的出来发的牌都是无序的,而我们(大部分人)看牌的时候都会把牌进行排序。

而接下来的第二种就是“排序”写法!


第二种

步骤分析:

  1. 定义数字数组
  2. 定义花色数组
  3. 定义Map<Integer,String>集合,和ArrayList
  4. 拼接1&&2,存储到Map集合中,把Integer添加到ArrayList集合中单独添加大小王
  5. 定义TreeSet*4(一个底牌)
  6. 发牌
  7. 看牌
package cn.ddz;

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

public class FAL2 {
	public static void main(String[] args) {
		String num[] = {"3","4","5","6","7","8","9","J","Q","K","A","2"};//定义数字数组
		String[] fc = {"♣","♠","♦","♥"};//定义梅花那些东西数组
		//定义Map<Integer,String>集合,和ArrayList<Integer>
		HashMap<Integer,String> hm = new HashMap<Integer,String>();
		ArrayList<Integer> al = new ArrayList<>();
		
		//拼接1&&2,存储到Map集合中,把Integer添加到ArrayList<Integer>集合中
		int index = 0;//定义索引值
		for(String n : num) {
			for(String f : fc) {
				hm.put(index, f.concat(n));
				al.add(index);
				index++;
			}
		}
		
		//单独添加大小王
		hm.put(index, "大鬼");
		al.add(index);
		index++;
		hm.put(index, "小鬼");
		al.add(index);
		
		Collections.shuffle(al);//洗牌
		
		//定义TreeSet<Integer>*4(一个底牌)
		TreeSet<Integer> zs = new TreeSet<>();
		TreeSet<Integer> ls = new TreeSet<>();
		TreeSet<Integer> zl = new TreeSet<>();
		TreeSet<Integer> dp = new TreeSet<>();
		
		//发牌
		for(int i=0; i<al.size(); i++) {
			//底牌
			if(i>=al.size()-3) {
				dp.add(al.get(i));
			}
			//用户
			if(i%3==0) {
				zs.add(al.get(i));
			}else if(i%3==1) {
				ls.add(al.get(i));
			}else {
				zl.add(al.get(i));
			}
		}
		//看牌
		look(hm, zs, "张三");
		look(hm, ls, "李四");
		look(hm, zl, "赵柳");
		look(hm, dp, "底牌");
	}
	/**
	 * 发牌功能
	 */
	public static void look(HashMap<Integer,String> hm, TreeSet<Integer> ts, String name) {
		System.out.print(name+"的牌:");
		for(Integer key : ts) {
			System.out.print(hm.get(key)+" ");
		}
		System.out.println();
	}
}

结果:

在这里插入图片描述

可以看的出来,这些牌都有着顺序。

斗地主第二种–代码分析:

在这里插入图片描述

首先,上面的图你们要是看懂了,那就成功一半了。

由图可以看的出来HashMap的键用来存储索引,值存储牌,看得出来,每一个索引对应着一种牌

然后将索引存储到ArrayList集合中,然后再将ArrayList的索引添加至TreeSet集合中,(在这之前还有个洗牌动作,所以添加进去的元素是无序的)。

最后HashMap再根据TreeSet中存储的索引去获取值。


问:为什么要用TreeSet集合存储?

答:因为TreeSet有一个自然排序,也就是compareTo()方法,会进行自动排序,(如果不知道的我建议你先去学习一下TreeSet集合)
有个洗牌动作,所以添加进去的元素是无序的)。

别想太复杂,简简单单的~~~~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值