Java--通过集合代码来解释斗地主发牌过程

你打过牌吗?
你想知道系统是如何把牌随机的分配给玩家的吗?
今天的代码将介绍(以斗地主为例)系统的发牌系统的·代码内容
接下来,去探寻以下吧!!!!!

一:当你什么都没有时,想打牌时要干什么?(买牌)

牌是由花色和数字和大小王组成

第1:创建两个数组

花色数组

String [] aa = {"♥","♣","♦","♠"};   //为了方便观看用图来代替

数字数组

String [] bb = {"3","4","5","6","7","8","9","10","J","Q","K","A","2",};

第2:通过创建两种集合来存放牌和牌的位置

	Map< Integer, String> pokes = new HashMap();   //存放牌
		List<Integer> liss = new ArrayList<Integer>();   //存放后面要用牌的位置

第3:通过遍历的方法来把牌的花色和数字结合在一起,并且把牌存放在集合中 (遍历是通过增强for的方法去遍历打印)

int sum=1;     //这里定义的sum是最后输出牌做准备
		for (String b1:bb) {
			for(String a1:aa) {
				String pai=a1+b1;
				//System.out.println(pai);
				pokes.put(sum, pai);
				liss.add(sum);
				sum++;
			}
		}

第4:将大小王两张牌放进集合中

pokes.put(sum, "小王");
		liss.add(sum++);
		pokes.put(sum, "大王");
		liss.add(sum);

*这就是买牌的具体过程,接下来将输出打印和买牌的完整代码 *

