Java之使用集合来实现一个简单的斗地主的洗牌和发牌功能

1 篇文章 0 订阅
1 篇文章 0 订阅

**

Java之使用集合来实现一个简单的斗地主的洗牌和发牌功能:

**

难点:对洗牌后的顺序实现一个自动重排,这里我们可以使用索引,利用HashMap集合的键值对思想,将每张扑克牌的牌面值与其索引进行对应,然后我们可以通过操作索引实现对扑克牌的洗牌和发牌,最后再获取对应索引值的牌面值即可:
在这里插入图片描述

package puker_game;

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

public class 斗地主的制牌洗牌和发牌的进阶 {

	public static void main(String[] args) {

		// 准备牌表,牌表用于对应制作好的牌面跟索引的值,即54张扑克牌,每张对应一个索引
		HashMap<Integer, String> table = new HashMap<>();

		// 准备牌组,用于存放制作好的扑克牌
		ArrayList<Integer> paizu = new ArrayList<>();

		// 制作花色
		String[] color = { "♠", "♥", "♦", "♣" };

		// 制作数字
		String[] num = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };

		// 制作牌面,将牌面添加进牌表中,形成对应关系,给定初始索引,外层循环数字内存循环花色,可实现最后的齐牌功能
		int index = 0;
		for (String nu : num) {
			for (String co : color) {
				String face = nu + co;
				// 将制作好的牌面放入牌表中
				table.put(index, face);
				// 将制作好的牌面同时放入扑克牌牌组中
				paizu.add(index);
				index++;
			}
		}
		// 将大小王添加进牌表
		table.put(index, "小王");
		paizu.add(index);
		index++;

		table.put(index, "大王");
		paizu.add(index);
		
		// 洗牌
		Collections.shuffle(paizu);

		// 准备底牌
		ArrayList<Integer> dipai = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			dipai.add(paizu.remove(0));
		}

		// 准备玩家
		ArrayList<Integer> zhangsan = new ArrayList<>();
		ArrayList<Integer> lisi = new ArrayList<>();
		ArrayList<Integer> wangwu = new ArrayList<>();

		// 给玩家发牌
		while (true) {
			if (!(paizu.isEmpty())) {
				zhangsan.add(paizu.remove(0));
			}
			
			if (!(paizu.isEmpty())) {
				lisi.add(paizu.remove(0));
			}
			
			if (!(paizu.isEmpty())) {
				wangwu.add(paizu.remove(0));
			} else {
				break;
			}
			
		}
			// 发牌后排序
			Collections.sort(dipai);
			Collections.sort(zhangsan);
			Collections.sort(lisi);
			Collections.sort(wangwu);
			// System.out.println(zhangsan);
			// 看牌
			System.out.println("底牌:" + query(table, dipai));
			System.out.println("张三:" + query(table, zhangsan));
			System.out.println("李四:" + query(table, lisi));
			System.out.println("王五:" + query(table, wangwu));

	}

	private static String query(HashMap<Integer, String> table, ArrayList<Integer> wanjia) {

		StringBuilder sb = new StringBuilder("[");
		for (Integer index : wanjia) {
			String face = table.get(index);
			sb.append(face).append(",");
		}
		return sb.replace(sb.length() - 1, sb.length(), "]").toString();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值