自动发牌

大致逻辑:

    需要数据池保存52张牌(去除大小王)

    需要有保存玩家的数组 String[] plays;

    需要有保存每个玩家的发的牌。

    需要的方法、设置玩家、初始化纸牌、发牌、打印信息。

package fly.java;
import java.util.ArrayList;

public class Pasteboard{
	private String[] dacs = {"黑桃", "红桃", "梅花", "方块"};
	private String[] nums = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
	private int maxSize = dacs.length * nums.length;
	private ArrayList<String> pasteboardAll = new ArrayList();
	private boolean randomGrant = true;//是否需要随机发牌
	private String[] plays;
	private ArrayList<String>[] sbPlays;
	private int pPosition;//发到的位置
	private int grantNum = 5;//每人发多少张
	

	/**
	* 初始化纸牌
	*/	
	private ArrayList<String> getPAll(){
		for(int i = 0; i < dacs.length; i++){
			for(int j = 0; j < nums.length; j++ )
				pasteboardAll.add(dacs[i] + nums[j]);	
		}
		return pasteboardAll;
	}
	
	public void setRandomGrant(boolean randomGrant){
		this.randomGrant = randomGrant;
	}

	public void setGrantNum(int grantNum){
		this.grantNum = grantNum;
	}

	/**
	* 设置玩家
	*/
	public void setPlays(String[] plays){
		this.plays = plays;
		sbPlays = new ArrayList[plays.length];
		for(int i = 0; i < sbPlays.length; i ++){ 
			sbPlays[i] =  new ArrayList<String>();
		}
		getPAll();
	}
	/**
	* 发牌
	*/
	public void sendP(){
			do{
				int p = plays.length;
				ArrayList<String> pChild = sbPlays[pPosition % plays.length];
				int rp = 0;
				if(randomGrant){
					rp = (int)(Math.random() * pasteboardAll.size());
				}
				pChild.add(pasteboardAll.remove(rp));
				pPosition ++;
			}while(pasteboardAll.size() + grantNum * plays.length > maxSize);
		}
	
	private String olderSendName(){
		return plays[pPosition - 1 % plays.length];
	}

	public void printPasteboard(){
		for(int i = 0; i < sbPlays.length; i++){
			ArrayList<String> list = sbPlays[i];
			System.out.println("name: " + plays[i]);
			StringBuffer sb = new StringBuffer();
			for(int j = 0; j < list.size(); j++){
				sb.append(list.get(j) + "、");
			}
			if(sb.length() > 0)
				sb.deleteCharAt(sb.length() - 1);
			System.out.println(sb.toString());
			
		}
	}
}
调试类
package fly.java;

public class ShowHand{
	public static void main(String [] args){
		String[] plays = {"小明", "小华", "小李", "小二哥", "小杨"};
		Pasteboard p = new Pasteboard();
		p.setPlays(plays);
		p.setRandomGrant(true);
		p.sendP();
		p.printPasteboard();
	
	}
	
}
cmd  cd到文件当前路径

编译命令 javac -d . Pasteboard.java

javac -d . ShowHand.java

运行 java fly.java.ShowHand

运行结果

name: 小明
红桃Q、梅花2、黑桃A、黑桃8、方块5
name: 小华
梅花5、方块7、梅花A、方块8、黑桃9
name: 小李
梅花4、黑桃6、红桃6、红桃J、红桃10
name: 小二哥
方块Q、红桃5、黑桃7、黑桃3、黑桃K
name: 小杨
红桃A、梅花6、梅花10、梅花7、方块4

猜你喜欢

转载自blog.csdn.net/ff_hh/article/details/80167903