java实现简易扑克牌游戏

Java实现简易扑克牌游戏攻略

简述本游戏

本游戏为一款基于Java的简易扑克牌游戏,玩家可以通过交互式的界面进行牌局游戏。游戏规则沿用经典扑克牌规则,有四个花色(黑桃、红桃、梅花、方块),每个花色下面有十三张牌(A、2、3、4、5、6、7、8、9、10、J、Q、K),共五十二张牌。

游戏实现逻辑

  • 创建一个52张牌的扑克牌集合,包含所有牌的花色和点数;
  • 打乱扑克牌集合,即将牌集合的元素随机排序,这样每次的发牌顺序就不同;
  • 实例化两个List存储玩家的牌和庄家的牌,每次从牌集合中顺序取出一张牌,放入玩家和庄家对应的List中,重复操作直到每个人各拥有两张手牌;
  • 计算玩家手牌的点数与庄家首张牌的点数,显示给玩家查看,玩家可以根据手牌点数决定是否继续要牌;
  • 玩家可以选择继续要牌,每次从牌集合中顺序取出一张牌,放入玩家的手牌List中;
  • 当玩家停止要牌,或玩家A获得的总点数超过21点时,庄家开始出牌;
  • 庄家如果手牌点数小于17,庄家必须继续要牌,每次从牌集合中顺序取出一张牌,放入庄家的牌List中,直到庄家手牌点数达到17点或更高为止;
  • 比较玩家A与庄家手牌的点数大小,判断胜负并展示。

代码实现

以下是主要的代码实现逻辑,包括扑克牌集合初始话、洗牌、发牌和计算牌面点数等:

// 创建扑克牌集合
List<String> pokerList = new ArrayList<String>();
String[] colors = {"黑桃", "红心", "梅花", "方块"};
String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
for(String color : colors){
    for(String number : numbers){
        pokerList.add(color + number);
    }
}

// 洗牌
Collections.shuffle(pokerList);

// 发牌
List<String> playerCards = new ArrayList<String>();
List<String> dealerCards = new ArrayList<String>();
playerCards.add(pokerList.remove(0));
dealerCards.add(pokerList.remove(0));
playerCards.add(pokerList.remove(0));
dealerCards.add(pokerList.remove(0));

// 计算手牌点数
public static int calculatePoints(List<String> cards){
    int points = 0;
    int aceNum = 0; // 记录A的个数
    for(String card : cards){
        String cardValue = card.substring(2);
        if("JQK".contains(cardValue)){
            points += 10;
        }
        else if(cardValue.equals("A")){
            aceNum++;
            points += 1; // A暂记为1点
        }
        else{
            points += Integer.parseInt(cardValue);
        }
    }
    // 处理A的点数(当手牌点数小于等于11时,A记为11点)
    for(int i = 0; i < aceNum; i++){
        if(points <= 10){
            points += 11;
        }
        else{
            points += 1;
        }
    }
    return points;
}

示例说明

以下是两个示例说明:一次玩家胜,一次庄家胜。

玩家获胜

游戏开始,玩家A先得到两张手牌:红桃5和方块8。

玩家A获得的手牌为:
红桃5
方块8

根据规则计算手牌点数:5+8=13点,根据点数选择相应的操作(下一步是否要牌),因为手牌点数较低,选择要牌。玩家请求要一张牌:

玩家A获得的手牌为:
红桃5
方块8
黑桃8

玩家A获得了一张黑桃8,根据规则计算手牌点数:5+8+8=21点,达到最大点数,玩家不想要牌,此时庄家逐张发牌,得到手牌黑桃3和黑桃J。

庄家获得的手牌为:
黑桃3
黑桃J

根据规则计算庄家手牌点数:3+10=13点,此时根据庄家牌点数,庄家必须继续要牌。庄家请求要一张牌:

庄家获得的手牌为:
黑桃3
黑桃J
方块5

庄家获得了方块5,根据规则计算庄家手牌点数:3+10+5=18点,达到17点以上,庄家不需要要牌。比较玩家和庄家的手牌:玩家21点,庄家18点。玩家A获胜!

庄家获胜

游戏开始,玩家A先得到两张手牌:梅花7和黑桃J。

玩家A获得的手牌为:
梅花7
黑桃J

根据规则计算手牌点数:7+10=17点,达到最小点数,玩家不想要牌,此时庄家逐张发牌,得到手牌梅花K和红桃3。

