欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-23 15:04:15
文章目录前言一、分析1.创建54张牌2.洗牌3.发牌4.排序5.定义一个看牌的方法,并调用6.运行截图二、代码全貌前言这周学习了斗地主发牌的游戏,但是因为一些知识点还没讲解,所以没有做成可以发完牌后将每个玩家的牌排序好的功能,因此我查阅了一些资料,写了一些发牌后排序的程序一、分析1.创建54张牌代码如下(示例)://1.准备54张牌//创建Map集合 ,存储牌的索引和组装号的牌HashMap p = new HashMap<&...


前言

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


一、分析

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

相关标签: java