使用集合,完善斗地主游戏功能,实现发牌后有序排序
程序员文章站
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