java斗地主随机发牌_Java 简单实现斗地主创建牌组与随机发牌、看牌

今天闲着无聊,用基础的随机数,写一个简单的斗地主发牌,给需要用到的同学做一个参考。

package com.linlx.Individual.service;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import java.util.TreeSet;

public class GameTest {

public static void main(String[] args) {

GameTest a = new GameTest();

a.createCards();

}

/**

* createCards(创建牌池)

* void

* @exception

* @since 1.0.0

*/

public void createCards(){

//创建牌池集合

List cardsList = new ArrayList<>();

//生成各个花色牌组

for (int i = 0; i <= 4; i++) {

switch (i) {

case 0:

addCardsList(":spades:",13,cardsList);

break;

case 1:

addCardsList(":clubs:",13,cardsList);

break;

case 2:

addCardsList(":hearts:",13,cardsList);

break;

case 3:

addCardsList("◇",13,cardsList);

break;

default:

cardsList.add("大王");

cardsList.add("小王");

break;

}

}

/**

* 以下部分为显示牌组,可要可不要

* */

System.out.println("牌组长度:"+cardsList.size());

Iterator it = cardsList.iterator();

System.out.print("牌池:");

while (it.hasNext()) {

System.out.print(it.next()+" ");

}

//调用发牌方法

giveOutCards(cardsList);

}

/**

* addCardsList(生成各个花色牌组)

* @param key

* @param len

* @param cardsList

* void

* @exception

* @since 1.0.0

*/

public void addCardsList(String key,int len,List cardsList){

//开始生成花色牌组,并判断生成A,J,Q,K等特殊牌组

for (int j = 0; j < len; j++) {

switch (j) {

case 0:

cardsList.add(key+"A");

break;

case 10:

cardsList.add(key+"J");

break;

case 11:

cardsList.add(key+"Q");

break;

case 12:

cardsList.add(key+"K");

break;

default:

cardsList.add(key+(j+1));

break;

}

}

}

/**

* giveOutCards(发牌)

* @param cardsList

* void

* @exception

* @since 1.0.0

*/

public void giveOutCards(List cardsList){

//创建玩家牌池集合

List> gamePlayerCards = new ArrayList<>();

//循环出三个玩家牌组

for (int i = 0; i < 3; i++) {

//创建玩家牌组

Set setCar = new HashSet<>();

//开始循环没法发牌十七张

for (int j = 0; j < 17; j++) {

boolean flag = false;

while (flag == false) {

//生成一个从54-1的随机数,并减1,稍后作为获取牌池集合的下标

int index = (int)Math.round(Math.random()*cardsList.size()+1)-1;

//判断该次想要获取的牌是否是是已被发出

if(index < cardsList.size()&&cardsList.get(index)!=null){

//将拿到的牌加入至玩家牌组

setCar.add(cardsList.get(index));

//删除牌池中的牌

cardsList.remove(index);

//赋值,跳出循环

flag = true;

}

}

}

//添加至玩家牌池

gamePlayerCards.add(setCar);

}

/**

* 以下部分为显示牌组,可要可不要

* */

System.out.print("\n地主牌:");

for (String card : cardsList) {

System.out.print(card+" ");

}

System.out.println();

for (Set cards : gamePlayerCards) {

Iterator it = cards.iterator();

while (it.hasNext()) {

System.out.print(it.next()+" ");

}

System.out.println(" 牌组长度:"+cards.size());

}

}

}

输出:

牌池::spades:A :spades:2 :spades:3 :spades:4 :spades:5 :spades:6 :spades:7 :spades:8 :spades:9 :spades:10 :spades:J :spades:Q :spades:K :clubs:A :clubs:2 :clubs:3 :clubs:4 :clubs:5 :clubs:6 :clubs:7 :clubs:8 :clubs:9 :clubs:10 :clubs:J :clubs:Q :clubs:K :hearts:A :hearts:2 :hearts:3 :hearts:4 :hearts:5 :hearts:6 :hearts:7 :hearts:8 :hearts:9 :hearts:10 :hearts:J :hearts:Q :hearts:K ◇A ◇2 ◇3 ◇4 ◇5 ◇6 ◇7 ◇8 ◇9 ◇10 ◇J ◇Q ◇K 大王 小王

地主牌::spades:Q :clubs:5 ◇10

:hearts:J ◇4 :clubs:2 :clubs:K ◇Q :spades:J :spades:10 ◇2 :hearts:9 :clubs:8 :spades:6 ◇7 :hearts:5 :hearts:7 :spades:3 :hearts:A :spades:8  牌组长度:17

:clubs:J :spades:A ◇J :hearts:Q :hearts:2 :clubs:Q :hearts:3 ◇6 :spades:K :spades:4 :clubs:7 ◇8 :clubs:4 :spades:2 :clubs:6 :clubs:A :spades:9  牌组长度:17

◇K :hearts:K ◇3 ◇5 :hearts:4 大王 :spades:5 :clubs:9 :clubs:10 :spades:7 :hearts:10 :clubs:3 :hearts:6 ◇9 :hearts:8 小王 ◇A  牌组长度:17

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值