斗地主综合案例
一、分析
1、准备牌:54张牌存储到一个集合中
- 特殊牌:大王、小王
- 其他52张牌:
- 定义一个数组/集合,存储四种花色:♥️、♠️、♦️、♣️
- 定义一个数组/集合,存储13种序号:2,A,K,……3
- 循环遍历嵌套两个数组/集合,组装52张牌
- ♥️2,♠️2,♦️2,♣️2 ……
2、洗牌
使用集合工具类Collections的方法
static void shuffle(List<?> list) 使用指定的随机源对指定列表进行置换
会随机的打乱集合中元素的顺序
3、发牌
- 要求:1人17张牌,剩余三张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3
- 定义四个集合,存储3个玩家的牌和底牌
- 索引%3,有三个值(0,1,2),给三个人发票
- 索引≥51,该底牌发牌
4、看牌
直接打印集合,遍历存储玩家和底牌的集合
二、代码
package com.s0cket.day13.demo04.Test;
import java.util.ArrayList;
import java.util.Collections;
/*
1、准备牌
2、洗牌
3、发票
4、看牌
*/
public class Doudizhu {
public static void main(String[] args) {
// 1、准备牌
// 定义一个存储54张牌的ArrayList集合,泛型使用String
ArrayList<String> poker = new ArrayList<>();
// 定义两个数组,一个数组存储牌的花色,一个数组存储牌的序号
String[] colors = {"♥️", "♠️", "♦️", "♣️"};
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
// 先把大王小王存储到集合中
poker.add("大王");
poker.add("小王");
// 循环嵌套两个数组,组装52张牌
for(String number : numbers) {
for(String color : colors) {
// 把组装好的牌装到poker集合中
poker.add(color + number);
}
}
// 2、洗牌
// 使用Collections工具类里面的shuffle方法
Collections.shuffle(poker);
// System.out.println(poker);
// 3、发牌
// 定义四个集合,给三个人轮流发牌,存储在三个不同的集合中,另外一个集合存储底牌
ArrayList<String> one = new ArrayList<>();
ArrayList<String> two = new ArrayList<>();
ArrayList<String> three = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
// 用poker集合的索引遍历
for (int i = 0; i < poker.size(); i++) {
String p = poker.get(i);
if(i >= 51) {
diPai.add(p);
} else if(i % 3 == 0) {
one.add(p);
} else if(i % 3 == 1) {
two.add(p);
} else if(i % 3 == 2) {
three.add(p);
}
}
// 4、看牌
System.out.println(one);
System.out.println(two);
System.out.println(three);
System.out.println(diPai);
}
}