Java集合框架篇-74-集合练习之模拟三人斗地主

       上一篇,我们学习了Collections这个集合工具类,其中有一个方法是随机置换元素位置。关于随机置换位置,生活中,在玩扑克牌中就有洗牌这个功能,这个过程就是随机置换。这篇,我们来写一个模拟三人斗地主的集合编程练习题。

1.分析步骤

1)需要买一副扑克牌,我们自己想办法把54张牌存储到集合中

2)洗牌,在Collections这个类下有shuffle()方法支持洗牌

3)发牌,注意留三张底牌,三个人没人拿17张,每个人牌需要放集合存储

4)看牌,直接三个人和底牌的集合都打印出来。


2.代码实现

下面需要注意数组嵌套遍历拼接52张扑克牌的过程和三人发牌的机制。

package collections;

import java.util.ArrayList;
import java.util.Collections;

public class Demo1_Collections {

	public static void main(String[] args) {
		//1.构造一副扑克牌
		//先利用两个字符数组,存储52张牌,大小王后面想办法存储到集合
		String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
		String[] paise = {"红桃","黑桃","方片","梅花"};
		
		ArrayList poker = new ArrayList<>();
		for(int i = 0; i < paise.length ; i++) {
			
			for(int j=0 ; j < num.length ; j++) {
				poker.add(paise[i].concat(num[j]));
			}
		}
		
		poker.add("大王");
		poker.add("小王");
		//System.out.println(list);
		//System.out.println(list.size());
		
		//2.洗牌
		Collections.shuffle(poker);
		System.out.println(poker);
		
		//3.发牌
		ArrayList zhangsan = new ArrayList<>();
		ArrayList lisi = new ArrayList<>();
		ArrayList wangwu = new ArrayList<>();
		ArrayList dipai = new ArrayList<>();
		
		for(int i = 0; i  < poker.size(); i++) {
			
			if( i >= poker.size() - 3) {
				dipai.add(poker.get(i));  //最后三张牌放入dipai集合
			}else if( i % 3 == 0) {
				zhangsan.add(poker.get(i));
			}else if (i % 3 == 1) {
				lisi.add(poker.get(i));
			}else {
				wangwu.add(poker.get(i));
			}
		}
		
		// 4.看每个人的牌
		System.out.println("--------------------------");
		System.out.println("zhangsan:"+zhangsan);
		System.out.println("lisi:"+lisi);
		System.out.println("wangwu:"+wangwu);
		System.out.println("dipai:"+dipai);
		
	}

}

运行结果:

[方片7, 梅花3, 方片J, 红桃Q, 方片4, 方片3, 梅花8, 红桃4, 黑桃3, 黑桃K, 红桃6, 黑桃8, 梅花6, 方片9, 红桃2, 黑桃A, 方片2, 黑桃Q, 红桃9, 黑桃10, 红桃5, 梅花5, 黑桃4, 方片5, 黑桃J, 红桃J, 黑桃7, 大王, 红桃3, 红桃K, 方片A, 梅花K, 梅花J, 梅花9, 梅花A, 黑桃9, 黑桃2, 红桃7, 方片10, 红桃8, 梅花Q, 方片Q, 方片6, 方片8, 梅花7, 红桃10, 黑桃6, 梅花10, 梅花2, 小王, 黑桃5, 梅花4, 红桃A, 方片K]
--------------------------
zhangsan:[方片7, 红桃Q, 梅花8, 黑桃K, 梅花6, 黑桃A, 红桃9, 梅花5, 黑桃J, 大王, 方片A, 梅花9, 黑桃2, 红桃8, 方片6, 红桃10, 梅花2]
lisi:[梅花3, 方片4, 红桃4, 红桃6, 方片9, 方片2, 黑桃10, 黑桃4, 红桃J, 红桃3, 梅花K, 梅花A, 红桃7, 梅花Q, 方片8, 黑桃6, 小王]
wangwu:[方片J, 方片3, 黑桃3, 黑桃8, 红桃2, 黑桃Q, 红桃5, 方片5, 黑桃7, 红桃K, 梅花J, 黑桃9, 方片10, 方片Q, 梅花7, 梅花10, 黑桃5]
dipai:[梅花4, 红桃A, 方片K]
        这个结果看起来,很好玩,真的模仿了斗地主的过程。唯一的就是三个人看牌(斗地主中明牌)的时候,集合元素没有进行排序控制输出,例如张三牌应该3最小放左边,大王最大,放最右边。这样的排序机制,目前我们光使用ArrayList是模拟不出这个纸牌游戏的自动排序的功能。

你可能感兴趣的:(Java集合框架篇-74-集合练习之模拟三人斗地主)