C是什么
2015-04-22 16:03
//扑克类; public class Poker { private String flower; private String number; public String getFlower() { return flower; } public void setFlower(String flower) { this.flower = flower; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Poker(String flower, String number) { this.flower = flower; this.number = number; } } //玩家类 public class Player { private String name; private int id; private ArrayList <Poker>myPoker= new ArrayList<Poker>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public ArrayList<Poker> getMyPoker() { return myPoker; } public void setMyPoker(Poker poker) { this.myPoker.add(poker); } public Player(String name, int id) { this.name = name; this.id = id; this.myPoker = myPoker; } //显示玩家手牌 public void show(){ System.out.print("玩家"+getName()+": "); for (Poker p : myPoker) { System.out.print(p.getFlower()+p.getNumber()+" "); } System.out.println(); } //玩家获胜信息 public void winShow(Player p){ System.out.println("-----玩家"+p.getName()+"获胜!-----"); } }
结果。
写的真棒。。。。额,原来collection.shuffle可以打乱数组。。。。我寒假纠结如何洗牌的问题纠结了很久
其中一些算法可以更精简点 建议你看些算法
这网页有点问题,把中间部分注释掉了。
//游戏工具类 public class GameUtil { private ArrayList <Poker>pokerList = new ArrayList<Poker>(); // 扑克牌集合 public ArrayList<Poker> getPokerList() { return pokerList; } public void setPokerList( ArrayList<Poker> pokerList) { this.pokerList = pokerList; } /** * 创建扑克牌,并存入pokerList中; */ public void makeUp(){ System.out.println("--------------开始建牌------------"); Poker[] p= new Poker[52]; //建立单张 String f[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; String n[] = {"黑桃","红心","梅花","方块"}; for(int i=0;i<n.length;i++){ for(int j=0;j<f.length;j++){ p[i*13+j] = new Poker(n[i],f[j]); } } //将单张写入集合 for (int i = 0; i < p.length; i++) { pokerList.add(p[i]); } //测试扑克建立情况 System.out.print("为:["); for (Poker pk : pokerList) { System.out.print(pk.getFlower()+pk.getNumber()+"、"); } System.out.print("]"); System.out.println(); System.out.println("--------------建牌结束------------"); } /** * 洗牌; */ public void shuffle(){ System.out.println("--------------开始洗牌-----------"); /*System.out.print("为:[");*/ Collections.shuffle(pokerList); /*测试洗牌情况 for (Poker pk : pokerList) { System.err.print(pk.getFlower()+pk.getNumber()+"、"); } System.out.print("]");*/ System.out.println(); System.out.println("--------------洗牌结束-----------"); } /** * 发牌 */ public void setPoker(Player p1,Player p2){ System.out.println("--------------开始游戏-----------"); for (int i = 0; i < 4; i++) { if(i%2==0){ System.out.println("玩家"+p1.getName()+"拿牌!"); p1.setMyPoker(pokerList.get(i)); }else{ System.out.println("玩家"+p2.getName()+"拿牌!"); p2.setMyPoker(pokerList.get(i)); } } } /** * 比牌 */ public void contrast(Player p1,Player p2){ //玩家1自己的牌進行比較 Poker myp1 = this.eqMyPoker(p1); //第一个玩家的最大牌 //玩家2自己的牌進行比較 Poker myp2 = this.eqMyPoker(p2); //第二个玩家的最大牌 System.out.println("玩家"+p1.getName()+"的最大手牌为:"+myp1.getFlower() +myp1.getNumber()); System.out.println("玩家"+p2.getName()+"的最大手牌为:"+myp2.getFlower() +myp2.getNumber()); //两个玩家进行比较 if(this.eqNumber(myp1)!=this.eqNumber(myp2)){ if(this.eqNumber(myp1)>this.eqNumber(myp2)){ p1.winShow(p1); System.out.println("玩家各自的手牌为:"); p1.show(); p2.show(); }else{ p2.winShow(p2); System.out.println("玩家各自的手牌为:"); p1.show(); p2.show(); } }else{ if(this.eqFlower(myp1)>this.eqFlower(myp2)){ p1.winShow(p1); System.out.println("玩家各自的手牌为:"); p1.show(); p2.show(); } } } /** * 玩家的牌进行比较 */ public int eqFlower(Poker p){//比较花色 int flower = 0; for(int i = 0;i<2;i++){ switch(p.getFlower()){ case "黑桃": flower = 4;break; case "红心": flower = 3;break; case "梅花": flower = 2;break; case "方块": flower = 1;break; default : System.out.println("花色2失败!"); break; } } return flower; } public int eqNumber(Poker p){//比较点数 int number = 0; for(int i = 0;i<2;i++){ switch(p.getNumber()){ case "1": number = 1;break; case "2": number = 2;break; case "3": number = 3;break; case "4": number = 4;break; case "5": number = 5;break; case "6": number = 6;break; case "7": number = 7;break; case "8": number = 8;break; case "9": number = 9;break; case "10": number = 10;break; case "J": number = 11;break; case "Q": number = 12;break; case "K": number = 13;break; case "A": number = 14;break; default : System.out.println("点数失败!"); break; } } return number; } //内部比较,确定最大的一张牌 public Poker eqMyPoker(Player p){ if(eqNumber(p.getMyPoker().get(0))!=eqNumber(p.getMyPoker().get(1))){ if(eqNumber(p.getMyPoker().get(0))>eqNumber(p.getMyPoker().get(1))){ return p.getMyPoker().get(0); }else{ return p.getMyPoker().get(1); } }else{ if(eqFlower(p.getMyPoker().get(0))>eqFlower(p.getMyPoker().get(1))){ return p.getMyPoker().get(0); }else{ return p.getMyPoker().get(1); } } } /** * 创建玩家 * */ public void setPlayer(){ System.out.println("---------开始创建玩家------------"); Scanner sc = new Scanner(System.in); System.out.print("请输入第一位玩家ID:"); try { int id = sc.nextInt(); System.out.print("请输入第一位玩家姓名:"); String name = sc.next(); Player p1 = new Player(name, id); System.out.println("欢迎玩家"+p1.getName()+"!"); System.out.print("请输入第二位玩家ID:"); int id2 = sc.nextInt(); System.out.print("请输入第二位玩家姓名:"); String name2 = sc.next(); Player p2 = new Player(name2, id2); System.out.println("欢迎玩家"+p2.getName()+"!"); sc.close(); System.out.println("---------创建玩家结束------------"); setPoker(p1,p2); //发牌; this.contrast(p1, p2); //比牌; } catch (Exception e) { System.err.println("请输入整数!"); setPlayer(); } } } //游戏启动类 public class Game { public static void main(String[] args) { GameUtil gu = new GameUtil(); gu.makeUp(); gu.shuffle(); gu.setPlayer(); } }
Java入门第三季
409792 学习 · 4340 问题
相似问题