大致逻辑:
需要数据池保存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