gao634209276
2016-02-12 23:12
注意这里的内容我已经更新了,原来的删掉了.这是我最新的代码..修改过的,上午半天写出来了,结果bug好几个,然后就是排序不正常,一直弄到快晚上...现在好了,,大家看看有什么问题没有,提供下载地址:
http://pan.baidu.com/s/1hrL2SS0
整体结构如下:
package item; public class Card implements Comparable<Card> { private String point; private String variety; private String[] p = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; private String[] v = { "黑桃", "红桃", "梅花", "方块" }; public String getVariety() { return variety; } public void setVariety(int variety) { this.variety = v[variety]; } public String getPoint() { return point; } public void setPoint(int point) { this.point = p[point]; } public Card() { } @Override public String toString() { return this.getVariety() + this.getPoint(); } @Override public int compareTo(Card o) { String point = "12345678910JQKA"; String variety = "方块梅花红桃黑桃"; int p = point.indexOf(this.getPoint())-point.indexOf(o.getPoint()); int v = variety.indexOf(this.getVariety())-variety.indexOf(o.getVariety()); //String str2 = "黑桃红桃梅花方块"; return p*4+v/2; } }
package item; import java.util.List; import java.util.Scanner; public class Player { private String name; private int id; private List<Card> cardList; int count; Scanner in; public Player() { } public String getName() { return name; } public int getId() { return id; } public void setName() { in = new Scanner(System.in); System.out.println("请输入姓名"); name = in.next(); } public void SetId() { if (count == 3) { System.out.println("对不起,输出次数达到上限,即将退出系统"); return; } count++; in = new Scanner(System.in); System.out.println("请输出入id"); try { id = in.nextInt(); if(id<=0){ throw new RuntimeException(); } } catch (Exception e) { if (count < 3) System.out.println("对不起,请输出一个正整数"); SetId(); } } @Override public String toString() { return "Player [name=" + name + ", id=" + id + "]"; } public List<Card> getCardList() { return cardList; } public void setCardList(List<Card> cardList) { this.cardList = cardList; } public void addCardList(Card c) { this.cardList.add(c); } }
package util; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import item.Card; import item.Player; public class Utils { List<Card> cardList = new ArrayList<Card>(); public List<Card> createCard() { for (int i = 0; i < 13; i++) { for (int j = 0; j < 4; j++) { Card card = new Card(); card = new Card(); card.setPoint(i); card.setVariety(j); cardList.add(card); } } System.out.println(); return cardList; } public Player playerRegistered() { Player p = new Player(); p.SetId(); p.setName(); return p; } public void dealCard(Player p1, Player p2, List<Card> cardList) { int i = 1; p1.setCardList(new ArrayList<Card>()); p2.setCardList(new ArrayList<Card>()); Iterator<Card> iterator = cardList.iterator(); while (iterator.hasNext()) { if (i % 2 == 1) { System.out.println("玩家" + p1.getName() + "拿牌"); p1.addCardList(iterator.next()); } if (i % 2 == 0) { System.out.println("玩家" + p2.getName() + "拿牌"); p2.addCardList(iterator.next()); } if (i >= 4) { break; } i++; } } public void sortCard(List<Card> cardList){ Collections.sort(cardList); System.out.println(cardList); } public void shffleCard(List<Card> cardList){ Collections.shuffle( cardList); } public Player pointCard(Player p1, Player p2) { List<Card> sum = new ArrayList<Card>(); sum.addAll(p1.getCardList()); sum.addAll(p2.getCardList()); Card max = Collections.max(sum); Player winner = sum.indexOf(max) <= 2 ? p1 : p2; System.out.println("玩家" + winner.getName() + "赢"); System.out.println("玩家" + winner.getName() + "最大的手牌为:" + max.toString()); return winner; } }
package View; import java.util.List; import item.Card; import item.Player; import util.Utils; public class View { public static void main(String[] args) { Utils util = new Utils(); System.out.println("------------创建扑克牌------------"); List<Card> cardList = util.createCard(); System.out.println(cardList); System.out.println("-----------扑克牌创建成功----------"); System.out.println("------------玩家注册……-------------"); Player p1 = util.playerRegistered(); if(p1.getId()==0){ return; } Player p2 = util.playerRegistered(); if(p2.getId()==0){ return; } System.out.println("注册的玩家为:"); System.out.println(p1.toString()); System.out.println(p2.toString()); System.out.println("------------开始洗牌:-------------"); util.shffleCard(cardList); System.out.println("------------开始发牌:-------------"); util.dealCard(p1, p2, cardList); System.out.println("------------发牌结束!-------------"); System.out.println("------------开始游戏……-------------"); Player winner = util.pointCard(p1, p2); //这里可以把pointCard()方法该为返回值为void类型的; System.out.println("两人的手牌分别为:"); System.out.println("玩家"+p1.getName()+"手牌为:"+p1.getCardList()); System.out.println("玩家"+p2.getName()+"手牌为:"+p2.getCardList()); System.out.println("本局胜利者的信息为:"+winner.toString()); System.out.println("---------本局结束,再来一次吧!!----------"); } }
注意楼下我写的都有点问题,不用看了...
啊...有一个bug,现稍作修改..见谅..bug原因输入一个负数的id 能通过...
然后如果一直输入非int类型的id,会让id为0..在这里修改了..代码如下...
player:
package item; import java.util.List; import java.util.Scanner; public class Player { private String name; private int id; private List<Card> cardList; int count; Scanner in; public Player() { } public String getName() { return name; } public int getId() { return id; } public void setName() { in = new Scanner(System.in); System.out.println("请输入姓名"); name = in.next(); } public void SetId() { if (count == 3) { System.out.println("对不起输出次数上限"); return; } count++; in = new Scanner(System.in); System.out.println("请输出入id"); try { id = in.nextInt(); if(id<=0){ throw new RuntimeException(); } } catch (Exception e) { if (count < 3) System.out.println("对不起,请输出数字"); SetId(); } } @Override public String toString() { return "Player [name=" + name + ", id=" + id + "]"; } public List<Card> getCardList() { return cardList; } public void setCardList(List<Card> cardList) { this.cardList = cardList; } public void addCardList(Card c) { this.cardList.add(c); } }
view层
package View; import java.util.Set; import item.Card; import item.Player; import util.Utils; public class View { public static void main(String[] args) { Utils util = new Utils(); System.out.println("------------创建扑克牌------------"); Set<Card> cardSet = util.createCard(); System.out.println("-----------扑克牌创建成功----------"); System.out.println("------------玩家注册……-------------"); Player p1 = util.playerRegistered(); if(p1.getId()==0){ return; } Player p2 = util.playerRegistered(); if(p1.getId()==0){ return; } System.out.println("注册的玩家为:"); System.out.println(p1.toString()); System.out.println(p2.toString()); System.out.println("------------开始发牌:-------------"); util.dealCard(p1, p2, cardSet); System.out.println("------------发牌结束!-------------"); System.out.println("------------开始游戏……-------------"); Player winner = util.pointCard(p1, p2); //这里可以把pointCard()方法该为返回值为void类型的; System.out.println("两人的手牌分别为:"); util.showCard(p1); util.showCard(p2); System.out.println("本局胜利者的信息为:"+winner.toString()); System.out.println("---------本局结束,再来一次吧!!----------"); } }
其他不动.
更改后的公开下载链接:http://pan.baidu.com/s/1geIhiIB
关于这个综合练习,当时我写的是半成品,很多不足,今天我重新写了代码,有需要参考的可以来看看...http://pan.baidu.com/s/1nuLsISx
这个是view层:
package View; import java.util.Set; import item.Card; import item.Player; import util.Utils; public class View { public static void main(String[] args) { Utils util = new Utils(); System.out.println("------------创建扑克牌------------"); Set<Card> cardSet = util.createCard(); System.out.println("-----------扑克牌创建成功----------"); Player p1 = util.playerRegistered(); System.out.println("------------玩家注册……-------------"); Player p2 = util.playerRegistered(); System.out.println("注册的玩家为:"); System.out.println(p1.toString()); System.out.println(p2.toString()); System.out.println("------------开始发牌:-------------"); util.dealCard(p1, p2, cardSet); System.out.println("------------发牌结束!-------------"); System.out.println("------------开始游戏……-------------"); Player winner = util.pointCard(p1, p2); //这里可以把pointCard()方法该为返回值为void类型的; System.out.println("两人的手牌分别为:"); util.showCard(p1); util.showCard(p2); System.out.println("本局胜利者的信息为:"+winner.toString()); System.out.println("---------本局结束,再来一次吧!!----------"); } }
这个是Util层:
package util; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import item.Card; import item.Player; public class Utils { Set<Card> cardSet = new HashSet<Card>(); public Set<Card> createCard() { for (int i = 0; i < 13; i++) { for (int j = 0; j < 4; j++) { Card card = new Card(); card = new Card(); card.setPoint(i); card.setVariety(j); // Card c = new Card(card.getPoint(), card.getVariety()); System.out.print(card.toString() + " "); cardSet.add(card); } } System.out.println(); return cardSet; } public Player playerRegistered() { Player p = new Player(); p.SetId(); p.setName(); return p; } public void dealCard(Player p1, Player p2, Set<Card> cardSet) { /*在这里使用ForEach亦可以 * System.out.println(cardSet.size()); for (Card card : cardSet) { * System.out.print(card.toString()+" "); } */ int i = 1; p1.setCardList(new ArrayList<Card>()); p2.setCardList(new ArrayList<Card>()); Iterator<Card> iterator = cardSet.iterator(); while (iterator.hasNext()) { if (i % 2 == 0) { System.out.println("玩家" + p1.getName() + "拿牌"); // System.out.println(iterator.next().toString() + " "); p1.addCardList(iterator.next()); } if (i % 2 == 1) { System.out.println("玩家" + p2.getName() + "拿牌"); // System.out.println(iterator.next().toString() + " "); p2.addCardList(iterator.next()); } if (i >= 4) { break; } i++; } } public void showCard(Player p) { System.out.println("玩家"+p.getName() + "手牌:"); for (Card card : p.getCardList()) { System.out.print(card.toString() + " "); } System.out.println(); } public Player pointCard(Player p1, Player p2) { List<Card> sum = new ArrayList<Card>(); sum.addAll(p1.getCardList()); sum.addAll(p2.getCardList()); for (Card card : sum) { System.out.println(card.toString()); } Card max = Collections.max(sum); Player winner = sum.indexOf(max) <= 2 ? p1 : p2; System.out.println("玩家"+winner.getName() + "赢"); System.out.println("玩家"+winner.getName()+"最大的手牌为:" + max.toString()); return winner; } }
这个是items层
Card类:
package item; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Card implements Comparable<Card> { private String point; private String variety; private String[] p = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; private String[] v = { "黑桃", "红桃", "梅花", "方块" }; public String getVariety() { return variety; } public void setVariety(int variety) { this.variety = v[variety]; } public String getPoint() { return point; } public void setPoint(int point) { this.point = p[point]; } public Card() { } @Override public String toString() { return this.getVariety() + this.getPoint(); } @Override public int compareTo(Card o) { List<String> point=new ArrayList<String>(); List<String> variety=new ArrayList<String>(); point.addAll(Arrays.asList(p)); variety.addAll(Arrays.asList(v)); int num = (point.indexOf(o.getPoint()))*4+variety.indexOf(o.getVariety()); return num; } }
Player类:
package item; import java.util.List; import java.util.Scanner; public class Player { private String name; private int id; private List<Card> cardList; int count; Scanner in; public Player() { } public String getName() { return name; } public int getId() { return id; } public void setName() { in = new Scanner(System.in); System.out.println("请输入姓名"); name = in.next(); } public void SetId() { if (count == 3) { System.out.println("对不起输出次数上限"); return; } count++; in = new Scanner(System.in); System.out.println("请输出入id"); try { id = in.nextInt(); } catch (Exception e) { if (count < 3) System.out.println("对不起,请输出数字"); SetId(); } } @Override public String toString() { return "Player [name=" + name + ", id=" + id + "]"; } public List<Card> getCardList() { return cardList; } public void setCardList(List<Card> cardList) { this.cardList = cardList; } public void addCardList(Card c) { this.cardList.add(c); } }
还有,我上传了包里有个test.java和Variety.java没用,可以删掉
写的太好啦!!!有个问题想问一下,Comparat类应该是跟max()方法有关,比较四种花色的大小?能详细讲解一下这块的原理吗?
写的真好,你那个怎么比较大小的啊?没看太明白!把思路说一下呗,谢谢了!
扑克不能有1,小改了一下,在num数组里删除1,在最后加上14,然后在hashMap映射里加上put(14,'A');发现我这编码是编的最少的。。差很多内容啊,这个就当初稿吧,明天再看看
Java入门第三季
409767 学习 · 4530 问题
相似问题