前言

今天下午上班的时候脑海里无意间闪过了家里长辈们逢年过节时在桌前的牌局娱乐行为,有麻将、扑克等。小时候不以为然,长大后才慢慢意识到这种娱乐行为给家庭带来的危害【指输赢比较大的牌局】。我花了1个小时的时间模拟了“斗牛”扑克牌游戏的实现,尽管是非常简陋的程序,但我任有操控后台的手段使玩家的胜率为0,更何况是复杂的人心。

斗牛规则

常规的斗牛规则相信大家了解一二,由于本人水平和时间的关系,我并没有将细节全部实现。程序设计方面也有所欠缺,望大家海涵。

庄家与玩家各发5张牌,2 - 10 为牌面值,A 代表 1,J、Q、K代表10,计算5张牌总和

3张牌总和需满足 sum % 10 == 0

sum <= 10 :五小牛 (输赢翻5倍)

sum % 10 == 0 :牛牛 (输赢翻4倍)

sum % 10 == 9 :牛9 (输赢翻3倍)

sum % 10 == 8 :牛8 (输赢翻2倍)

1 <= sum % 10 < 8 :(输赢翻1倍)

每局固定押注10000¥

斗牛v0.1

程序运行效果如下

  • 输入1

  • 输入2

下面来看看实现程序的三个类

  • 玩家类
