整体思路
创建Card类,定义单张扑克的属性(点数,花色),行为(比较大小),以及比较大小的规则;
创建Poker类,定义一副扑克牌,采用List集合框架;
创建Player类,定义玩家属性(id,名字,手牌);
创建Game类,程序入口,步骤如下:
创建一副牌的对象 ;
输入id,昵称 ;
抽牌(两人不会抽到同一张牌),洗牌(采用Card类中的排序方法);
比较两人的最大牌(还是采用Card类中的排序方法)
/** * Card类,定义扑克牌,以及扑克牌的比大小规则 * Created by haivo on 2016/4/18. */ public class Card { public String color; //花色 public String point; //点数 public Card(String color,String point){ this.color = color; this.point = point; } /** * 重写toString用于打印单张扑克的点数及花色 */ @Override public String toString() { return color+point; } /** * 扑克牌比较规则,采用Comparator实现,这个规则会在多个地方被用到 */ public static Comparator<Card> comparator = new Comparator<Card>() { @Override public int compare(Card o1, Card o2) { Poker comparePokerTemp = new Poker(); if(o1==null || o2==null) return 0; int bigger = comparePokerTemp.point.indexOf(o1.point) - comparePokerTemp.point.indexOf(o2.point); if(bigger==0){ bigger = comparePokerTemp.color.indexOf(o1.color) - comparePokerTemp.color.indexOf(o2.color); } return bigger; } }; } /** * 扑克类:采用List泛型分别定义花色和点数 * Created by haivo on 2016/4/18. */ public class Poker { public List<String> color = new ArrayList<>(); //花色共4种 public List<String> point = new ArrayList<>(); //点数3.4.5····2共13种 public List<Card> pokerList = new ArrayList<>(); //扑克中的扑克牌共52张,没有王牌 public Poker() { color.add("♤"); color.add("♡"); color.add("♣"); color.add("♦"); point.add("3"); point.add("4"); point.add("5"); point.add("6"); point.add("7"); point.add("8"); point.add("9"); point.add("10"); point.add("J"); point.add("Q"); point.add("K"); point.add("A"); point.add("2"); for (int color = 0; color < 4; color++) { for (int point = 0; point < 13; point++) { Card mCard = new Card(this.color.get(color),this.point.get(point)); pokerList.add(mCard); } } } /** *打印手牌 */ public void printPokerCard(){ for (int i = 0; i < this.pokerList.size(); i++) { System.out.print(this.pokerList.get(i).toString()+" "); } System.out.println(""); } } /** * 玩家类 * Created by haivo on 2016/4/18. */ public class Player { public int id; public String name; public List<Card> playerCard; //玩家手牌 public Player(int id,String name) { this.id = id; this.name = name; this.playerCard = new ArrayList<>(); } @Override public String toString() { return this.id + ":"+this.name; } } /** * Game类:两人抽牌选择手中的较大牌比大小 * Created by haivo on 2016/4/18. */ public class Game { Poker mPoker = new Poker(); Poker dealedPoker = new Poker(); Scanner scanner = new Scanner(System.in); int surplusCards = 51; //剩余牌数 int dealCardCount; //将要抽取的手牌数量 Player player1, player2; public static void main(String[] args) { Game g = new Game(); System.out.println("创建了一副扑克牌: "); g.mPoker.printPokerCard(); g.creatPlayer(); System.out.println("请输入玩家要抽取多少张牌:(不超过25张)"); g.dealCardCount = g.scanner.nextInt(); g.pullAndShuffleCard(); //抽牌和洗牌 g.compareMaxCard(); //两玩家的最大牌做比较,决出胜负 } /** * 创建玩家 */ public void creatPlayer() { System.out.print("请输入第一名玩家ID: "); int inputId = scanner.nextInt(); System.out.print("请输入第一名玩家昵称: "); String inputName = scanner.next(); player1 = new Player(inputId, inputName); System.out.print("请输入第二名玩家ID: "); inputId = scanner.nextInt(); System.out.print("请输入第二名玩家昵称: "); inputName = scanner.next(); player2 = new Player(inputId, inputName); } /** * 抽取手牌和洗牌,采用comparator规则排序 */ public void pullAndShuffleCard(){ player1.playerCard.addAll(dealCard(dealCardCount)); System.out.println("玩家一抽取手牌是:"); for (Card c: player1.playerCard) { System.out.print(c.toString()+" "); } Collections.sort(player1.playerCard,Card.comparator); System.out.println("\n玩家一洗牌后的手牌是:"); for (Card c: player1.playerCard) { System.out.print(c.toString()+" "); } player2.playerCard.addAll(dealCard(dealCardCount)); System.out.println("\n玩家二抽取的手牌是:"); for (Card c: player2.playerCard) { System.out.print(c.toString()+" "); } Collections.sort(player2.playerCard,Card.comparator); System.out.println("\n玩家二洗牌后的手牌是:"); for (Card c: player2.playerCard) { System.out.print(c.toString()+" "); } } /** * 玩家连续抽取dealCoun张牌,返回多张卡牌(用List盛装) * @param dealCount * @return */ public List<Card> dealCard(int dealCount){ Random random = new Random(); List<Card> playCard = new ArrayList<>(); do { Card card = dealedPoker.pokerList.get(random.nextInt(surplusCards--)); playCard.add(card); dealCount--; dealedPoker.pokerList.remove(card); }while(dealCount>0); return playCard; } /** * 两玩家的最大牌做比较,决出胜负,采用comparator规则排序 */ public void compareMaxCard(){ List<Card> biggerPlayerCard = new ArrayList<>(2); biggerPlayerCard.add(player1.playerCard.get(player1.playerCard.size()-1)); biggerPlayerCard.add(player2.playerCard.get(player2.playerCard.size()-1)); Collections.sort(biggerPlayerCard,Card.comparator); if(player1.playerCard.contains(biggerPlayerCard)){ System.out.println("\n 所以,ID:"+player1.toString()+"获胜。"); }else{ System.out.println("\n 所以,ID:"+player2.toString()+"获胜。"); } } }