干货|Java集合实现斗地主洗牌发牌
程序员文章站
2022-07-12 09:08:21
...
案列分析
准备4种花色牌与13种数值牌循环嵌套为52张牌,加两种特殊牌大王小王牌共54种,再进行洗牌发牌
文章目录
一、思路分析
思路
1.准备牌
准备一个集合存放所有牌
准备两个数组分别存取扑克牌的4种花色和13种数值
进行嵌套组合形成52张牌加到所有牌中
把特殊牌(大王,小王)加到所有牌集合*54张牌
2.洗牌
使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换
3.发牌
创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌
总牌数先取三张放到地主牌中
依次给玩家发牌
随机产生个地主
4.看牌
输出打印玩家和地主
二、准备牌
1.准备一个集合存放所有牌
ArrayList<String> sum= new ArrayList<>();//存所有牌号
2.准备两个数组分别存取扑克牌的4种花色和13种数值
//定义两个数组存花色和牌数
String[] colors = {"♠","♥","♣","♦"};
String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
3.进行嵌套组合形成52张牌加到所有牌中
//增强for循环嵌套遍历两个数组,组装52张牌
for (String color : colors) {
for (String number : numbers) {
sum.add(color+number);
}
}
4.把特殊牌(大王,小王)加到所有牌集合*54张牌
//添加大王小王到集合当中
sum.add("大王");
sum.add("小王");
三、洗牌
1.使用集合的工具类Collections中的方法使用默认随机源对指定列表进行置换
// 2.洗牌
public void Shffle(ArrayList sum)
{
//使用集合的工具类Collections中的方法
//static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
Collections.shuffle(sum);
}
四、发牌
1.创建4个集合分别存取 玩家1 玩家2 玩家3 地主牌
ArrayList<String> Player1 = new ArrayList<>();//玩家1
ArrayList<String> Player2 = new ArrayList<>();//玩家2
ArrayList<String> Player3 = new ArrayList<>();//玩家3
ArrayList<String> Dipai = new ArrayList<>();//地主牌
2. 总牌数先取三张放到地主牌中和依次发牌玩家
for (int i = 0; i < sum.size(); i++) {
//获取每一张牌
String p = (String) sum.get(i);
//轮流发牌
if (i >= 51) {
//给地主牌发牌
Dipai.add(p);
}
//因为i%3有三种结果就可以一张一张的给玩家发牌
else if (i % 3 == 0) {
//给玩家1发牌
Player1.add(p);
} else if (i % 3 == 1) {
//给玩家2发牌
Player2.add(p);
} else if (i % 3 == 2) {
//给玩家3发牌
Player3.add(p);
}
}
3.随机产生个地主
Random random = new Random();//产生随机数
int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
System.out.println("本局地主为" + a + "号玩家");//选出地主
给地主发地主牌
//判断地主是谁然后把地主牌给他
if(a==1)
{ //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
if(a==2)
{
Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
if(a==3)
{
Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
}
五、看牌
//4.看牌
public void show() {
System.out.println("1号玩家" +Player1);
System.out.println("2号玩家" + Player2);
System.out.println("3号玩家" + Player3);
System.out.println("地主牌为"+ Dipai);
}
六、运行效果
七、代码总和
斗地主案列主函数
import java.util.ArrayList;
public class DouDiZhu_PRO {
public static void main(String[] args) {
ArrayList<String> sum= new ArrayList<>();//存所有牌号
DouDiZhuPRO is = new DouDiZhuPRO();
// 1.准备牌
is.prepare(sum);
// 2.洗牌
is.Shffle(sum);
// 3.发牌
is.Deal(sum);
// 4.看牌
is.show();
}
}
斗地主案列的类
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class DouDiZhuPRO {
private ArrayList sum; //存放所有牌的总集合
ArrayList<String> Player1 = new ArrayList<>();//玩家1
ArrayList<String> Player2 = new ArrayList<>();//玩家2
ArrayList<String> Player3 = new ArrayList<>();//玩家3
ArrayList<String> Dipai = new ArrayList<>();//地主牌
//1.准备牌
public void prepare(ArrayList sum)
{
//定义两个数组存花色和牌数
String[] colors = {"♠","♥","♣","♦"};
String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
//增强for循环嵌套遍历两个数组,组装52张牌
for (String color : colors) {
for (String number : numbers) {
sum.add(color+number);
}
}
//添加大王小王到集合当中
sum.add("大王");
sum.add("小王");
}
// 2.洗牌
public void Shffle(ArrayList sum)
{
//使用集合的工具类Collections中的方法
//static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
Collections.shuffle(sum);
}
// 3.发牌
public void Deal(ArrayList sum) {
Random random = new Random();//产生随机数
int a = random.nextInt(3) + 1;//控制随机数范围为 1,2,3
System.out.println("本局地主为" + a + "号玩家");//选出地主
for (int i = 0; i < sum.size(); i++) {
//获取每一张牌
String p = (String) sum.get(i);
//轮流发牌
if (i >= 51) {
//给地主牌发牌
Dipai.add(p);
}
//因为i%3有三种结果就可以一张一张的给玩家发牌
else if (i % 3 == 0) {
//给玩家1发牌
Player1.add(p);
} else if (i % 3 == 1) {
//给玩家2发牌
Player2.add(p);
} else if (i % 3 == 2) {
//给玩家3发牌
Player3.add(p);
}
}
//判断随机产生的地主是谁然后把地主牌给他
if(a==1)
{ //使用Collections.addAll方法 把集合Player1里面分别添加集合dipai里面的1,2,3元素
Collections.addAll(Player1, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
if(a==2)
{
Collections.addAll(Player2, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
if(a==3)
{
Collections.addAll(Player3, Dipai.get(0), Dipai.get(1), Dipai.get(2));
}
}
//4.看牌
public void show() {
System.out.println("1号玩家" +Player1);
System.out.println("2号玩家" + Player2);
System.out.println("3号玩家" + Player3);
System.out.println("地主牌为"+ Dipai);
}
}
上一篇: 算法——打家劫舍问题