@Data
public class Person {// 昵称private String name;// 账户余额private int money;public Person(String name, int money) {this.name = name;this.money = money;}}
  • 卡片类
public class Card {/* 构造cards所需条件 */private static final String[] color = {"♣", "♦", "♠", "♥"};private static final String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};// 所有的cardsprivate static final List<String> cards = new ArrayList<>(52);// 维护所有的翻倍条件private static final Map<String, Integer> ruleMap = new HashMap<>();static {// 初始化所有卡片for (int i = 0; i < numbers.length; i++) {for (int j = 0; j < color.length; j++) {cards.add(color[j] + numbers[i]);}}// 初始化所有翻倍条件ruleMap.put("五小牛", 5);ruleMap.put("牛牛", 4);ruleMap.put("牛9", 3);ruleMap.put("牛8", 2);ruleMap.put("牛7", 1);ruleMap.put("牛6", 0);ruleMap.put("牛5", -1);ruleMap.put("牛4", -2);ruleMap.put("牛3", -3);ruleMap.put("牛2", -4);ruleMap.put("牛1", -5);ruleMap.put("无牛", -6);}/*** 得到两组 5 张卡片的数组* @param cards 卡片集合* @return*/public String[][] getFiveCard(List<String> cards) {// 洗牌Collections.shuffle(cards);String[][] res = new String[2][5];int index = 0;for (int i = 0; i < res.length; i++) {for (int j = 0; j < res[0].length; j++) {res[i][j] = cards.get(index);index++;}}return res;}/*** 获取牌面对应的【牛】* @param nums 5张卡片的数组* @return*/public String getSkill(String[] nums) {// ["♠5", "♣10"]int sum = 0;List<Integer> integerList = new ArrayList<>();for (String num : nums) {String indexNum = num.substring(1);// JQKA对应数字转换String number = convertJQKA(indexNum);// 求和sum += Integer.parseInt(number);integerList.add(Integer.parseInt(number));}String nForSum = computeNForSum(sum);boolean hasN = hasN(integerList);// 若有牛则返回if (hasN || nForSum.equals("五小牛")) {return nForSum;}return "无牛";}/*** 判断三张牌是否满足有牛需求 sum % 10 == 0* @param numbers* @return*/private static boolean hasN(List<Integer> numbers) {int size = numbers.size();for (int i = 0; i < size; i++) {for (int j = i + 1; j < size; j++) {for (int k = j + 1; k < size; k++) {int sum = numbers.get(i) + numbers.get(j) + numbers.get(k);if (sum % 10 == 0) {return true;}}}}return false;}/*** JQKA对应数字转换* @param num* @return*/private String convertJQKA(String num) {String res = num;if (num.equals("J") || num.equals("Q") || num.equals("K")) {res = "10";} else if (num.equals("A")) {res = "1";}return res;}/*** 计算牌面【牛】* @param sum* @return*/private String computeNForSum(int sum) {String res = "";if (sum <= 10) {res = "五小牛";} else if (sum % 10 == 0) {res = "牛牛";} else {res = "牛" + (sum % 10);}return res;}public static List<String> getCards() {return cards;}/*** 比较boss与person间的牌面* @param skillBoss boss的牌面* @param boss* @param skillPerson person的牌面* @param person*/public static void compare(String skillBoss, Person boss, String skillPerson, Person person) {// 获取牌面对应倍数Integer intBoss = ruleMap.get(skillBoss);Integer intPerson = ruleMap.get(skillPerson);if (intBoss >= intPerson) {// 如果倍数小于等于1 则置为1方便计算输赢if (intBoss <= 1) {intBoss = 1;}System.out.println("本局 " + boss.getName() + " 获胜~");System.out.println(person.getName() + "在本局输掉了 " + 10000 * intBoss + "¥");person.setMoney(person.getMoney() - 10000 * intBoss);System.out.println(person.getName() + "当前账户余额: " + person.getMoney() + "¥");boss.setMoney(boss.getMoney() + 10000 * intBoss);System.out.println(boss.getName() + "当前账户余额: " + boss.getMoney() + "¥");System.out.println("赌博违法,十赌九输!");} else {if (intPerson <= 1) {intPerson = 1;}System.out.println("本局 " + person.getName() + " 获胜~");System.out.println(person.getName() + "在本局赢了 " + 10000 * intPerson + "¥");person.setMoney(person.getMoney() + 10000 * intPerson);System.out.println(person.getName() + "当前账户余额: " + person.getMoney() + "¥");boss.setMoney(boss.getMoney() - 10000 * intPerson);System.out.println(boss.getName() + "当前账户余额: " + boss.getMoney() + "¥");System.out.println("赌博违法,十赌九输!");}}}
  • 斗牛APP
public class DN_App {public static void main(String[] args) {Person boss = new Person("黄老板", 20000000);Person lly = new Person("卢姥爷", 200000);System.out.println("经典语录【doge】");System.out.println("你们可能不知道只用20万赢到578万是什么概念,我们一般只会用两个字来形容这种人:赌怪。\n" +"我经常说一句话,当年陈刀仔他能用20块赢到3700万,我卢本伟用20万赢到500万,不是问题。");System.out.println();Scanner scanner = new Scanner(System.in);while (true) {System.out.println("===========欢迎来到斗牛game v0.1 ===========");System.out.println("===========   请输入你的选择   ===========");System.out.println("1:开始游戏");System.out.println("2:退出游戏");int choose = scanner.nextInt();if (choose == 1) {Card card = new Card();String[][] fiveCard = card.getFiveCard(Card.getCards());System.out.println(boss.getName() + "的牌如下: ");System.out.println(Arrays.toString(fiveCard[0]));String skillBoss = card.getSkill(fiveCard[0]);System.out.println("\t" + skillBoss);System.out.println(lly.getName() + "的牌如下: ");System.out.println(Arrays.toString(fiveCard[1]));String skillLLY = card.getSkill(fiveCard[1]);System.out.println("\t" + skillLLY);Card.compare(skillBoss, boss, skillLLY, lly);if (lly.getMoney() <= 0) {System.out.println(lly.getName() + "已经输光了所有钱...game over!");break;}} else if (choose == 2) {System.out.println("珍爱生命,远离赌博~");System.out.println("小赌怡情,大赌伤财,强赌灰飞烟灭~");break;}}}
}

结语

开发上述程序纯属个人兴趣,目的也是希望各位远离赌博,拥抱阳光~

不知不觉又到周五了,希望大家过一个愉快的周末~

摸鱼一小时实现的斗牛Game【Java版】,希望各位友友远离赌博~相关推荐

  1. 程序员每天工作摸鱼俩小时,月薪35K?

    职场上有很多奇奇怪怪的事. 比如说有人爆肝996,工资却还养不活自己.有人每天工作摸鱼,但是却月薪数万.前端时间,小编在某职场社交平台上看到这么一则帖子#程序员摸鱼2小时月入35k# 仔细看下,该员工 ...

  2. 【摸鱼神器】基于SSM风格的Java源代码生成器 单表生成 一对一、一对多、多对多连接查询生成

