一、游戏规则如下:
1.创建一副扑克牌,包括2-10,J,Q,K,A.四种花色黑红梅方。无大小王
2.创建两名玩家,有ID,姓名,手牌等属性,手牌为扑克牌的集合3.洗牌。将之前创建的扑克牌打乱顺序
4.发牌。洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人两张
5.游戏,比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;
若两人各自的点数最大的牌相等,则再按花色比较。
二、思路
1.创建Player、Card、Game、CardDemo类
三、代码
package com.****.tim; /* *主类 */ public class CardDemo { public static void main(String[] args){ Game game = new Game(); game.cardCreat(); game.playerCreat(); game.cardShuffle(); game.cardDeal(); game.result(); } }
package com.****.tim; import java.util.ArrayList; import java.util.List; /* * 玩家类 */ public class Player { /* * 属性 */ private String name; private int id; //用于储存玩家手牌 List<Card> cardList; /* * 构造器初始化玩家 */ public Player(String name,int id){ this.setId(id); this.setName(name); cardList = new ArrayList<Card>(); } @Override public String toString() { return "玩家" + id + name; } /* * 封装 */ protected String getName() { return name; } protected void setName(String name) { this.name = name; } protected int getId() { return id; } protected void setId(int id) { this.id = id; } }
package com.****.tim; /* * 扑克牌类 */ public class Card { /* * 属性 */ private String color; private String number; /* * 构造器中初始化card属性 */ public Card(String number,String color){ this.setColor(color); this.setNumber(number); } /* * 重写toString方法,输出一副扑克牌信息 * @see java.lang.Object#toString() */ @Override public String toString() { return color + number; } protected String getColor() { return color; } protected void setColor(String color) { this.color = color; } protected String getNumber() { return number; } protected void setNumber(String number) { this.number = number; } }
package com.****.tim; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Game{ /* * 全局变量 * 创建两个数组,用于存放扑克牌的花色和数字。 * 声明扑克牌和玩家对象List,创建一个Scanner对象 */ String[] colors = {"方块","梅花","红桃","黑桃"}; String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; List<Card> cardList; List<Player> playerList; Scanner console = new Scanner(System.in); /* *在构造器中初始化玩家和扑克牌的List */ public Game(){ cardList = new ArrayList<Card>(); playerList = new ArrayList<Player>(); } /* * 创建一副扑克牌的方法 */ public void cardCreat(){ //创建一个数组,用于盛装52张扑克牌 Card[] cards = new Card[52]; int k = 0; /* * for循环产生52张扑克牌,并添加至cardList中,然后打印输出 */ for(int i = 0;i < colors.length;i++){ for(int j = 0;j < numbers.length;j ++){ String color = colors[i]; String number = numbers[j]; cards[k] = new Card(number,color); k++; } } cardList.addAll(Arrays.asList(cards)); System.out.println("-------------创建扑克牌成功!-------------"); for(Card cds : cards){ System.out.print(cds + " "); } System.out.println(); } /* *创建两名玩家的方法 */ public void playerCreat(){ /* * 创建两名玩家,并将其添加至playerList中,并打印输出 */ for(int i = 0;i < 2;i ++){ System.out.println("请输入玩家" + (i+1) + "ID:"); int id; while(true){ try{ id = scanInt(); break; }catch(Exception e){ System.out.println(e.getMessage()); continue; } } System.out.println("请输入玩家" + (i+1) + "姓名:"); String name = console.next(); Player player = new Player(name,id); if(!playerList.contains(player)){ playerList.add(player); } System.out.println("创建玩家成功:"); for(Player players : playerList){ System.out.println(players); } } console.close(); } /* *出现异常的方法 */ public int scanInt() throws Exception{ try{ int in = console.nextInt(); return in; }catch(Exception e){ console = new Scanner(System.in); throw new Exception("输入异常,请输入整数类型的ID"); } } /* * 洗牌 */ public void cardShuffle(){ System.out.println("-------------开始洗牌-------------"); Collections.shuffle(cardList); } /* * 发牌 */ public void cardDeal(){ /* * if判断保证玩家的List不为空 */ if(playerList != null){ System.out.println("-------------开始发牌-------------"); int j = 0; /* * for循环给玩家的cardSet属性赋值,也就是产生两位玩家两张手牌,循环打印输出两位玩家的手牌 */ for(int i = 0; i < 2;i ++){ playerList.get(0).cardList.add(cardList.get(j)); System.out.println("玩家" + playerList.get(0).getName() + "拿牌:" + cardList.get(j).getColor() + cardList.get(j).getNumber()); j++; playerList.get(1).cardList.add(cardList.get(j)); System.out.println("玩家" + playerList.get(1).getName() + "拿牌:" + cardList.get(j).getColor() + cardList.get(j).getNumber()); j++; } for(int i = 0;i < 2; i++){ System.out.println("玩家" + playerList.get(i).getName() + "的手牌为"); for(Card pc : playerList.get(i).cardList){ System.out.println(pc); } } } } /* * 比较两张牌的大小的方法,传入两个参数x,y,类型为Crad型 */ public int compare(Card x,Card y){ int value1 = 0,value2 = 0;//两张牌的面值0-12 int color1 = 0,color2 = 0;//两张牌的花色0-3 /* * 依次取得两张手牌的面值和花色,进行比较。并返回int值 * 返回1则x大,返回2则y大 */ for(int i = 0;i < 13;i ++){ if(x.getNumber().equals(numbers[i])) value1 = i; } for(int i = 0;i < 4;i ++){ if(x.getColor().equals(colors[i])) color1 = i; } for(int i = 0;i < 13;i ++){ if(y.getNumber().equals(numbers[i])) value2 = i; } for(int i = 0;i < 4;i ++){ if(y.getColor().equals(colors[i])) color2 = i; } if(value1 > value2){ return 1; }else if(value1 < value2){ return 2; }else{ if(color1 > color2){ return 1; }else{ return 2; } } } /* * 判断结果 */ public void result(){ int result = 0; Card card1,card2;//用于存放两张手牌 Card max1,max2;//用于存放两玩家最大手牌 //判断玩家一最大手牌 card1 = playerList.get(0).cardList.get(0); card2 = playerList.get(0).cardList.get(1); result = compare(card1,card2); if(result == 1){ System.out.println("玩家一最大的手牌是" + card1.getColor() + card1.getNumber()); max1 = card1; }else{ System.out.println("玩家一最大的手牌是" + card2.getColor() + card2.getNumber()); max1 = card2; } //判断玩家二最大手牌 card1 = playerList.get(1).cardList.get(0); card2 = playerList.get(1).cardList.get(1); result = compare(card1,card2); if(result == 1){ System.out.println("玩家一最大的手牌是" + card1.getColor() + card1.getNumber()); max2 = card1; }else{ System.out.println("玩家一最大的手牌是" + card2.getColor() + card2.getNumber()); max2 = card2; } //判断两玩家最大手牌的大小 result = compare(max1,max2); if(result == 1) System.out.println("玩家" + playerList.get(0).getName() + "胜"); if(result == 2) System.out.println("玩家" + playerList.get(1).getName() + "胜"); } }