最新更新,扑克牌小游戏练习,多次更改后版本.项目虽小但确实囊括了不少java基础的东西.欢迎大神指点,谢谢..
提供下载地址:http://pan.baidu.com/s/1slzgiXR
提供功能:验证输入id:是不是贱贱哒~~~~
排序功能良好
内容展示
view:
package View; import java.util.List; import item.Card; import item.Player; import util.PlayerRegistered; import util.Utils; /** *主函数的入口,向控制台提供简单的视图 *调用util和PlayerRegistered实现各种功能.. */ 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); //可以验证一下,sort功能是否正确,查看sort后扑克牌大小顺序 //util.sortCard(cardList); System.out.println("-----------扑克牌创建成功----------"); System.out.println("------------玩家注册……-------------"); PlayerRegistered pr = new PlayerRegistered(); Player p1,p2; //try-catch判断是否退出主函数体 try { p1 = pr.playerBuilder(); p2 = pr.playerBuilder(); } catch (Exception e) { 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("本局胜利者的信息为:"+winner.toString()); System.out.println("---------本局结束,再来一次吧!!----------"); } }
Util
package util; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import item.Card; import item.Player; /** *本类为View提供与扑克牌相关的各种方法 * */ 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.setPoint(i); card.setVariety(j); cardList.add(card); } } System.out.println(); return cardList; } //扑克牌排序,为了验证是否能够比较大小,可以删除此方法 public void sortCard(List<Card> cardList){ Collections.sort(cardList); System.out.println(cardList); } //洗牌 public void shffleCard(List<Card> cardList){ Collections.shuffle( cardList); } //为p1,p2发扑克牌 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 Player pointCard(Player p1, Player p2) { //在这里可以取以中转变量:maxP1,maxP2 /*Card maxP1 = Collections.max(p1.getCardList()); Card maxP2 = Collections.max(p1.getCardList());*/ System.out.println( p1.getName() + "最大的手牌为"+Collections.max(p1.getCardList())); System.out.println( p2.getName() + "最大的手牌为"+Collections.max(p2.getCardList())); List<Card> sum = new ArrayList<Card>(); //这里的sum可以直接添加注释中的maxP1,maxP2,一个意思... 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("两人的手牌分别为:"); System.out.println("玩家"+p1.getName()+"手牌为:"+p1.getCardList()); System.out.println("玩家"+p2.getName()+"手牌为:"+p2.getCardList()); return winner; } }
package util; import java.util.Scanner; import item.Player; /** *玩家注册,验证类 *提供输入,返回玩家信息 *如果验证失败,主程序退出!! */ public class PlayerRegistered { private Player p; static int count; Scanner in; //PlayerRegistered的唯一入口,其他封装其他方法. public Player playerBuilder() throws Exception{ p = new Player(); inputId(); if(p.getId()==0){ throw new RuntimeException(); } inputName(); return p; } private void inputName() { in = new Scanner(System.in); System.out.println("请输入姓名"); p.setName(in.next()); } private void inputId() { if (count == 3) { System.out.println("对不起,输出次数达到上限,系统退出"); return; } count++; in = new Scanner(System.in); System.out.println("请输出入id"); try { int id = in.nextInt(); if(id<=0){ //这里可以设置一个与nextInt()不同的异常, //然后再分别catch处理,我这里简单的统一处理了 throw new RuntimeException(); } p.setId( id); } catch (Exception e) { if (count < 3){ System.out.println("对不起,请输出一个正整数,(还有"+(3-count)+"次机会)"); } inputId(); } } }
item
package item; /** *Card类,封装单张扑克牌的属性point,variety */ 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; /** *玩家实体类,封装name,id *玩家游戏时候获取扑克牌,所以添加cardList的属性 */ public class Player { private String name; public void setName(String name) { this.name = name; } public void setId(int id) { this.id = id; } private int id; private List<Card> cardList; int count; Scanner in; public Player() { } public String getName() { return name; } public int getId() { return id; } @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); } }