庄家获得的手牌为:
梅花K
红桃3

根据规则计算庄家手牌点数:10+3=13点,此时根据庄家牌点数,庄家必须继续要牌。庄家请求要一张牌:

庄家获得的手牌为:
梅花K
红桃3
黑桃4

庄家获得了黑桃4,根据规则计算庄家手牌点数:10+3+4=17点,达到17点最小标准,庄家不需要要牌。比较玩家和庄家的手牌:玩家17点,庄家17点。玩家A输了!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简易扑克牌游戏 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 一文详解Tomcat下载安装以及配置

    一文详解Tomcat下载安装以及配置 Apache Tomcat(简称Tomcat)是一个流行的开源Web服务器和Java Servlet容器,可运行于各种操作系统上。本文将提供完整的Tomcat下载、安装和配置教程。 步骤一:下载Tomcat 首先,访问官方网站,进入Tomcat下载页面。选择最新版本的Tomcat,然后在下载页面中选择“Core”板块中的…

    Java 2023年6月2日
    00
  • Spring Security前后分离校验token的实现方法

    下面是关于“Spring Security前后分离校验token的实现方法”的完整攻略。 一、背景介绍 在现代化的Web项目中,前后端分离趋势越来越流行。在这种架构模式下,前端会向后端发送HTTP请求以获取或更新数据,而后端作为API的提供者,主要职责是处理这些请求并返回响应。同时,在处理这些请求时,后端需要确保只有已登录的用户才能访问被保护的资源。 在这种…

    Java 2023年6月3日
    00
  • SpringBoot如何根据用户系统时区动态展示时间

    首先,在SpringBoot中获取当前用户的时区,一般采用以下方式: @RequestMapping("/getTime") public String getTime(HttpServletRequest request) { TimeZone timeZone = (TimeZone) request.getSession().get…

    Java 2023年5月20日
    00
  • EasyUI框架 使用Ajax提交注册信息的实现代码

    接下来我将详细讲解“EasyUI框架 使用Ajax提交注册信息的实现代码”的完整攻略。 首先,我们需要在我们的网页中引入EasyUI框架的JavaScript和CSS文件,可以使用以下链接引入: <link rel="stylesheet" type="text/css" href="https://c…

    Java 2023年5月20日
    00
  • 关于CSS自定义属性与前端页面的主题切换问题

    下面我来详细讲解关于CSS自定义属性与前端页面的主题切换问题的完整攻略。 什么是CSS自定义属性? CSS自定义属性(CSS Custom Properties)是CSS3新增的一项功能,它可以让我们在CSS中定义自己的属性,然后在其他地方使用它们。 要使用CSS自定义属性,首先需要使用–作为前缀定义一个属性名称,接着可以为该属性设置一个默认值,例如: :…

    Java 2023年6月15日
    00
  • Java7之forkjoin简介_动力节点Java学院整理

    首先,我们需要了解什么是Fork/Join框架。简单来说,它是Java7中提供的一种用于实现并发编程的框架,通过将一个大任务拆分成多个子任务,然后将这些子任务分别交给不同的线程执行,最后将子任务的结果合并得到大任务的结果,从而提高程序的执行效率。 接下来,我们详细介绍一下如何使用Fork/Join框架来实现并发编程。首先需要创建一个继承自java.util.…

    Java 2023年5月26日
    00
  • 替换jar包未重启引起的系统宕机事件

    一、事件背景: 某天凌晨,一阵急促的铃声将我从周公那里拉了过来,接听电话后,一脸懵逼。 什么情况?XX后台宕机了?当日日志也不打印了,前端发起的请求,都报超时,重启后又恢复了,不清楚会不会再次宕机。 出现这种情况,我第一时间想的是为什么是00:00:00宕机?难道后台嫌我这个大龄程序员睡得早了? 然后是通过远程视频,看日志,排查了凌晨之前的日志里的所有异常,…

    Java 2023年4月18日
    00
  • Mybatis之@ResultMap,@Results,@Result注解的使用

    Mybatis是一款优秀的ORM框架,它提供了丰富的注解来进行对象和数据库的映射。其中@ResultMap、@Results、@Result三个注解是使用频率较高的几个。下面将详细讲解它们的使用方法及示例。 一、@ResultMap注解的使用 @ResultMap注解用于引用一个已经定义好的resultMap,在查询时用作查询结果集的映射。resultMap…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部