Map< Integer, String> pokes = new HashMap();
		List<Integer> liss = new ArrayList<Integer>();
		String [] aa = {"♥","♣","♦","♠"};
		String [] bb = {"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
		int sum=1;
		for (String b1:bb) {
			for(String a1:aa) {
				String pai=a1+b1;
				//System.out.println(pai);
				pokes.put(sum, pai);
				liss.add(sum);
				sum++;
			}
		}
		pokes.put(sum, "小王");
		liss.add(sum++);
		pokes.put(sum, "大王");
		liss.add(sum);
		
		
		System.out.println("牌"+pokes);
		System.out.println("位置"+liss);
		//输出两个集合的结果为:
		//牌{1=♥3, 2=♣3, 3=♦3, 4=♠3, 5=♥4, 6=♣4, 7=♦4, 8=♠4, 9=♥5, 10=♣5, 11=♦5, 12=♠5, 13=♥6, 14=♣6, 15=♦6, 16=♠6, 17=♥7, 18=♣7, 	      19=♦7, 20=♠7, 21=♥8, 22=♣8, 23=♦8, 24=♠8, 25=♥9, 26=♣9, 27=♦9, 28=♠9, 29=♥10, 30=♣10, 31=♦10, 32=♠10, 33=♥J, 34=♣J, 35=♦J, 36=♠J, 37=♥Q, 38=♣Q, 39=♦Q, 40=♠Q, 41=♥K, 42=♣K, 43=♦K, 44=♠K, 45=♥A, 46=♣A, 47=♦A, 48=♠A, 49=♥2, 50=♣2, 51=♦2, 52=♠2, 53=小王, 54=大王}
		
//位置[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54]

二:当买完牌时要进行发牌。

第1:斗地主有三个玩家和底牌,所以需要四个集合来存放随机产生的数

		List<Integer> ma = new ArrayList<Integer>();
		List<Integer> yun = new ArrayList<Integer>();
		List<Integer> cai = new ArrayList<Integer>();
		List<Integer> di = new ArrayList<Integer>();

第2:发牌都是随机的,随机进行发牌

Collections.shuffle(liss); //通过Collextion工具类来随机产生牌

第3:把打乱的牌序,分发给三个玩家,并且留下三张底牌。

		for(int i=0;i<liss.size();i++) {
			 Integer fa = liss.get(i);
			System.out.println(fa);
			
			if(i>=liss.size()-3) {
				di.add(fa);
				
			}
			else if(i % 3==0) {
				ma.add(fa);
			}
			else if(i % 3==1) {
				yun.add(fa);
			}
			else if(i % 3==2) {
				cai.add(fa);
			}
		}

***这就是发牌的具体过程,接下来将输出打印和发牌的完整代码 ***

		List<Integer> ma = new ArrayList<Integer>();
		List<Integer> yun = new ArrayList<Integer>();
		List<Integer> cai = new ArrayList<Integer>();
		List<Integer> di = new ArrayList<Integer>();
		Collections.shuffle(liss);
		System.out.println("洗好牌的的顺序"+liss);
		for(int i=0;i<liss.size();i++) {
			 Integer fa = liss.get(i);
			System.out.println(fa);
			
			if(i>=liss.size()-3) {
				di.add(fa);
				
			}
			else if(i % 3==0) {
				ma.add(fa);
			}
			else if(i % 3==1) {
				yun.add(fa);
			}
			else if(i % 3==2) {
				cai.add(fa);
			}
		}
		System.out.println("ma的牌:"+ma);
		System.out.println("yun的牌:"+yun);
		System.out.println("cai的牌:"+cai);
		System.out.println("底牌:"+di);
		//输出结果
		//ma的牌:[41, 2, 34, 27, 54, 43, 13, 33, 21, 40, 20, 44, 49, 16, 51, 29, 3]
		//yun的牌:[45, 36, 47, 15, 22, 26, 31, 35, 10, 38, 7, 39, 4, 9, 1, 52, 46]
		//cai的牌:[28, 25, 17, 24, 30, 42, 12, 48, 8, 37, 50, 53, 6, 23, 11, 5, 32]
		//底牌:[18, 14, 19]

三:以上的代码输出的都是数字,接下来进行输出打印牌

完整代码,在进行讲解

public static String pritepokes(List<Integer> nn,Map<Integer, String> mm) {    //使用方法来进行转换
		Collections.sort(nn);  //升序:为了输出的牌是从小到大的。
		StringBuffer pp = new StringBuffer();  //创建一个空列表,用来存放牌

		for(Integer nnn:nn) {    //这里是使用增强for的方法进行遍历打印
			String poke = mm.get(nnn);  //把对应的位置换成牌(把List集合 转换成对应 Map集合value值
			pp.append(poke+" ");        //将获得的值添加StringBuffer创建的空列表
		}String str = pp.toString();     //方法返回的是String 进行转换
			return str;
		
	}

**下面将展示出完整代码和完整的输出结果: **

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;





public class 买牌 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map< Integer, String> pokes = new HashMap();
		List<Integer> liss = new ArrayList<Integer>();
		String [] aa = {"♥","♣","♦","♠"};
		String [] bb = {"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
		int sum=1;
		for (String b1:bb) {
			for(String a1:aa) {
				String pai=a1+b1;
				//System.out.println(pai);
				pokes.put(sum, pai);
				liss.add(sum);
				sum++;
			}
		}
		pokes.put(sum, "小王");
		liss.add(sum++);
		pokes.put(sum, "大王");
		liss.add(sum);
		
		
		System.out.println("牌"+pokes);
		System.out.println("位置"+liss);
		
		//发牌
		List<Integer> ma = new ArrayList<Integer>();
		List<Integer> yun = new ArrayList<Integer>();
		List<Integer> cai = new ArrayList<Integer>();
		List<Integer> di = new ArrayList<Integer>();
		Collections.shuffle(liss);
		System.out.println("洗好牌的的顺序"+liss);
		for(int i=0;i<liss.size();i++) {
			 Integer fa = liss.get(i);
			System.out.println(fa);
			
			if(i>=liss.size()-3) {
				di.add(fa);
				
			}
			else if(i % 3==0) {
				ma.add(fa);
			}
			else if(i % 3==1) {
				yun.add(fa);
			}
			else if(i % 3==2) {
				cai.add(fa);
			}
		}
		System.out.println("ma的牌:"+ma);
		System.out.println("yun的牌:"+yun);
		System.out.println("cai的牌:"+cai);
		System.out.println("底牌:"+di);
		System.out.println("ma的牌:"+pritepokes(ma, pokes));
		System.out.println("yun的牌:"+pritepokes(yun, pokes));
		System.out.println("cai的牌:"+pritepokes(cai, pokes));
		System.out.println("底牌:"+pritepokes(di, pokes));
	}

	
	public static String pritepokes(List<Integer> nn,Map<Integer, String> mm) {
		Collections.sort(nn);  //升序
		StringBuffer pp = new StringBuffer();

		for(Integer nnn:nn) {
			String poke = mm.get(nnn);
			pp.append(poke+" ");
		}String str = pp.toString();
			return str;
		
	}
}

