使用集合,完善斗地主游戏功能,实现发牌后有序排序

2022-07-27,,,,

文章目录

  • 前言
  • 一、分析
    • 1.创建54张牌
    • 2.洗牌
    • 3.发牌
    • 4.排序
    • 5.定义一个看牌的方法,并调用
    • 6.运行截图
  • 二、代码全貌

前言

这周学习了斗地主发牌的游戏,但是因为一些知识点还没讲解,所以没有做成可以发完牌后将每个玩家的牌排序好的功能,因此我查阅了一些资料,写了一些发牌后排序的程序


一、分析

1.创建54张牌

代码如下(示例):

		//1.准备54张牌
		//创建Map集合 ,存储牌的索引和组装号的牌
		HashMap<Integer,String> p = new HashMap<>();
		//创建list集合,存储牌的索引
		ArrayList<Integer> pIndex = new ArrayList<>();
		//定义俩个集合,存储花色和序号
		List<String> colors = Arrays.asList("♠","♥","♣","♦");
		List<String> numbers = Arrays.asList("2","A","K","Q","J","10","9","8","7","6","5","4","3");
		//存大王小王到集合中
		//定义一个牌的索引
		int index = 0;
		p.put(index,"大王");
		pIndex.add(index);
		index++;
		p.put(index,"小王");
		pIndex.add(index);
		index++;
		//循环嵌套遍历两个集合,组装52张牌,存储到集合中。
		for (String n : numbers) {
			for (String c : colors) {
				p.put(index,c+n);
				pIndex.add(index);
				index++;
			}
		}
	    System.out.println(p);
		System.out.println(pIndex);

查看牌的集合,以及对应的索引值如下:

2.洗牌

使用使用Collections的方法shuffle(list)
代码如下(示例):

	Collections.shuffle(pIndex);

3.发牌

定义四个集合,分别存3个玩家的牌,以及地主的三张底牌

		ArrayList<Integer> p1 = new ArrayList<>();
		ArrayList<Integer> p2 = new ArrayList<>();
		ArrayList<Integer> p3 = new ArrayList<>();
		ArrayList<Integer> d = new ArrayList<>();
		//遍历存储牌索引的list集合,获取每一个牌的索引
		for (int i = 0; i < pIndex.size(); i++) {
			Integer in = pIndex.get(i);
			//判断底牌
			if(i>=51) {
				//给底牌集合发牌
				d.add(in);
			}else if(i%3 == 0){
				//给玩家一集合发牌
				p1.add(in);
			}else if(i%3 == 1){
				//给玩家二集合发牌
				p2.add(in);
			}else if(i%3 == 2){
				//给玩家三集合发牌
				p3.add(in);
			}
		}

4.排序

使用Collections的方法sort(List)
默认升序排序,即从小到大

	Collections.sort(p1);
   	Collections.sort(p2);
   	Collections.sort(p3);
   	Collections.sort(d);

5.定义一个看牌的方法,并调用

定义方法:

/**
	 * 定义一个看牌的方法
	 * @param name 玩家名称
	 * @param p 存储牌的集合
	 * @param list 存储玩家和底牌的集合
	 * 
	 * 遍历玩家和底牌的集合,获取牌的索引
	 * 通过牌的索引,去Map集合中,找到对应的牌
	 */
	
	public static void lookP(String name,HashMap<Integer,String> p,ArrayList<Integer> list) {
		//输出玩家名字
		System.out.print(name + ": ");
		//遍历玩家或底牌集合,获取牌的索引
		for (Integer key : list) {
			//使用牌的索引,去获取Map集合中,找到对应的牌
			String value = p.get(key);
			System.out.print(value+"  ");
		}
		System.out.println();//打印完每个玩家的牌后换行
	}

调用方法:

	lookP("周杰伦", p,p1);
		lookP("刘德华", p,p2);
		lookP("梁朝伟", p,p3);
		lookP("底牌", p,d);

6.运行截图


二、代码全貌

package paixudoudizhu;

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

public class DouDiZhu {

	public static void main(String[] args) {
		//1.准备54张牌
		//创建Map集合 ,存储牌的索引和组装号的牌
		HashMap<Integer,String> p = new HashMap<>();
		//创建list集合,存储牌的索引
		ArrayList<Integer> pIndex = new ArrayList<>();
		//定义俩个集合,存储花色和序号
		List<String> colors = Arrays.asList("♠","♥","♣","♦");
		List<String> numbers = Arrays.asList("2","A","K","Q","J","10","9","8","7","6","5","4","3");
		//存大王小王到集合中
		//定义一个牌的索引
		int index = 0;
		p.put(index,"大王");
		pIndex.add(index);
		index++;
		p.put(index,"小王");
		pIndex.add(index);
		index++;
		//循环嵌套遍历两个集合,组装52张牌,存储到集合中。
		for (String n : numbers) {
			for (String c : colors) {
				p.put(index,c+n);
				pIndex.add(index);
				index++;
			}
		}
//		System.out.println(p);
//		System.out.println(pIndex);
		
		/**
		 * 2.洗牌
		 * 使用Collections的方法shuffle(list)
		 */
		Collections.shuffle(pIndex);
		
		/**
		 * 3.发牌
		 * 定义四个集合,分别存3个玩家的牌,以及地主的三张底牌
		 */
		
		ArrayList<Integer> p1 = new ArrayList<>();
		ArrayList<Integer> p2 = new ArrayList<>();
		ArrayList<Integer> p3 = new ArrayList<>();
		ArrayList<Integer> d = new ArrayList<>();
		//遍历存储牌索引的list集合,获取每一个牌的索引
		for (int i = 0; i < pIndex.size(); i++) {
			Integer in = pIndex.get(i);
			//判断底牌
			if(i>=51) {
				//给底牌集合发牌
				d.add(in);
			}else if(i%3 == 0){
				//给玩家一集合发牌
				p1.add(in);
			}else if(i%3 == 1){
				//给玩家二集合发牌
				p2.add(in);
			}else if(i%3 == 2){
				//给玩家三集合发牌
				p3.add(in);
			}
		}
		
		/**
		 * 4.排序
		 * 使用Collections的方法sort(List)
		 * 默认升序排序,即从小到大
		 */
		
		Collections.sort(p1);
		Collections.sort(p2);
		Collections.sort(p3);
		Collections.sort(d);
		
		/**
		 * 5.看牌
		 */
		lookP("周杰伦", p,p1);
		lookP("刘德华", p,p2);
		lookP("梁朝伟", p,p3);
		lookP("底牌", p,d);
	}
	
	/**
	 * 定义一个看牌的方法
	 * @param name 玩家名称
	 * @param p 存储牌的集合
	 * @param list 存储玩家和底牌的集合
	 * 
	 * 遍历玩家和底牌的集合,获取牌的索引
	 * 通过牌的索引,去Map集合中,找到对应的牌
	 */
	
	public static void lookP(String name,HashMap<Integer,String> p,ArrayList<Integer> list) {
		//输出玩家名字
		System.out.print(name + ": ");
		//遍历玩家或底牌集合,获取牌的索引
		for (Integer key : list) {
			//使用牌的索引,去获取Map集合中,找到对应的牌
			String value = p.get(key);
			System.out.print(value+"  ");
		}
		System.out.println();//打印完每个玩家的牌后换行
	}
}

本文地址:https://blog.csdn.net/adahh/article/details/109963177

《使用集合,完善斗地主游戏功能,实现发牌后有序排序.doc》

下载本文的Word格式文档,以方便收藏与打印。