斗牛程序,模拟四位玩家之间的玩牌过程。 2010年4月26日 下午1:57 • 软件开发 package game.bull;import java.io.*;import java.util.*;public class Dispatcher { /*玩家当前拥有的积分数*/ private long masterCredit; private long guest1Credit; private long guest2Credit; private long guest3Credit; /*用一个52个数的整形数组表示一副牌 *每个数字与牌之间的对应关系如下 * 1 – 13 :黑桃A,2,3,4,5,6,7,8,9,10,J,Q,K * 14 – 26 :红心A,2,3,4,5,6,7,8,9,10,J,Q,K * 27 – 39 :梅花A,2,3,4,5,6,7,8,9,10,J,Q,K * 40 – 52 :方块A,2,3,4,5,6,7,8,9,10,J,Q,K */ private int[] totalCardArr; /*发到玩家手头上的牌*/ private int[] masterCardArr; private int[] guest1CardArr; private int[] guest2CardArr; private int[] guest3CardArr; /*一句结束玩家的输赢情况*/ private long masterWin; private long guest1Win; private long guest2Win; private long guest3Win; private FileWriter resultWriter; public Dispatcher(){ totalCardArr = new int[52 + 1]; for(int cardIndex = 1; cardIndex <= 52; cardIndex++){ totalCardArr[cardIndex] = cardIndex; } this.masterCredit = 1000000; this.guest1Credit = 1000000; this.guest2Credit = 1000000; this.guest3Credit = 1000000; masterCardArr = new int[5 + 1]; for(int cardIndex = 1; cardIndex <= 5; cardIndex++){ masterCardArr[cardIndex] = 0; } guest1CardArr = new int[5 + 1]; for(int cardIndex = 1; cardIndex <= 5; cardIndex++){ guest1CardArr[cardIndex] = 0; } guest2CardArr = new int[5 + 1]; for(int cardIndex = 1; cardIndex <= 5; cardIndex++){ guest2CardArr[cardIndex] = 0; } guest3CardArr = new int[5 + 1]; for(int cardIndex = 1; cardIndex <= 5; cardIndex++){ guest3CardArr[cardIndex] = 0; } this.masterWin = 0; this.guest1Win = 0; this.guest2Win = 0; this.guest3Win = 0; try{ resultWriter = new FileWriter(“c://result.txt”); } catch(Exception exp){ exp.getStackTrace(); } } public void finalize(){ try{ resultWriter.close(); } catch(Exception exp){ exp.printStackTrace(); } } public void play(int _times){ int times = _times; for(; times > 0; times– ){ swapCard(); distributeCard(); judgeResult(); saveGame(); } } public void outputResult(){ System.out.println(“模拟统计结果如下:”); System.out.print(“庄家剩余积分为:”); System.out.println(this.masterCredit); System.out.print(“友家1剩余积分为:”); System.out.println(this.guest1Credit); System.out.print(“友家2剩余积分为:”); System.out.println(this.guest2Credit); System.out.print(“友家3剩余积分为:”); System.out.println(this.guest3Credit); } /** * 洗牌 * */ private void swapCard(){ int shutfleTimes = 3; int drawTimes =3; for(shutfleTimes = 3; shutfleTimes > 0; shutfleTimes–){ shuffleCard(); } for(drawTimes = 3; drawTimes > 0; drawTimes–){ drawCard(); } } /** * 蝶式洗牌 * */ private void shuffleCard(){ int splitCardIndex = 0; int tempIndex = 0; int randNum = 0; int pack1CardArr[]; int pack2CardArr[]; int pack1Index = 1; int pack2Index = 1; Random random = new Random(); splitCardIndex = random.nextInt(52) + 1; pack1CardArr = new int[52 + 1]; for(int cardIndex = 1; cardIndex <= 52; cardIndex++){ pack1CardArr[cardIndex] = 0; } pack2CardArr = new int[52 + 1]; for(int cardIndex = 1; cardIndex <= 52; cardIndex++){ pack2CardArr[cardIndex] = 0; } for(tempIndex = 1; tempIndex <= splitCardIndex; tempIndex++){ pack1CardArr[tempIndex] = totalCardArr[tempIndex]; totalCardArr[tempIndex] = 0; } for(tempIndex = splitCardIndex + 1; tempIndex <= 52; tempIndex++){ pack2CardArr[tempIndex – splitCardIndex] = totalCardArr[tempIndex]; totalCardArr[tempIndex] = 0; } tempIndex = 1; while(pack1Index <= splitCardIndex && pack2Index <= (52 – splitCardIndex)){ randNum = random.nextInt(5) + 1; while(pack2Index <= (52 – splitCardIndex) && randNum > 0){ totalCardArr[tempIndex] = pack2CardArr[pack2Index]; tempIndex++; pack2Index++; randNum–; } randNum = random.nextInt(5) + 1; while(pack1Index <= splitCardIndex && randNum > 0){ totalCardArr[tempIndex]= pack1CardArr[pack1Index]; tempIndex++; pack1Index++; randNum–; } } while(pack1Index <= splitCardIndex){ totalCardArr[tempIndex] = pack2CardArr[pack2Index]; tempIndex++; pack1Index++; } while(pack2Index <= (52 – splitCardIndex)){ totalCardArr[tempIndex]= pack2CardArr[pack2Index]; tempIndex++; pack2Index++; } } /** * 抽式洗牌 * */ private void drawCard(){ int firstCardIndex = 0; int lastCardIndex = 0; int tempIndex = 0; int tempArr[]; Random random = new Random(); firstCardIndex = random.nextInt(52) + 1; lastCardIndex = random.nextInt(52) + 1; if(firstCardIndex > lastCardIndex){ tempIndex = firstCardIndex; firstCardIndex = lastCardIndex; lastCardIndex = tempIndex; } tempArr = new int[52 + 1]; for(int cardIndex = 1; cardIndex <= 52; cardIndex++){ tempArr[cardIndex] = 0; } for(tempIndex = 1; tempIndex < firstCardIndex; tempIndex++){ tempArr[tempIndex] = totalCardArr[tempIndex]; } for(tempIndex = firstCardIndex; tempIndex <= lastCardIndex; tempIndex++){ totalCardArr[tempIndex – firstCardIndex + 1] = totalCardArr[tempIndex]; } for(tempIndex = 1; tempIndex < firstCardIndex; tempIndex++){ totalCardArr[(lastCardIndex – firstCardIndex + 1) + tempIndex] = tempArr[tempIndex]; } } private void distributeCard(){ int splitCardIndex = 52; int cardIndex = 1; Random random = new Random(); /*从牌中间截断*/ while((52 – splitCardIndex + 1) < 20){ splitCardIndex = random.nextInt(52) + 1; } /*发牌*/ for(cardIndex = 1; cardIndex <= 5; cardIndex++){ masterCardArr[cardIndex] = totalCardArr[splitCardIndex++]; guest1CardArr[cardIndex] = totalCardArr[splitCardIndex++]; guest2CardArr[cardIndex] = totalCardArr[splitCardIndex++]; guest3CardArr[cardIndex] = totalCardArr[splitCardIndex++]; } } private void judgeResult(){ long result1 = 0; long result2 = 0; long result3 = 0; result1 = compareCard(masterCardArr, guest1CardArr); result2 = compareCard(masterCardArr, guest2CardArr); result3 = compareCard(masterCardArr, guest3CardArr); masterWin = result1 + result2 + result3; guest1Win = (-1) * result1; guest2Win = (-1) * result2; guest3Win = (-1) * result3; masterCredit += masterWin; guest1Credit += guest1Win; guest2Credit += guest2Win; guest3Credit += guest3Win; } private long compareCard(int _masterCardArr[], int _guestCardArr[]){ int masterCardArr[] = _masterCardArr; int guestCardArr[] = _guestCardArr; int cardIndex = 1; int faceIndex = 1; int masterRepuNum = 0; int guestRepuNum = 0; int masterRepuFace = 0; int guestRepuFace = 0; /*先将最小的方块A作为初值赋给最大牌*/ int masterMaxCard = 40; int guestMaxCard = 40; int masterMaxCardFace = 0; int guestMaxCardFace = 0; int masterMaxCardSuit = 0; int guestMaxCardSuit =0; int masterBullNum = 0; int guestBullNum = 0; int remainder = 0; int modulus = 0; int repuStatArr[] = new int[13 + 1]; /*寻找庄家的重复牌数目*/ for(int tempIndex = 1; tempIndex <=13; tempIndex++){ repuStatArr[tempIndex] = 0; } for(cardIndex = 1; cardIndex <=5; cardIndex++){ remainder = masterCardArr[cardIndex] % 13; if(0 == remainder){ repuStatArr[13]++; if(0 == (masterMaxCard % 13)){ if(masterCardArr[cardIndex] < masterMaxCard){ masterMaxCard = masterCardArr[cardIndex]; } } else{ masterMaxCard = masterCardArr[cardIndex]; } } else{ repuStatArr[remainder]++; if(10 > remainder){ masterBullNum = (masterBullNum + remainder) % 10; } if((0 != (masterMaxCard % 13) && remainder > (masterMaxCard % 13))){ masterMaxCard = masterCardArr[cardIndex]; } } } for(faceIndex = 1; faceIndex <= 13; faceIndex++){ if(repuStatArr[faceIndex] >= 3){ masterRepuNum = repuStatArr[faceIndex]; masterRepuFace = faceIndex; break; } } if(0 == (masterMaxCard % 13)){ masterMaxCardFace = 13; masterMaxCardSuit = masterMaxCard / 13; } else{ masterMaxCardFace = masterMaxCard % 13; masterMaxCardSuit = masterMaxCard / 13 + 1; } /*寻找友玩家的重复牌数目*/ for(int tempIndex = 1; tempIndex <=13; tempIndex++){ repuStatArr[tempIndex] = 0; } for(cardIndex = 1; cardIndex <=5; cardIndex++){ remainder = guestCardArr[cardIndex] % 13; if(0 == remainder){ repuStatArr[13]++; if(0 == (guestMaxCard % 13)){ if(guestCardArr[cardIndex] < guestMaxCard){ guestMaxCard = guestCardArr[cardIndex]; } } else{ guestMaxCard = guestCardArr[cardIndex]; } } else{ repuStatArr[remainder]++; if(10 > remainder){ guestBullNum = (guestBullNum + remainder) % 10; } if((0 != (guestMaxCard % 13) && remainder > (guestMaxCard % 13))){ guestMaxCard = guestCardArr[cardIndex]; } } } for(faceIndex = 1; faceIndex <= 13; faceIndex++){ if(repuStatArr[faceIndex] >= 3){ guestRepuNum = repuStatArr[faceIndex]; guestRepuFace = faceIndex; break; } } if(0 == (guestMaxCard % 13)){ guestMaxCardFace = 13; guestMaxCardSuit = guestMaxCard / 13; } else{ guestMaxCardFace = guestMaxCard % 13; guestMaxCardSuit = guestMaxCard / 13 + 1; } boolean isMasterWin = false; if(masterRepuNum >=3 || guestRepuNum >= 3){ if(masterRepuNum != guestRepuNum){ isMasterWin = (masterRepuNum > guestRepuNum) true : false; } else{ isMasterWin = (masterRepuFace > guestRepuFace) true : false; } if(isMasterWin){ if(3 == masterRepuNum){ return 5; } else{ return 6; } } else{ if(3 == guestRepuNum){ return -5; } else{ return -6; } } } else{ if(masterBullNum != guestBullNum){ isMasterWin = (masterBullNum > guestBullNum) true : false; } else{ if(masterMaxCardFace != guestMaxCardFace){ isMasterWin = (masterMaxCardFace > guestMaxCardFace) true : false; } else{ //黑、红、梅、方,胜者Index低 isMasterWin = (masterMaxCardSuit < guestMaxCardSuit) true : false; } } if(isMasterWin){ if(7 > masterBullNum){ return 1; } else if((7 == masterBullNum) || (8 == masterBullNum)){ return 2; } else if(9 == masterBullNum){ return 3; } else if(10 == masterBullNum){ return 4; } } else{ if(7 > guestBullNum){ return -1; } else if((7 == guestBullNum) || (8 == guestBullNum)){ return -2; } else if(9 == guestBullNum){ return -3; } else if(10 == guestBullNum){ return -4; } } } return 0; } private void saveGame(){ String result; result = new String(“”); result = result.concat(getCard(masterCardArr)); result = result.concat(“|”); result = result.concat(getCard(guest1CardArr)); result = result.concat(“|”); result = result.concat(getCard(guest2CardArr)); result = result.concat(“|”); result = result.concat(getCard(guest3CardArr)); result = result.concat(“|”); result = result.concat(String.valueOf(masterWin)); result = result.concat(“|”); result = result.concat(String.valueOf(guest1Win)); result = result.concat(“|”); result = result.concat(String.valueOf(guest2Win)); result = result.concat(“|”); result = result.concat(String.valueOf(guest3Win)); result = result.concat(“/r/n”); try{ resultWriter.write(result, 0, result.length()); resultWriter.flush(); } catch(Exception exp){ exp.printStackTrace(); } } private String getCard(int _cardArr[]){ int cardIndex = 1; int cardArr[] = _cardArr; String cardStr = new String(“”); for(cardIndex = 1; cardIndex <= 5; cardIndex++){ if(1 <= cardArr[cardIndex] && 13 <= cardArr[cardIndex]){ cardStr.concat(“黑桃”); } if(14 <= cardArr[cardIndex] && 26 <= cardArr[cardIndex]){ cardStr.concat(“红桃”); } if(27 <= cardArr[cardIndex] && 39 <= cardArr[cardIndex]){ cardStr.concat(“梅花”); } if(40 <= cardArr[cardIndex] && 52 <= cardArr[cardIndex]){ cardStr.concat(“方块”); } if(1 == (cardArr[cardIndex] % 13)){ cardStr.concat(“A”); } if(2 <= (cardArr[cardIndex] % 13) && (cardArr[cardIndex] % 13) <= 10){ cardStr.concat(String.valueOf(cardArr[cardIndex] % 13)); } if(11 == (cardArr[cardIndex] % 13)){ cardStr.concat(“J”); } if(12 == (cardArr[cardIndex] % 13)){ cardStr.concat(“Q”); } if(0 == (cardArr[cardIndex] % 13)){ cardStr.concat(“K”); } } return cardStr; }} 文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113456 人正在系统学习中 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢! 生成海 十大跨平台优秀软件 上一篇 2010年4月26日 中国微博第一战:没有最黑只有更黑,现下的安全软件市场 下一篇 2010年4月26日 相关推荐 word中 数字或者字母间距 突然变大 2021年10月18日 打工人必备!5款极大提高工作效率的办公软件推荐 2022年7月9日 【xmind 2021-2022,文件丢失-软件异常-历史版本找回】 2022年9月23日 python-用PyQt5实现一个简单的向喜欢女生告白软件(代码实现+py文件打包成exe文件) 2019年6月15日 搭建psoc creator开发环境调试软件 2017年3月4日 zigbee CC2530 系列教程 0 课程介绍 2020年1月13日 Mac用户必备翻译软件!Bob 0.5.3 中文版 附谷歌翻译插件! 2020年11月8日 手机点餐系统概述_餐厅点餐系统需求分析 2020年11月27日 Java系统学习架构 2022年8月5日 产品经理会用到的常用术语大全 2021年10月8日