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