电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

瀏覽:30日期:2022-08-18 16:11:24

話不多說直接給大家上代碼

package com.company;import java.util.*;/** * 24點(diǎn)小游戲 * 游戲規(guī)則:系統(tǒng)自動(dòng)生成4個(gè)1-10的隨機(jī)整數(shù),玩家通過加減乘除操作,得到結(jié)果為24,每個(gè)數(shù)字只能使用一次 */public class Game24Player { final String[] patterns = {'nnonnoo', 'nnonono', 'nnnoono', 'nnnonoo', 'nnnnooo'}; final String ops = '+-*/^';//存儲(chǔ)運(yùn)算符 String solution;//解題答案 List<Integer> digits; public static void main(String[] args) { new Game24Player().play(); } void play() { digits = getSolvableDigits(); Scanner in = new Scanner(System.in); while (true) { System.out.println('24點(diǎn)小游戲:'); System.out.print('使用以下數(shù)字得出24點(diǎn): '); System.out.println(digits); System.out.println('tips:輸入q退出游戲,輸入s打印解法以及出下一道題'); System.out.print('> '); String line = in.nextLine();//獲取控制臺(tái)下一行輸入的內(nèi)容 if (line.equalsIgnoreCase('q')) { System.out.println('nThanks for playing'); return; } if (line.equalsIgnoreCase('s')) { System.out.println(solution); digits = getSolvableDigits(); continue; } char[] entry = line.replaceAll('[^*+-/)(d]', '').toCharArray(); try { validate(entry); if (evaluate(infixToPostfix(entry))) { System.out.println('n恭喜你,回答正確,請(qǐng)繼續(xù)下一輪 '); digits = getSolvableDigits(); } else { System.out.println('n答題錯(cuò)誤,請(qǐng)重新答題'); } } catch (Exception e) { System.out.printf('%n%s 請(qǐng)重新輸入.%n', e.getMessage()); } } } //判斷玩家在控制臺(tái)輸入的內(nèi)容是否正確 void validate(char[] input) throws Exception { int total1 = 0, parens = 0, opsCount = 0; for (char c : input) { if (Character.isDigit(c)) total1 += 1 << (c - ’0’) * 4; else if (c == ’(’) parens++; else if (c == ’)’) parens--; else if (ops.indexOf(c) != -1) opsCount++; if (parens < 0) throw new Exception('括號(hào)不匹配.'); } if (parens != 0) throw new Exception('括號(hào)不匹配.'); if (opsCount != 3) throw new Exception('錯(cuò)誤輸入.'); int total2 = 0; for (int d : digits) total2 += 1 << d * 4; if (total1 != total2) throw new Exception('輸入有誤.'); } boolean evaluate(char[] line) throws Exception { Stack<Float> s = new Stack<>(); try { for (char c : line) { if (’0’ <= c && c <= ’9’) s.push((float) c - ’0’); else s.push(applyOperator(s.pop(), s.pop(), c)); } } catch (EmptyStackException e) { throw new Exception('輸入無效,請(qǐng)重新輸入.'); } return (Math.abs(24 - s.peek()) < 0.001F); } float applyOperator(float a, float b, char c) { switch (c) { case ’+’: return a + b; case ’-’: return b - a; case ’*’: return a * b; case ’/’: return b / a; default: return Float.NaN; } } //獲取一組隨機(jī)數(shù) List<Integer> randomDigits() { Random r = new Random(); List<Integer> result = new ArrayList<>(4); for (int i = 0; i < 4; i++) result.add(r.nextInt(9) + 1);//添加4個(gè)1-10的隨機(jī)數(shù) return result; } List<Integer> getSolvableDigits() { List<Integer> result; do { result = randomDigits(); } while (!isSolvable(result)); return result; } boolean isSolvable(List<Integer> digits) { Set<List<Integer>> dPerms = new HashSet<>(4 * 3 * 2); permute(digits, dPerms, 0); int total = 4 * 4 * 4; List<List<Integer>> oPerms = new ArrayList<>(total); permuteOperators(oPerms, 4, total); StringBuilder sb = new StringBuilder(4 + 3); for (String pattern : patterns) { char[] patternChars = pattern.toCharArray(); for (List<Integer> dig : dPerms) { for (List<Integer> opr : oPerms) { int i = 0, j = 0; for (char c : patternChars) { if (c == ’n’) sb.append(dig.get(i++)); else sb.append(ops.charAt(opr.get(j++))); } String candidate = sb.toString(); try { if (evaluate(candidate.toCharArray())) { solution = postfixToInfix(candidate); return true; } } catch (Exception ignored) { } sb.setLength(0); } } } return false; } String postfixToInfix(String postfix) { class Expression { String op, ex; int prec = 3; Expression(String e) { ex = e; } Expression(String e1, String e2, String o) { ex = String.format('%s %s %s', e1, o, e2); op = o; prec = ops.indexOf(o) / 2; } } Stack<Expression> expr = new Stack<>(); for (char c : postfix.toCharArray()) { int idx = ops.indexOf(c); if (idx != -1) { Expression r = expr.pop(); Expression l = expr.pop(); int opPrec = idx / 2; if (l.prec < opPrec) l.ex = ’(’ + l.ex + ’)’; if (r.prec <= opPrec) r.ex = ’(’ + r.ex + ’)’; expr.push(new Expression(l.ex, r.ex, '' + c)); } else { expr.push(new Expression('' + c)); } } return expr.peek().ex; } char[] infixToPostfix(char[] infix) throws Exception { StringBuilder sb = new StringBuilder(); Stack<Integer> s = new Stack<>(); try { for (char c : infix) { int idx = ops.indexOf(c); if (idx != -1) { if (s.isEmpty()) s.push(idx); else { while (!s.isEmpty()) { int prec2 = s.peek() / 2; int prec1 = idx / 2; if (prec2 >= prec1)sb.append(ops.charAt(s.pop())); elsebreak; } s.push(idx); } } else if (c == ’(’) { s.push(-2); } else if (c == ’)’) { while (s.peek() != -2) sb.append(ops.charAt(s.pop())); s.pop(); } else { sb.append(c); } } while (!s.isEmpty()) sb.append(ops.charAt(s.pop())); } catch (EmptyStackException e) { throw new Exception('Invalid entry.'); } return sb.toString().toCharArray(); } void permute(List<Integer> lst, Set<List<Integer>> res, int k) { for (int i = k; i < lst.size(); i++) { Collections.swap(lst, i, k); permute(lst, res, k + 1); Collections.swap(lst, k, i); } if (k == lst.size()) res.add(new ArrayList<>(lst)); } void permuteOperators(List<List<Integer>> res, int n, int total) { for (int i = 0, npow = n * n; i < total; i++) res.add(Arrays.asList((i / npow), (i % npow) / n, i % n)); }}

運(yùn)行結(jié)果截圖

游戲題目

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

在控制臺(tái)輸入答案

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

輸入s是查看結(jié)果并開始下一次游戲。

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

輸入q是退出游戲。

利用Java編寫24點(diǎn)小游戲的實(shí)例代碼

總結(jié)

到此這篇關(guān)于利用Java編寫24點(diǎn)小游戲的文章就介紹到這了,更多相關(guān)Java編寫24點(diǎn)小游戲內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 骨密度仪-骨密度测定仪-超声骨密度仪-骨龄测定仪-天津开发区圣鸿医疗器械有限公司 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 打造全球沸石生态圈 - 国投盛世 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 联系我们-腾龙公司上分客服微信19116098882 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 铝箔-铝板-花纹铝板-铝型材-铝棒管-上海百亚金属材料有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 路面机械厂家| 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 |