1、备注
上一篇所写的是随机发牌无序版的斗地主 此篇在上一篇的基础上添加了排序(升序) 简单地说就是在看牌前多了一个排序方法步骤 由索引找到对应的数值
2、具体步骤
1、准备牌
2、洗牌
3、发牌
4、排序
5、看牌
3、代码分析
(1)准备牌
// 1、准备牌
//创建一个map集合,存储牌的索引和组装好的牌
HashMap<Integer, String > poker = new HashMap<>();
//创建一个list集合存储索引
ArrayList<Integer> pokerIndex = new ArrayList<>();
//定义两个集合,存储花色和序号
List<String> colors = List.of("♥","♣","♦","♠");
List<String> num = List.of("2","A","K","Q","J","10","9","8","7","6","5","4","3");
//把大王和小王存到集合中
//定义一个牌的索引
int index =0;
poker.put(index, "大王");
pokerIndex.add(index);
index++;
poker.put(index, "小王");
pokerIndex.add(index);
index++;
//循环嵌套两个集合,组装52张牌,存储到集合
for (String number : num) {
for(String color:colors) {
poker.put(index, color+number);
pokerIndex.add(index);
index++;
}
}
(2)洗牌
//2、洗牌collections shuffle
Collections.shuffle(pokerIndex);
(3)发牌
//3、发牌
//定义4个集合,存储玩家牌和底牌
ArrayList<Integer> player01 = new ArrayList<>();
ArrayList<Integer> player02 = new ArrayList<>();
ArrayList<Integer> player03 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
//遍历存储牌的索引list集合,获取每一个牌的索引
for(int i = 0;i<pokerIndex.size();i++) {
Integer in = pokerIndex.get(i);
//判断地牌
if(i>=51) {
dipai.add(in);
}else if(i%3==0){
//给玩家1发牌
player01.add(in);
}else if(i%3==1) {
player02.add(in);
}else if(i%3==2) {
player03.add(in);
}
}
(4)排序
//4、排序 sort
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
(5)看牌
//5、看牌,定义一个看牌的方法,提高代码复用性
look("you", poker, player01);
look("you", poker, player02);
look("you", poker, player03);
/*
* 参数:
* String name :玩家名称
* HashMap<k,v> poker:存储牌的poker集合
* arraylist:存储底牌的list集合
* 查表法:
* 遍历玩家或者底牌集合,获取索引
* 使用索引去map集合中找到相对应的值
*/
}
public static void look(String name,HashMap<Integer, String> poker,ArrayList<Integer> list) {
//输出玩家名称
System.out.print(name+":");
//遍历玩家或者底牌集合,获取索引
for(Integer key:list) {
//使用索引找牌
String value = poker.get(key);
System.out.print(value+" ");//打印完每一个玩家的牌
}
System.out.println();
}
}
3、代码实现
package Static;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/*
* 有序版本斗地主案例:
* 1、准备牌
* 2、洗牌
* 3、发牌
* 4、排序
* 5、看牌
*/
public class DouDiZhuDouble {
public static void main(String[] args) {
// 1、准备牌
//创建一个map集合,存储牌的索引和组装好的牌
HashMap<Integer, String > poker = new HashMap<>();
//创建一个list集合存储索引
ArrayList<Integer> pokerIndex = new ArrayList<>();
//定义两个集合,存储花色和序号
List<String> colors = List.of("♥","♣","♦","♠");
List<String> num = List.of("2","A","K","Q","J","10","9","8","7","6","5","4","3");
//把大王和小王存到集合中
//定义一个牌的索引
int index =0;
poker.put(index, "大王");
pokerIndex.add(index);
index++;
poker.put(index, "小王");
pokerIndex.add(index);
index++;
//循环嵌套两个集合,组装52张牌,存储到集合
for (String number : num) {
for(String color:colors) {
poker.put(index, color+number);
pokerIndex.add(index);
index++;
}
}
//System.out.println(poker);
//System.out.println(pokerIndex);
//2、洗牌collections shuffle
Collections.shuffle(pokerIndex);
//3、发牌
//定义4个集合,存储玩家牌和底牌
ArrayList<Integer> player01 = new ArrayList<>();
ArrayList<Integer> player02 = new ArrayList<>();
ArrayList<Integer> player03 = new ArrayList<>();
ArrayList<Integer> dipai = new ArrayList<>();
//遍历存储牌的索引list集合,获取每一个牌的索引
for(int i = 0;i<pokerIndex.size();i++) {
Integer in = pokerIndex.get(i);
//判断地牌
if(i>=51) {
dipai.add(in);
}else if(i%3==0){
//给玩家1发牌
player01.add(in);
}else if(i%3==1) {
player02.add(in);
}else if(i%3==2) {
player03.add(in);
}
}
//4、排序 sort
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(dipai);
//5、看牌,定义一个看牌的方法,提高代码复用性
look("她", poker, player01);
look("我", poker, player02);
look("你", poker, player03);
/*
* 参数:
* String name :玩家名称
* HashMap<k,v> poker:存储牌的poker集合
* arraylist:存储底牌的list集合
* 查表法:
* 遍历玩家或者底牌集合,获取索引
* 使用索引去map集合中找到相对应的值
*/
}
public static void look(String name,HashMap<Integer, String> poker,ArrayList<Integer> list) {
//输出玩家名称
System.out.print(name+":");
//遍历玩家或者底牌集合,获取索引
for(Integer key:list) {
//使用索引找牌
String value = poker.get(key);
System.out.print(value+" ");//打印完每一个玩家的牌
}
System.out.println();
}
}
4、运行结果
她:大王 ♣K ♠K ♥Q ♣Q ♦J ♠J ♥9 ♣9 ♥8 ♥6 ♣6 ♣5 ♦4 ♣3 ♦3 ♠3
我:小王 ♥2 ♠2 ♣A ♦A ♦Q ♠Q ♥10 ♦9 ♠9 ♣8 ♣7 ♦7 ♠7 ♦5 ♠5 ♥4
你:♣2 ♦2 ♥A ♠A ♥J ♣J ♣10 ♦10 ♠10 ♦8 ♠8 ♥7 ♦6 ♠6 ♥5 ♣4 ♥3
转载:https://blog.csdn.net/Beauty_Yao/article/details/102487364
查看评论