斗地主发牌小案例

模拟三人斗地主发牌小案例,具体用到了基础语法中的数组、数组集合、循环遍历语句、以及最重要的Collections里面的shuffle方法,该方法的作用是指定的随机源对指定的列表进行置换,所有置换发生的可能性都是相等的,假定随机源是公平的;它利于我们洗牌这一环节的使用。具体实现看以下代码:

package com.qx;
import java.util.ArrayList;
import java.util.Collections;
/*
 *模拟三人斗地主发牌案例
 * 具体规则:
 * 1. 组装54张扑克牌
 * 2. 将54张牌顺序打乱
 * 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌
 * 4. 查看三人各自手中的牌、底牌
 */
public class DouDiZhuDemo {
	public static void main(String[] args) {		
		//定义数组并列出一副牌具哪些牌
		String[] arr = { "♠", "♥", "♣", "♦" };		
		String[] arr2 = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};	

		//定义数组集合装这副牌
		ArrayList box = new ArrayList();	

		//循环遍历添加每张牌
		for (int i = 0; i < arr.length; i++) {
			//获取每一个花色
			for (int j = 0; j < arr2.length; j++) {
				//获取每一个数
				box.add(arr[i] + arr2[j]);
			}
		}
		
		//独立添加大小王
		box.add("大王");
		box.add("小王");

		//调用Collections进行洗牌
		Collections.shuffle(box);		

		//定义数组集合,装三个玩家的牌
		ArrayList 林志玲 = new ArrayList();
		ArrayList 刘亦菲 = new ArrayList();
		ArrayList 林允儿 = new ArrayList();

		//留三张底牌给地主后进行发牌
		for (int i = 0; i < box.size() - 3; i++) {
			/*
			 * 找规律
			 * i = 0;i % 3 = 0; 
			 * i = 1;i % 3 = 1; 
			 * i = 2;i % 3 = 2; 
			 * i = 3;i % 3 = 0;
			 * i = 4;i % 4 = 1;
			 * i = 5;i % 5 = 2;
			 */
			if (i % 3 == 0) {
				林志玲.add(box.get(i));
			} 
			else if (i % 3 == 1) {
				刘亦菲.add(box.get(i));
			} 
			else if (i % 3 == 2) {
				林允儿.add(box.get(i));
			}
		}

		//输出每位玩家的拿到的牌
		System.out.println("林志玲:" + 林志玲);
		System.out.println("刘亦菲:" + 刘亦菲);
		System.out.println("林允儿:" + 林允儿);

		//遍历数组输出底牌
		System.out.println("三张底牌分别为:");		
		for (int i = box.size() - 3; i < box.size(); i++) {
			System.out.println(box.get(i));
		}
		
	}	
}

效果截图:
斗地主发牌小案例_第1张图片

你可能感兴趣的:(Java)