按照斗地主的规则,完成洗牌发牌的动作

1.案例介绍

   按照斗地主的规则,完成洗牌发牌的动作。

   具体规则:

    1. 组装54张扑克牌将

    2. 54张牌顺序打乱

    3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

    4. 查看三人          各自手中的牌(按照牌的大小排序)、底牌 规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 

2.案例分析 

1. 准备牌: 完成编号与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个编号与字符串纸牌的对应关系(相当于一个字典)。

2. 洗牌: 通过编号完成洗牌发牌

3. 发牌: 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 存放的过程中要求数字大小与斗地主规则的大小对应。 将代表不同纸牌的编号分配给不同的玩家与底牌。

4. 看牌: 通过查询纸牌与编号的对应关系,由编号转成纸牌字符串再进行展示。

3.代码编写 

package day10;

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

/*按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
1. 组装54张扑克牌将
2. 54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3*/
public class PokerDemo {
	public static void main(String[] args) {
		// 1.使用双列Map(HashMap)集合,完成一个编号与字符串纸牌的对应关系(相当于一个字典)
		Map<Integer, String> pokerMap = new HashMap<Integer, String>();
		// 花色集合
		ArrayList<String> colors = new ArrayList<String>();
		// 数字集合
		ArrayList<String> numbers = new ArrayList<String>();
		// 2.将扑克牌中的花色和数字添加到各自的集合中
		Collections.addAll(colors, "♥", "♦", "♣", "♠");
		Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
		int count = 1;
		pokerMap.put(count++, "大王");
		pokerMap.put(count++, "大王");
		// 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
		for (String number : numbers) {
			for (String color : colors) {
				String card = color + number;
				pokerMap.put(count++, card);
			}
		}
		// System.out.println(pokerMap);
		// 3.洗牌
		Set<Integer> set = pokerMap.keySet();
		ArrayList<Integer> list = new ArrayList();
		list.addAll(set);
		// 将list里扑克牌打乱
		Collections.shuffle(list);
		// 5.发牌
		// 创建三个list集合(相当于三个玩家),发牌时 先将扑克牌对应的编号,放到三个list集合里
		ArrayList<Integer> list1 = new ArrayList<>();
		ArrayList<Integer> list2 = new ArrayList<>();
		ArrayList<Integer> list3 = new ArrayList<>();
		ArrayList<Integer> dipai = new ArrayList<>();
		for (int i = 0; i < list.size(); i++) {
			Integer num = list.get(i);
			if (num >= 51) {
				dipai.add(num);
			} else if (num % 3 == 0) {
				list1.add(num);
			} else if (num % 3 == 1) {
				list2.add(num);
			} else {
				list3.add(num);
			}
		}
		// 6.对扑克牌编号进行排序
		Collections.sort(list1);
		Collections.sort(list2);
		Collections.sort(list3);
		//System.out.println(list1);
		// 7.创建三个玩家,从map集合通过编号拿出对应的牌面,放到各自list集合里
		ArrayList<String> player1 = new ArrayList<>();
		ArrayList<String> player2 = new ArrayList<>();
		ArrayList<String> player3 = new ArrayList<>();
		ArrayList<String> dipai1 = new ArrayList<>();
		for (Integer i : list1) {
			player1.add(pokerMap.get(i));
		}
		for (Integer i : list2) {
			player2.add(pokerMap.get(i));
		}
		for (Integer i : list3) {
			player3.add(pokerMap.get(i));
		}
		System.out.println("玩家1" + player1);
		System.out.println("玩家2" + player2);
		System.out.println("玩家3" + player3);
	}
}

      

发布了52 篇原创文章 · 获赞 69 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lbqlzch/article/details/105080950
今日推荐