斗地主综合案例
-
准备54张扑克,存储到一个集合中去
特殊牌:大王小王
其他52张牌:定义一个数组/集合,存储四种花色
定义一个数组/集合,存储13个序号
循环嵌套遍历两个数组/集合组装52张牌
-
洗牌
使用工具类Collection的方法:
static void shuffle(List<?> list)使用制定的随机源对固定列表进行置换
会随机打乱集合元素中的数据
-
发牌
要求一人17张牌,剩余三张作为底牌,一人一张轮流发牌,集合的索引(0~53)%3
定义四个集合,存储三个玩家的牌和底牌
索引%2有两个值(0,1)
索引%3有三个值(0,1,2)
索引>=51,该给底牌发牌
-
看牌
直接遍历结合,遍历存储玩家和底牌的集合
实现
package demo.demo10;
import java.util.ArrayList;
import java.util.Collections;
public class DouDiZhu {
public static void main(String[] args) {
//定义一个数组,用来存储54张牌
ArrayList<String> pocks = new ArrayList<String>();
//定义两个数组,一个用来存储花色,一个用来存储牌的序号
String[] color ={"红桃","黑桃","梅花","方块"};
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//先把大王小王存储到扑克中去
pocks.add("大王");
pocks.add("小王");
//循环遍历两个数组,组装52张牌
for (String number : numbers) {
for (String s : color) {
pocks.add(s+number);
}
}
// System.out.println(pocks);
//洗牌
Collections.shuffle(pocks);
// System.out.println(pocks);
//发牌
ArrayList<String> player01 = new ArrayList<String>();
ArrayList<String> player02 = new ArrayList<String>();
ArrayList<String> player03 = new ArrayList<String>();
ArrayList<String> diPai = new ArrayList<String>();
/*
遍历pocks集合,获取每一张牌
使用pocks集合的索引%3,给每个玩家轮流发牌
剩余三张牌给底牌
注意:
先判断底牌(i>=51),否则底牌发没了
*/
for (int i = 0; i < pocks.size(); i++) {
String p = pocks.get(i);
if(i>=51){
diPai.add(pocks.get(i));
}else if(i % 3==0){
player01.add(pocks.get(i));
}else if(i % 3==1){
player02.add(pocks.get(i));
}else {
player03.add(pocks.get(i));
}
}
//看牌
System.out.println("play01:"+player01);
System.out.println("play02:"+player02);
System.out.println("play03:"+player03);
System.out.println("diPai:"+diPai);
}
}