当前位置: 首页 > news >正文

Java基础(二十一)十点半游戏

十点半游戏

十点半是一种流行的纸牌游戏,可以说是一种变体的二十一点游戏。游戏的规则是,每个玩家根据所拿到的牌点数的总和来决定是否继续要牌。目标是尽量接近但不超过十点半的点数,超过十点半即为爆牌。如果两名玩家都未爆牌,则点数更接近十点半的人获胜。这个游戏非常简单且容易上手,适合多人一起娱乐。
代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Poker {private static final List<String> suits = Arrays.asList("♠", "♥", "♦", "♣");  // 花色private static final List<String> ranks = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "小王", "大王");  // 点数private List<String> deck;private Boolean isComplete;public Poker() {this(true);}public Poker(boolean isComplete) {deck = new ArrayList<>();  // 扑克牌// 向扑克牌列表中储存元素for (String suit : suits) {for (String rank : ranks.subList(0, 13)) {String card = suit + rank;deck.add(card);}}if (isComplete) {deck.add("大王");deck.add("小王");}}public List<String> getDeck() {return deck;}
}
import java.util.*;/*** @author BXB*/
public class Game {public static void main(String[] args) {List<String> poker = new Poker(false).getDeck();shuffle(poker);gameing(poker);}// 进行游戏public static void gameing(List<String> poker){ArrayList<String> player = new ArrayList<>();ArrayList<String> bot = new ArrayList<>();boolean isTermination = true;Scanner input = new Scanner(System.in);// 玩家发牌do {player.add(poker.get(0));  // 向玩家发牌System.out.println(player);poker.remove(0);  // 去除已经发出去的牌if (countPoints(player) > 10.5) {break;}System.out.println("还要继续取牌吗?(Y or N)");if ("N".equals(input.next())) {isTermination = false;}} while (isTermination);if (isWin(player)) {System.out.println("你赢了,恭喜恭喜");System.out.println(bot);} else if (countPoints2(player) <= 10.5) {// 机器人取牌while (countPoints2(bot) <= countPoints2(player) && countPoints2(bot) != 10.5) {bot.add(poker.get(0));poker.remove(0);}// 判断机器人是否赢了if (isLost(bot)) {System.out.println("机器人输了\n" + bot);} else if (isWin(bot) || isWin(bot, player)) {System.out.println("机器人赢了\n" + bot);} else {System.out.println("你赢了,恭喜恭喜\n" + bot);}} else {System.out.println("你输了");}}// 洗牌public static void shuffle(List<String> list) {for (int i = 0; i < 3; i++) {// System.currentTimeMillis() 来设置随机种子。每一次运行程序时都会使用不同的随机种子,从而产生更随机的结果。Collections.shuffle(list, new Random(System.currentTimeMillis()));}}// 计算点数和2public static double countPoints2(List<String> list) {List<String> ranks = Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K");  // 点数double count = 0;// 匿名函数中局部变量 count 必须声明为 final 或者实际上是 final 的(即该变量值不可更改)。for (String str : list) {str = str.replaceAll("[♠♥♦♣]", "");  // 去除花色switch (str) {case "A" -> count += 1;case "J","Q","K" -> count += 0.5;default -> count += Double.parseDouble(str);}}return count;}// 判断输赢public static boolean isLost(List<String> list) {if (countPoints2(list) > 10.5) {return true;}return false;}public static boolean isWin(List<String> list) {if (countPoints2(list) > 10.5) {return false;} else if (list.size() == 5) {return true;}return false;}public static boolean isWin(List<String> list, List<String> botList) {return countPoints2(list) > countPoints2(botList);}
}
http://www.lryc.cn/news/162760.html

相关文章:

  • 第8节-PhotoShop基础课程-常用快捷键汇总
  • Redis带你深入学习数据类型set
  • Json“牵手”易贝商品详情数据方法,易贝商品详情API接口,易贝API申请指南
  • 《AI一键生成抖音商品种草文案》让你秒变带货王!
  • 博客系统(升级(Spring))(二)获取当前用户信息、对密码进行加密、设置统一数据格式、设置未登录拦截、线程池
  • Postman接口测试工具
  • appium+jenkins实例构建
  • c#中字段和属性的区别,委托和事件的区别
  • 香橙派使用外设驱动库wiringOP来驱动蜂鸣器
  • 微信小程序Day3笔记
  • 大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)
  • [论文笔记]BiMPM
  • JS判断当前是早上,中午,下午还是晚上
  • 使用Docker部署Gitlab的记录
  • Spark【Spark SQL(二)RDD转换DataFrame、Spark SQL读写数据库 】
  • LabVIEW检测润滑油中的水分和铁颗粒
  • 【新版】系统架构设计师 - 软件架构设计<SOA与微服务>
  • React+Typescript+react-router 6 创建路由操作
  • 前端list.push,封装多个对象
  • 指令延迟隐藏
  • 《React vs. Vue vs. Angular:2023年的全面比较》
  • win10自带wifi共享功能
  • React如何实现国际化?
  • netrw模拟nerdtree的go命令连续打开多个文件
  • 算法通关村第十九关——动态规划高频问题(白银)
  • Matlab如何导入Excel数据并进行FFT变换
  • 华为mate60 上线 媒介盒子多家媒体报道
  • Java知识总结(持续更新)
  • 缓存技术:加速应用,提高用户体验
  • MySQL中分区与分表的区别