大数据之JAVA基础(十七):集合--模拟斗地主洗牌和发牌

一、案例介绍
按照斗地主的规则,完成洗牌发牌的动作。
 
具体规则:
1. 组装54张扑克牌
2. 将54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
  •  手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

二、案例需求分析
  • 准备一副扑克牌,使用Map,完成数字与字符串的映射
  • 洗牌和发牌,操作的都是Map集合的键
  • 3张底牌放在一个ArrayList<String>
  • 发牌就是发数字
  • 看牌:就是遍历集合,查询键值对

三、实现代码步骤
  • 首先修改eclips的默认编码为UTF-8


  • 代码展示
package stu.demo1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Set;

/** 
 * @author  Mr.GE 
 * @date 创建时间:2018-4-2 下午7:09:22 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
public class PokerCards {
	
	public static void main(String[] args) {
		
		//准备花色
		ArrayList<String> color = new ArrayList<String>();
		color.add("♠");
		color.add("♥");
		color.add("♣");
		color.add("♦");
		
		//准备数字
		ArrayList<String> number = new ArrayList<String>();		
		Collections.addAll(number,"3","4","5","6","7","8","9","10","J","Q","K","A","2");
		
		//准备扑克牌序号
		//ArrayList<String> 
		
		//准备扑克牌
		LinkedHashMap <Integer,String> poker = new LinkedHashMap<Integer, String>();
		
		int index = 0;
		
		for (String num : number) {
			
			for (String cor : color) {				
				poker.put(index++, cor+num);
			}
		}
		
		//增加大小王
		poker.put(index++, "小王");
		poker.put(index++, "大王");
	
		//数牌
		Set<Integer> str = poker.keySet();
		
		for (Integer integer : str) {
			System.out.println(integer+poker.get(integer) );
		}
		
		//洗牌
		ArrayList<Integer> array = new ArrayList<Integer>();
		for (int i = 0; i < 54; i++) {
			array.add(i);
		}
		
		Collections.shuffle(array);
		
		//准备玩家
		ArrayList<String> player1 = new ArrayList<String>();
		ArrayList<String> player2 = new ArrayList<String>();
		ArrayList<String> player3 = new ArrayList<String>();
		ArrayList<String> dipai = new ArrayList<String>();
		
		//发牌
		for (int i = 0; i < array.size(); i++) {
			if(i>50)
			{
				dipai.add(poker.get(array.get(i)));
			}
			else 
			{
				if(i % 3 == 0)
				{
					player1.add(poker.get(array.get(i)));
				}
				else if(i % 3 == 1)
				{
					player2.add(poker.get(array.get(i)));
				}
				else if(i % 3 == 2)
				{
					player3.add(poker.get(array.get(i)));
				}
			}
			
		}
		
		//看牌
		System.out.print("底牌");
		for (String string : dipai) {
			System.out.print(string);
		}
		System.out.println();
		System.out.println("玩家1");
		for (String string : player1) {
			System.out.print(string);
		}
		System.out.println();
		System.out.println("玩家2");
		for (String string : player2) {
			System.out.print(string);
		}
		System.out.println();
		System.out.println("玩家3");
		for (String string : player3) {
			System.out.print(string);
		}
		System.out.println();
		
		
	}

}









全文完!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值