近来无事,打算重学Java SE 学到了集合,照着网上做了一个斗地主实例,直接上代码,各位看官请欣赏:
package cn.gather;
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当中
poker.add("大王");
poker.add("小王");
//将花色数组和数字数组组合成52张牌
for (String color:colors) {
for (String number:numbers) {
poker.add(color+number);
}
}
//System.out.println(poker);
/**
* 2.洗牌
* 使用集合工具类Collection中的方法
* static void shuffle(list<?> list)使用默认的方法进行乱序存放
*/
Collections.shuffle(poker);
//System.out.println(poker);
/**
* 3.发牌
*/
//定义四个集合,分别是存放三个人的牌和底牌
ArrayList<String> player01 = new ArrayList<>();
ArrayList<String> player02 = new ArrayList<>();
ArrayList<String> player03 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
/**
* 遍历集合获取每一张牌
* 然后根据i模除3等于多少发到对应人的手里
* 如果i>=51,则把最后三张发给底牌,因为是从0开始的所以是51而不是52,一共是到53
*/
for (int i = 0; i < poker.size(); i++) {
String s = poker.get(i);
if (i>=51){
dipai.add(s);
}else if (i%3==0){
player01.add(s);
}else if (i%3==1){
player02.add(s);
}else if (i%3==2){
player03.add(s);
}
}
/**
* 4.看牌
*/
System.out.println(player01);
System.out.println(player02);
System.out.println(player03);
System.out.println(dipai);
}
}
结果每次都不一样,如图: