问题描述

  • 创建一副扑克牌,包含四种花色:黑桃、红桃、梅花、方片。十三种点数:2-10,J、Q、K、A,不考虑大小王。
  • 创建两名玩家。玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
  • 洗牌。将之前创建的”一副扑克牌”打乱顺序
  • 将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
  • 游戏。比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按花色比较。

根据描述,将抽象出Card类(一张扑克),Poker类(扑克牌类),玩家类(Player)和Game类(主类)

package com.starlet.poker;/*** 卡片类(一张扑克)* @author 刘佳星 jiaxing747@163.com* */
public class Card implements Comparable<Card> {private String suie; //花色private int face; //点数public Card(String suie, int face) {this.suie = suie;this.face = face;}/*** 重写toString方法,处理AJQK,把当前对象要显示的信息格式设置成“花色+点数”的形式*/@Overridepublic String toString() {String faceStr = "";switch(face) {case 1 : faceStr="A"; break; case 11 : faceStr="J"; break; case 12 : faceStr="Q"; break; case 13 : faceStr="K"; break; default : faceStr=String.valueOf(face);}return suie + faceStr ;}public String getSuie() {return suie;}public void setSuie(String suie) {this.suie = suie;}public int getFace() {return face;}public void setFace(int face) {this.face = face;}/*** 卡片比较规则。花色的比较可能有问题...*/@Overridepublic int compareTo(Card o) {if(this.face == o.face) {return this.suie.compareTo(o.suie);}return this.face - o.face;}}
package com.starlet.poker;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 扑克类(一副扑克)* @author 刘佳星 jiaxing747@163.com**/
public class Poker {private String[] colors = {"黑桃","红桃","梅花","方片"};private List<Card> cards;/*** 在构造方法中生成一副扑克牌,存储在cards中*/public Poker() {cards = new ArrayList<Card>();for(int i=0; i<colors.length; i++) {for(int j=0; j<13; j++) {cards.add(i*13+j, new Card(colors[i],j+1));}}}/*** 洗牌*/public void shuffle() {// 扑克牌列表长度int length = cards.size();Random random = new Random();for(int i=0; i<length; i++) {// 交换index位置和i位置的Card,实现洗牌int index = random.nextInt(length);Card temp = cards.get(index);cards.set(index, cards.get(i));cards.set(i, temp);}}/*** 发牌* @param index 发牌的位置* @return index位置的牌*/public Card deal(int index) {return cards.get(index);}public String[] getColors() {return colors;}public void setColors(String[] colors) {this.colors = colors;}public List<Card> getCards() {return cards;}public void setCards(List<Card> cards) {this.cards = cards;}}
package com.starlet.poker;import java.util.List;/*** 玩家* @author 刘佳星 jiaxing747@163.com**/
public class Player {private String id;//玩家IDprivate String name;//玩家姓名private List<Card> cards;//玩家手牌public Player(String id, String name) {this.id = id;this.name = name;}public Player() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Card> getCards() {return cards;}public void setCards(List<Card> cards) {this.cards = cards;}public String getId() {return id;}public void setId(String id) {this.id = id;}}
package com.starlet.poker;import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;public class Game {public static void main(String[] args) {System.out.println("----------------创建扑克牌----------------");//在Poker的构造方法中创建扑克牌Poker poker = new Poker();System.out.println("----------------创建扑克牌成功!----------------");//重写了Card类的toString方法,可以输出形如:[梅花A, 梅花2....]System.out.println("为:" + poker.getCards());System.out.println("----------------开始洗牌...----------------");//洗牌就是随机交换List中元素的位置poker.shuffle();System.out.println("----------------洗牌结束----------------");System.out.println("----------------创建玩家...----------------");//玩家列表List<Player> playerList = new ArrayList<Player>();for(int i=0; i<2; i++) {System.out.println("请输入第" + (i+1) + "位玩家的ID和姓名:");int id=0;boolean isCatch = false;do {try{System.out.println("输入ID:");isCatch = false;//这里要重新创建Scanner,经过断点调试发现如果不重新创建,下一次循环程序不会停下。Scanner console = new Scanner(System.in);id = console.nextInt();} catch(InputMismatchException e) {System.out.println("请输入整数类型ID:");isCatch = true;}} while(isCatch);System.out.println("输入姓名:");Scanner console = new Scanner(System.in);String name = console.next();Player player = new Player(id, name);//把创建的玩家添加到玩家列表playerList.add(player);System.out.println("----欢迎玩家:" + player.getName());}System.out.println("-------------------开始发牌-----------------------");Player player1 = playerList.get(0);Player player2 = playerList.get(1);//存储玩家1的牌,由于只有两个玩家,两张牌,就直接按逻辑写了。List<Card> player1Cards = new ArrayList<Card>(); //存储玩家2的牌List<Card> player2Cards = new ArrayList<Card>(); //玩家依次抓牌,抓了前4张牌System.out.println("----玩家:" + player1.getName() + "-拿牌");player1Cards.add(poker.deal(0));System.out.println("----玩家:" + player2.getName() + "-拿牌");player2Cards.add(poker.deal(1));System.out.println("----玩家:" + player1.getName() + "-拿牌");player1Cards.add(poker.deal(2));System.out.println("----玩家:" + player2.getName() + "-拿牌");player2Cards.add(poker.deal(3));//把牌交给玩家player1.setCards(player1Cards);player2.setCards(player2Cards);//玩家自己的牌进行升序排列Collections.sort(player1.getCards());Collections.sort(player2.getCards());System.out.println("玩家:" + player1.getName() + "最大的手牌为:" + player1.getCards().get(1));System.out.println("玩家:" + player2.getName() + "最大的手牌为:" + player2.getCards().get(1));//把每个玩家最大的牌取出来,放到winPlay列表中。之后进行排序List<Card> winPlay = new ArrayList<Card>();winPlay.add(player1.getCards().get(1));winPlay.add(player2.getCards().get(1));Collections.sort(winPlay);if(winPlay.get(1).equals(player2.getCards().get(1))) {System.out.println("------------------玩家:" + player2.getName() + "获胜!----------------------");} else{System.out.println("------------------玩家:" + player1.getName() + "获胜!----------------------");}System.out.println("玩家各自的手牌为:");System.out.println(player1.getName()+":"+player1.getCards());System.out.println(player2.getName()+":"+player2.getCards());}}

慕课网简易扑克牌游戏相关推荐

  1. Java入门第三季-综合实战:简易扑克牌游戏

    一.概述 第三季的综合实战部分是写一个简易扑克牌游戏,功能实现要求如下: 1.创建一副扑克牌 包括四种花色: 黑桃 红桃 梅花 方片 十三种点数 2-10,JQKA,不考虑大小王 2.创建两名玩家 玩 ...

  2. 7-1简易扑克牌游戏-洗发牌Easy版

    7-1简易扑克牌游戏-洗发牌Easy版 代码下载地址 http://download.csdn.net/download/qq_29132907/10253247 1.Gamer.java packa ...

  3. 扑克牌游戏java代码_java实现简易扑克牌游戏

    本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2. ...

  4. 简易扑克牌游戏JAVA源码_新手上路

    下面来看看具体代码的实现: 一.entity包 1.裁判类 package entity; /*** 裁判* @author Geek* @version 1.0* @date 2018年6月22日 ...

  5. java编写简易扑克牌游戏

    游戏功能描述 创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 创建两名玩家(or多名) 玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合 将创建 ...

  6. Java简易扑克牌游戏(慕课网作业)

    ===============共四个类======================= package cardGame; /*** --------------------游戏需求说明-------- ...

  7. java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...

    玩家类: package playingCardsGame; import java.util.ArrayList; import java.util.List; /* * 玩家类 */ public ...

  8. java简易扑克牌_简易扑克牌游戏(java)

    //创建扑克牌类 public class PokerCard { public String shapeColor; public String number; } //创建玩家类 import j ...

  9. 发扑克牌java程序_Java实现简易扑克牌游戏

    功能描述 1.创建扑克牌.包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王. 2.创建两个玩家.包括玩家id.姓名.手牌等集合,手牌为扑克牌的集合. 3.洗牌. ...

最新文章

  1. 基于Mybatis,处理多表联合获取
  2. 在Ubuntu下利用Eclipse调试FFmpeg
  3. java在初始化过程_Java初始化过程
  4. 云时代架构--阅读笔记03
  5. Java与C#事件处理详细对比
  6. 前端常见算法的JS实现
  7. uva 11925——Generating Permutations
  8. 【AI研究报告】世界顶级投资银行高盛的AI报告:中国人工智能的现状及创新市场...
  9. SpringBoot源码分析解答问题
  10. Haskell生成数字的LED字符形式
  11. eclipse一些实用小技巧
  12. Android基于mAppWidget实现手绘地图(九)–如何处理地图对象的touch事件
  13. 小红书后台开发岗面试经历复盘
  14. pythonallowpos_基于Python的诗和远方
  15. 高并发中 QPS、TPS、RT、Load、PV、UV都是什么意思!
  16. 爬虫系列,(4),playwright使用说明
  17. AI软件视频生成工具 抖音蓝V运营小助手
  18. 计算机毕业设计php_thinkphp_vue的校园论坛网站
  19. 吸引诸多名人及宫崎骏关注的Meta Rim有何魔力?
  20. 数据库的三级模式和两级映射--简单介绍

热门文章

  1. 王学岗——H265编码原理详解与码流分析(对应第五节课)
  2. 根据染色体的起始位置从gff3文件中提取基因名称
  3. SquirrelMail 汉化
  4. chown dba oracle,改变用户名和群组:chown
  5. 转载--开发端到端的 Ajax 应用程序,第 3 部分: 集成、测试和调试应用程序
  6. C#(Unity)中XML的创建与解析
  7. c/c++代码获取网络时间(从NTP授时服务器获取)
  8. 两DD-WRT组建WDS设置
  9. 《Orange's 一个操作系统的实现》学习笔记--LDT
  10. arduino 学习笔记及课件01基础入门