输出结果:
牌{1=♥3, 2=♣3, 3=♦3, 4=♠3, 5=♥4, 6=♣4, 7=♦4, 8=♠4, 9=♥5, 10=♣5, 11=♦5, 12=♠5, 13=♥6, 14=♣6, 15=♦6, 16=♠6, 17=♥7, 18=♣7, 19=♦7, 20=♠7, 21=♥8, 22=♣8, 23=♦8, 24=♠8, 25=♥9, 26=♣9, 27=♦9, 28=♠9, 29=♥10, 30=♣10, 31=♦10, 32=♠10, 33=♥J, 34=♣J, 35=♦J, 36=♠J, 37=♥Q, 38=♣Q, 39=♦Q, 40=♠Q, 41=♥K, 42=♣K, 43=♦K, 44=♠K, 45=♥A, 46=♣A, 47=♦A, 48=♠A, 49=♥2, 50=♣2, 51=♦2, 52=♠2, 53=小王, 54=大王}
位置[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54]
洗好牌的的顺序[54, 48, 29, 52, 49, 16, 5, 26, 43, 27, 21, 47, 32, 12, 45, 7, 2, 51, 20, 14, 22, 50, 6, 4, 28, 34, 41, 9, 31, 35, 36, 11, 53, 40, 46, 42, 10, 17, 15, 25, 13, 39, 1, 38, 8, 3, 23, 19, 18, 33, 37, 24, 44, 30]
54
48
29
52
49
16
5
26
43
27
21
47
32
12
45
7
2
51
20
14
22
50
6
4
28
34
41
9
31
35
36
11
53
40
46
42
10
17
15
25
13
39
1
38
8
3
23
19
18
33
37
24
44
30
ma的牌:[54, 52, 5, 27, 32, 7, 20, 50, 28, 9, 36, 40, 10, 25, 1, 3, 18]
yun的牌:[48, 49, 26, 21, 12, 2, 14, 6, 34, 31, 11, 46, 17, 13, 38, 23, 33]
cai的牌:[29, 16, 43, 47, 45, 51, 22, 4, 41, 35, 53, 42, 15, 39, 8, 19, 37]
底牌:[24, 44, 30]
ma的牌:♥3 ♦3 ♥4 ♦4 ♥5 ♣5 ♣7 ♠7 ♥9 ♦9 ♠9 ♠10 ♠J ♠Q ♣2 ♠2 大王
yun的牌:♣3 ♣4 ♦5 ♠5 ♥6 ♣6 ♥7 ♥8 ♦8 ♣9 ♦10 ♥J ♣J ♣Q ♣A ♠A ♥2
cai的牌:♠3 ♠4 ♦6 ♠6 ♦7 ♣8 ♥10 ♦J ♥Q ♦Q ♥K ♣K ♦K ♥A ♦A ♦2 小王
底牌:♠8 ♣10 ♠K

**

这就是完整的讲解过程,如果还可以,留个什么都行。 感谢

**

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想睡醒的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值