栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA入门第三季-简易扑克牌程序-菜鸟一枚

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA入门第三季-简易扑克牌程序-菜鸟一枚

类图

演示效果:

源代码
  • Card.java
package com.zzl.test.poker;


public class Card implements Comparable {

    private int pointsScore;  //手牌的点数
    private int colourScore;  //花色的点数
    private String points; //牌的名称
    private String color; //牌的花色

    public Card(int pointsScore, int colourScore, String points, String color) {
 this.pointsScore = pointsScore;
 this.colourScore = colourScore;
 this.points = points;
 this.color = color;
    }

    //重写Comparable类中compareTo()方法
    @Override
    public int compareTo(Card c) {
 //如果点数一样,则比较花色
 if (this.pointsScore == c.pointsScore) {
     //这样定是降序排序,反着写就是升序排序
     return c.colourScore - this.colourScore;
 }
 //比较花色,降序排序,也就是说容器中最大的下标为0
 return c.pointsScore - this.pointsScore;
    }

    @Override
    public String toString() {
 return this.color + this.points;
    }
    
}
  • Poker.java
package com.zzl.test.poker;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Poker {
    private List cards = new ArrayList<>();

    public Poker() {
 createPoker();
 randomPoker();
    }

    
    private void createPoker() {
 System.out.println("-------------创建扑克牌...--------------");
 String[] names = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; //定义一个字符串数组
 String[] colors = {"方片", "梅花", "红桃", "黑桃"};

 for (int i = 0; i < names.length; i++) {
     for (int j = 0; j < colors.length; j++) {
  cards.add(new Card(i, j, names[i], colors[j]));
     }
 }

 System.out.println("-------------扑克牌创建完毕!--------------");
 System.out.println(cards); //输出
    }

    
    public void randomPoker() {
 System.out.println("-------------开始洗牌--------------");
 Collections.shuffle(cards);  //调用Collections类中shuffle()方法就好了
 System.out.println("-------------洗牌结束!--------------");
    }

    
    public Card get(int index) {
 return this.cards.get(index);
    }

    
    public int size() {
 return this.cards.size();
    }

}
  • Player.java
package com.zzl.test.poker;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Player implements Comparable {

    private int id; //玩家ID
    private String name; //玩家姓名
    private Card maxCard; // 玩家手中最大的牌
    private List cards = new ArrayList<>(); //存放玩家手中的牌的容器

    public Player(int id, String name) {
 this.id = id;
 this.name = name;
    }

    public int getId() {
 return id;
    }

    public String getName() {
 return name;
    }

    public List getCards() {
 return cards;
    }

    //获取玩家手中最大的牌的方法
    public Card getMaxCard() {
 if (this.maxCard == null) {
     //先排序,由于重写了Poker类中compareTo()方法,下标为0的为最大值
     Collections.sort(cards);
     this.maxCard = cards.get(0);
 }
 return this.maxCard;
    }

    @Override
    public int compareTo(Player o) {
 // 按照玩家最大的牌进行排序,获取玩家排在最前面
 return this.getMaxCard().compareTo(o.getMaxCard());
    }

    public void add(Card card) {
 System.out.println("--玩家[" + this.getName() + "]拿牌:" + card);
 this.cards.add(card);
    }

    
    public void showMaxCard() {
 System.out.println("玩家[" + this.getName() + "]最大的手牌为:" + this.getMaxCard());
    }

    
    public void showCards() {
 System.out.println(this.getName() + ":" + this.getCards());
    }

}
  • PokerGame.java
package com.zzl.test.poker;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.function.Function;


public class PokerGame {

    private List players = new ArrayList<>(); //用来存放玩家
    private Poker poker = new Poker(); // 整副扑克牌
    private Scanner scanner = new Scanner(System.in); // 接收用户在控制台输入的信息

    
    public void startGame() {
 creatPlayer(); //创建玩家
 dealPoker(); // 发牌
 comparePoker(); //统计
    }

    
    public void creatPlayer() {
 System.out.println("-------------创建玩家...--------------");

 int playerNum = getInput("请输入玩家数量:", playerCount -> {
     if (playerCount < 2) {
  System.out.println("玩家数量最少有2位!请重新输入!");
  return false;
     }
     if (playerCount > poker.size()) {
  System.out.println("输入的玩家数量不能大于扑克牌的数量(" + poker.size() + ")!请重新输入!");
  return false;
     }
     return true;
 });

 for (int i = 1; i <= playerNum; i++) { //这所以写个循环,是为了方便修改玩家的人数,只需改一下循环的判断条件就好了
     System.out.print("请输入第" + i + "位玩家的姓名:");
     players.add(new Player(i, scanner.next()));
 }

 // 输出各位玩家信息
 for (Player player : players) {
     System.out.println("----欢迎玩家:" + player.getName());
 }
    }

    
    public void dealPoker() {
 System.out.println("-------------开始发牌...--------------");

 int cardNum = getInput("请设置给每个玩家发多少张牌:", cardCount -> {
     if (cardCount <= 0) {
  System.out.println("发牌数不能必须大于0,请重新输入!");
  return false;
     }

     if (cardCount * players.size() > poker.size()) {
  System.out.println("非法的发牌数,总发牌数量不能超过扑克牌的数量(" + poker.size() + ")!请重新输入!");
  return false;
     }
     return true;
 });

 int limit = players.size() * cardNum;
 for (int i = 0; i < limit; i++) {
     players.get(i % players.size()).add(poker.get(i));
 }

 System.out.println("-------------发牌结束...--------------");
    }

    
    public void comparePoker() {
 System.out.println("-------------开始统计...--------------");

 players.forEach(Player::showMaxCard);

 Player winner = getWinner();
 System.out.println("-------------玩家[" + winner.getName() + "]获胜!--------------");

 System.out.println("玩家各自的手牌为:");
 players.forEach(Player::showCards);
    }

    private Player getWinner() {
 // 对所有玩家进行排序,排序规则参考Player.compareTo()方法
 Collections.sort(players);
 // 得到获胜玩家
 return players.get(0);
    }

    
    private int getInput(String hint, Function function) {
 while (true) {
     System.out.print(hint);
     try {
  int input = scanner.nextInt();
  if (!function.apply(input)) {
      continue;
  }
  return input;
     } catch (Exception e) {
  System.out.println("输入不合法!请重新输入!");
  // 如果出现异常,则跳过本次输入的信息
  scanner = scanner.skip(".*");
     }
 }
    }
}
  • Test.java

public class Test {
    public static void main(String[] args) {
 new PokerGame().startGame();
    }
}
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号