Java实现模拟斗地主发牌

分析

1.创建一个HashMap集合(因为牌的编号和牌的内容是一对键值对,所以用HashMap集合)

  • 2.创建一个ArrayList集合(将每一张牌所对应的编号存储起来,作为HashMap键值对里面的键)
  • 3.创建牌(包括花色,点数)和编号(index)
  • 4.从0开始向ArrayList里面存储编号,并存储对应的牌,同时向ArrayList里存储编号
  • 5.洗牌(洗牌时洗的是编号)
  • 6.发牌(发牌发的也是编号,为了保证排序,用TreeSet集合接收)
  • 7.看牌(遍历TreeMap集合,获取编号,到HashMap里去找相应的牌)

代码实现

import java.util.ArrayList;
import java.util.TreeSet;
import java.util.Collections;
import java.util.HashMap;

public class DouDiZhuLicensing {
   public static void main(String[] args) {
	HashMap<Integer, String> hs=new HashMap<Integer, String>();
	//创建牌盒
	ArrayList<Integer> array=new ArrayList<Integer>();
	
	//创建花色数组和点数数组
	String color[]= {"♥","♠","♣","♦"};
	String num[]= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
	
	//从0开始往HashMap里面存储编号,并存储对应的牌,同时向ArrayList里面存储编号即可
	
	//创建编号索引
	int index=0;
	
	//向HashMap里存牌
	for(String number:num) {
		for(String colors:color) {
			String card=colors.concat(number);
		   hs.put(index, card);
		   array.add(index);
		   index++;
		}
	}
	hs.put(index, "小王");
	array.add(index);
	index++;
	hs.put(index, "大王");
	array.add(index);
	
	//洗牌(用shuffle方法随机array里的编号)
	Collections.shuffle(array);
	
	//发牌,创建TreeSet集合
	TreeSet<Integer> player1=new TreeSet<Integer>();
	TreeSet<Integer> player2=new TreeSet<Integer>();
	TreeSet<Integer> player3=new TreeSet<Integer>();
	TreeSet<Integer> dipai=new TreeSet<Integer>();
	for(int x=0;x<array.size();x++) {
		if(x>=array.size()-3) {
			dipai.add(array.get(x));
		}else if(x%3==1) {
			player1.add(array.get(x));
		}else if(x%3==2) {
			player2.add(array.get(x));
		}else if(x%3==0) {
			player3.add(array.get(x));
		}
	}
	LookCard("地主", player1, hs);
	LookCard("农民1", player2, hs);
	LookCard("农名2", player3, hs);
	LookCard("底牌", dipai, hs);
}
   //看牌功能(根据TreeSet里存的牌的编号去HashMap里找相应的牌)
   public static void LookCard(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm) {
	   System.out.print(name+"的牌是 ");
	   for(Integer key:ts) {
		   String value=hm.get(key);
		   System.out.print(value+" ");
	   }
	   System.out.println();
   }
}

运行结果

在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值