    一.序言 UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器.代码生成器模块属于可拆卸模块,即按需引入.代码生成器生成SSM(Spring.SpringBoot.Myb ...

  3. 今日任务,摸鱼到下班

    逢年过节 穷得响叮当的我 掏空了口袋也没找到什么好礼相送 想来在长假前的最后一天 大多数人的肉体虽还在办公室 但心早已飘到九霄云外 所以我们就依照惯例 为大家献上能让大伙充实度过今天的 办公摸鱼神器3 ...

  4. 摸鱼方法合集(无需编程基础)

    摸鱼方法合集(无需编程基础) 1.[摸鱼中国]抓鱼鸭(网页版) 2.伪装电脑升级界面 网页版(Windows&Mac) 软件版(Windows) 3.无意义活动生成器(Windows) 4.文 ...

  5. iOS摸鱼周报 第二十五期

    本期概要 话题:本期跟竹立交流一下关于求职和学习方法的话题. Tips:如何清除启动图的缓存:如何优化 SwiftLint 流程. 面试模块:本期解析一道 GCD 死锁题. 优秀博客:整理了 Swif ...

  6. 自从掌握了软件开发的 5 条核心原则,我每天工作时至少可以多摸鱼 4 个小时

    作为一名程序员,小伙伴们有没有想过这个简单的问题,"软件是什么?"可以闭上眼睛让自己想一会,如果觉得有点抽象不太好回答的话,来看看我的答案. 软件 = 程序 + 数据 + 文档 + ...

  7. AI化身监工,上班还能摸鱼吗?

    来源 | 人民数字FINTECH 责编 | 晋兆雨 头图 | CSDN 下载自视觉中国 俗话说"上班摸鱼一时爽,一直摸鱼一直爽." 上班族这群"时间管理大师们" ...

  8. 为了上班摸鱼,我用Python开发“BOSS来了”

    作为打工人来说,特别是996,.007的工作,除了干饭之外,最紧张刺激的莫过于上班的时候偶尔偷偷闲,去池塘里面摸摸鱼. 996摸鱼 一般人摸得哪些鱼呢?聊天.微博.微信朋友圈.小游戏.小说.股票基金等 ...

  9. 炸裂!VSCode 摸鱼神器!!!

    来源:玩转Github本文约1600字,建议阅读5分钟 除了开发插件外,有哪些可以上班摸鱼的插件呢?这里给大家写一个渔夫指南,汇总一些在VSCode中可以"摸鱼"的好玩插件! 现在 ...

最新文章

  1. SparkSQL Spark on Hive Hive on Spark
  2. 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory
  3. 在狮驼岭,孙悟空救了猪八戒,猪八戒为何不帮孙悟空?
  4. Eclipse中SVN过滤指定文件夹或文件下内容
  5. SQL优化笔记(二)—CPU优化
  6. oracle数据库从入门到精通
  7. C# DevExpress ChartControl用法总结
  8. 如何用PS的量度标尺工具调整图片
  9. 【读书笔记】统计学:从数据到结论 第七章
  10. html 画 斜线表头,HTML 斜线 表头
  11. Android开发 匹配软键盘回车键
  12. 六十星系之54廉贞破军坐卯酉
  13. 今日头条 推荐机制实现
  14. python编程语言特点有哪些-Python语言的特点有哪些?九大特点介绍!
  15. Power Apps遇到问题整理
  16. 浅谈微分求导+泰勒展开+生成函数
  17. IDS入侵检测IPS入侵防御
  18. Mitaka正式发布 盘点OpenStack中国贡献
  19. 唠唠SE的集合-01——Collection接口
  20. bnu1257 全能的福娃 C语言版

热门文章

  1. 在本地存储中存入和取出对象
  2. 尚硅谷 SpringCloud 第二季学习笔记【已完结】
  3. 利用Chrome在PC电脑上模拟微信内置浏览器
  4. IjkPlayer播放器秒开优化以及常用Option设置
  5. Mybatis错误Illegal overloaded gette
  6. 开关磁阻电机控制仿真 开关磁阻电机传统控制:电流斩波控制、电压PWM控制、角度位置控制。 智能控制:12/8三相开关磁阻电机有限元分析本体建模
  7. 交乘项专题:主效应项可以忽略吗?
  8. lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章
  9. 扎克伯格----转自Jessica巨人
  10. 电子元器件手册中assert和deassert的含义