模拟斗地主
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟斗地主相关的知识,希望对你有一定的参考价值。
(1)无序import java.util.ArrayList;
import java.util.Collections;
/*
模拟斗地主的洗牌和发牌
-
*思路:
- 1)创建一个牌盒(容器:集合)
- ArrayList<String>
- 2)装牌
- 定义花色数组和点数数组(A,K)
- 红桃A
- 黑桃A
- 梅花A
- 方片A
- ....
- 3)洗牌
- Collections中的随机置换的功能
- 4)发牌
- 遍历集合(获取集合中的具体的牌)
- 需要判断:选择结构语句
- 1--->A 2--->B 3----C
- 4---A .................
- 斗地主三个玩
- 发个三个人----->三个人分别ArrayList<String>
- 如果当前牌 % 3 ==0/1/2
- 5)看牌
- 三个人看牌:将看牌封装成一个功能(独立的 代码块)
-
*/
public class Poker {public static void main(String[] args) {
//1.创建牌盒 ArrayList<String> array = new ArrayList<String>() ; //2.装牌 //2.1创建花色数组 String[] colors = {"?","?","?","?"} ; //2.2 创建点数数组 String[] numbers = {"A","2","3","4","5","6","7","8","9", "10","J","Q","K"} ; for(String color :colors) { for(String number:numbers) { String poker = color.concat(number) ; array.add(poker) ; } } //添加小王和大王 array.add("小王") ; array.add("大王") ; //3. 洗牌 Collections.shuffle(array); //4.发牌 //现在三个人玩,把每一个看成集合ArrayList ArrayList<String> player1 = new ArrayList<String>() ; ArrayList<String> player2 = new ArrayList<String>() ; ArrayList<String> player3 = new ArrayList<String>() ; ArrayList<String> diPai = new ArrayList<String>() ; //有规律的:遍历ArrayList集合 使用普通for循环,获取到集合的元素 //通过元素 % 人数 = 0 /1/2 /.. for(int x = 0 ; x < array.size() ; x ++) { //获取到每一个元素 if(x >= array.size() -3) { diPai.add(array.get(x)) ; }else if(x % 3 == 0) { //玩家1 player1.add(array.get(x)) ; }else if(x % 3 == 1) { //玩家2 player2.add(array.get(x)) ; }else if(x % 3 == 2) { player3.add(array.get(x)) ; } } //5)看牌
// * 三个人看牌:将看牌封装成一个功能(独立的 代码块)
lookPoker("玩家1", player1);
lookPoker("玩家2", player2);
lookPoker("玩家3", player3);
lookPoker("底牌", diPai);
}public static void lookPoker(String name,ArrayList<String> array) {
System.out.print(name+"的牌是:");
for(String s : array) {
System.out.print(s+" ");
}
System.out.println();
}
}
(2)有序
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
- 模拟斗地主的洗牌和发牌,发到每一个手上的牌是保证有序的.. 思考: 1)创建牌盒
- 创建两个集合:HashMap<Integer,String>,ArrayList<Integer> 2)装牌 定义花色数组和点数数组
- 从0开始编号,将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号 3)洗牌 洗的是编号 4)发牌
- 发的也是编号,为了保证牌有序,集合由TreeSet集合接收 5)看牌 封装功能
-
*/
public class Porker2 {public static void main(String[] args) {
// 1. 创建两个集合:HashMap<Integer,String>,ArrayList<Integer>
HashMap<Integer, String> hm = new HashMap<Integer, String>();
ArrayList<Integer> array = new ArrayList<Integer>();// 2.装牌 // 2.1 定义花色数组和点数数组 String[] colors = { "?", "?", "?", "?" }; String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" }; // 从0开始编号,将编号和编号对应的牌都存储到HashMap集合中,同时往ArrayList单独存储编号 int index = 0; // 拼接 for (String number : numbers) { for (String color : colors) { String poker = color.concat(number); hm.put(index, poker); array.add(index); index++; } } // 装小王和大王 hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index); // 不能++了,角标越界 // 洗牌 Collections.shuffle(array); // 4)发牌 // 发的也是编号,为了保证牌有序,集合由TreeSet集合接收 TreeSet<Integer> player1 = new TreeSet<Integer>(); TreeSet<Integer> player2 = new TreeSet<Integer>(); TreeSet<Integer> player3 = new TreeSet<Integer>(); TreeSet<Integer> diPai = new TreeSet<Integer>(); // 有规律的:遍历ArrayList集合 使用普通for循环,获取到集合的元素 // 通过元素 % 人数 = 0 /1/2 /.. for (int x = 0; x < array.size(); x++) { // 获取到每一个元素 if (x >= array.size() - 3) { diPai.add(array.get(x)); } else if (x % 3 == 0) { // 玩家1 player1.add(array.get(x)); } else if (x % 3 == 1) { // 玩家2 player2.add(array.get(x)); } else if (x % 3 == 2) { player3.add(array.get(x)); } }
// 5)看牌 封装功能
lookPoker("玩家1", player1, hm);
lookPoker("玩家2", player2, hm);
lookPoker("玩家3", player3, hm);
lookPoker("底牌", diPai, hm);}
public static void lookPoker(String name,TreeSet<Integer> ts,
HashMap<Integer, String> hm) {
System.out.print(name+"的牌是:");
//遍历TreeSet集合获取到每一个编号
for(Integer key :ts) {
//获取到编号,通过编号找牌(在HashMap中找)
String value = hm.get(key) ;
System.out.print(value+" ");
}
System.out.println();
}
}
以上是关于模拟斗地主的主要内容,如果未能解决你的问题,请参考以下文章