3条回答 默认 最新
- Jackyin0720 2022-12-08 07:59关注
首先理解题意思路:
此游戏是一个简单的并且很基础的java控制台程序。这个扑克牌游戏主要的游戏过程是:首先创建一副扑克牌,创建好了后要进行洗牌,牌洗好了,需要玩家来玩,接下来就创建玩家。有洗好的牌,也有玩家了,那么就开始发牌,发完牌后,比较玩家中手牌的大小,大的那一位获胜。
下面是代码:
首先创建一个扑克牌类,扑克牌主要有两个属性,一个是点数,一个是花色。给点数和花色生成getter和setter。然后重载构造函数,一个无参的,一个有参的。在最后还重写了equals方法,判断两个扑克牌是否相等。public class Poker { private String point; private String color; public Poker(){ } public Poker(String point,String color){ this.point = point; this.color = color; } public String getPoint() { return point; } public void setPoint(String point) { this.point = point; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Poker poker = (Poker) o; return Objects.equals(point, poker.point) && Objects.equals(color, poker.color); } }
接下来我们创建玩家类,玩家拥有三个属性,一个是id,一个name,另一个是手牌。在这个游戏中,我们给每名玩家会发两张牌,所以用List来存放手牌。同样是创建无参构造方法和有参构造方法。然后就是这三个属性的getter和setter。
import java.util.ArrayList; import java.util.List; public class Player { private String id; private String name; private List<Poker> pokers; public Player(){ } public Player(String id,String name){ this.id = id; this.name = name; this.pokers = new ArrayList<Poker>(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Poker> getPokers() { return pokers; } public void setPokers(List<Poker> pokers) { this.pokers = pokers; } }
有了玩家类和扑克类,剩下的就是游戏的主类了。主要的方法有三个,一个是创建玩家createPlayer,一个是洗牌shuffle,另一个是开始游戏的方法play。这个类需要实现Comparator接口,用于比较引用对象的大小。
import java.util.*; public class Main implements Comparator<Poker> { private List<Player> playerList; //玩家列表 private List<Poker> pokerList ; //原始扑克牌列表 private List<Poker> pokerListAfterShuffle; //洗牌后的扑克牌列表 private Scanner console; //输入控制 private String id; //用户输入的id private String name; //用户输入的name private Poker getPoker; //存放发的那张牌 public static void main(String[] args) { Main game = new Main(); game.createPlayer(); game.shuffle(); game.play(); } /** * 在方法的初始化中,给成员变量初始化 */ public Main(){ playerList = new ArrayList<Player>(); pokerList = new ArrayList<Poker>(); pokerListAfterShuffle = new ArrayList<Poker>(); console = new Scanner(System.in); //创建扑克牌,有序的 String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; String[] colors = {"方块","梅花","红桃","黑桃"}; //同花色的扑克牌大小遵循“黑红梅方”的规定 for (String point : points){ for (String color : colors){ Poker poker = new Poker(point,color); pokerList.add(poker); } } } /** * 创建玩家,一共两个玩家 */ public void createPlayer(){ System.out.println("----------创建玩家----------"); for (int i = 1; i<3;i++){ System.out.println("请输入第" + i + "位玩家信息:"); System.out.println("请输入玩家id:"); id = console.next(); System.out.println("请输入玩家name:"); name = console.next(); playerList.add(new Player(id,name)); } for (Player player : playerList){ System.out.println("欢迎玩家:" + player.getName()); } } /** * 因为实现了接口Comparator,所以需要重写compare方法, * 在后面给扑克牌排序的时候,会调用 * @param o1 * @param o2 * @return */ @Override public int compare(Poker o1, Poker o2) { if (pokerList.indexOf(o1)>pokerList.indexOf(o2)){ return 1; } return -1; } /** * 洗牌 * 洗牌的方式是:将生成的有序的扑克牌,利用随机数,一张一张的抽取出来 * 放在pokerListAfterShuffle列表中 */ public void shuffle(){ //创建一个随机数 Random random = new Random(); Poker poker = new Poker(); System.out.println("----------开始洗牌----------"); for (int i = 0;i<pokerList.size();i++){ //避免重复添加同一张牌,在添加之前,检查洗牌后的列表中是否已经存在此牌 do { //随机数的随机范围,是原始扑克牌列表的大小 int position = random.nextInt(pokerList.size()); poker = pokerList.get(position); }while (pokerListAfterShuffle.contains(poker)); //如果没有重复,将此牌添加进去 pokerListAfterShuffle.add(poker); } System.out.println("----------洗牌结束----------"); } /** * 开始游戏,发牌,比较大小 */ public void play(){ System.out.println("----------开始发牌----------"); for (int i = 0;i<2;i++){ for (int j = 0;j<2;j++){ System.out.println("玩家" + playerList.get(j).getName() + "拿牌"); getPoker = pokerListAfterShuffle.get(i*2+j); playerList.get(j).getPokers().add(getPoker); } } System.out.println("----------发牌结束----------"); //对两位玩家中的手牌进行排序,后面那一张就是手中牌最大的 Collections.sort(playerList.get(0).getPokers(),new Main()); Collections.sort(playerList.get(1).getPokers(),new Main()); System.out.println("----------玩家各自手牌为----------"); for(int i =0;i<2;i++){ for (int j = 0;j<2;j++){ System.out.println(playerList.get(i).getName() + playerList.get(i).getPokers().get(j).getColor() + playerList.get(i).getPokers().get(j).getPoint()); } } //因为原始的扑克牌是升序,利用在原始扑克牌列表中位置,判断出谁大谁小。 System.out.println("----------比较大小----------"); if (pokerList.indexOf(playerList.get(0).getPokers().get(1))>pokerList.indexOf(playerList.get(1) .getPokers().get(1))){ System.out.println("玩家" + playerList.get(0).getName() + "获胜"); }else System.out.println("玩家" + playerList.get(1).getName() + "获胜"); System.out.println("----------游戏结束----------"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于#python#的问题,请各位专家解答!
- ¥15 对于这个问题的解释说明
- ¥200 询问:python实现大地主题正反算的程序设计,有偿
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥20 java在应用程序里获取不到扬声器设备