JAVA实现24点小游戏

本文介绍了如何利用2元运算策略解决24点游戏的算法,通过随机生成扑克牌数字并列出所有可能的运算表达式。程序首先获取用户输入的4个数字,然后使用加减乘除运算符进行组合计算。提高要求部分增加了用户交互功能,用户在限定时间内输入运算表达式,根据正确与否调整分数和生命值。最终,所有成绩将被记录在TopList.txt文件中。
摘要由CSDN通过智能技术生成

问题描述:

24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
1. 程序风格良好(使用自定义注释模板)
2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
3.所有成绩均可记录在TopList.txt文件中。

原因分析:

2.算法分析:
把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算。在求表达式的过程中,最难处理的就是对括号的处理,而这种思路很好的避免了对括号的处理。基于这种思路的一种算法:

因为能使用的4种运算符 – * / 都是2元运算符,所以只考虑2元运算符。2元运算符接收两个参数,输出计算结果,输出的结果参与后续的计算。

解决方案:

(1)输入四个数字模拟四张纸牌,放入数组中保存:
int[] a = new int[4];
int b;//判断输入的数字是否符合要求
Scanner scan = new Scanner (System.in);
System.out.println (“请输入4个(1-13)的数字:”);
for (int i = 0 ; i < a.length ; i++) {
b = scan.nextInt ();
if (b <= 0 || b > 13) {
System.out.println (“您输入的数字不在范围内,请重新输入!”);
} else {
a[i] = b;

}

}

(2)将四个运算符存入数组:
String[] op = {"+", “-”, “*”, “/”};

(3)计算两个数的运算结果:
public static int yunSuan ( int i, int j, String op ) {

(4)用calculate方法判断是否能够完成24点:
public static void calculate ( int[] a ) {

3.流程图:
在这里插入图片描述
4.测试:
(1)结果测试:

在这里插入图片描述

(2)步骤测试:
(2.1)4个数字放入数组:
在这里插入图片描述

(2.2)4个运算符:
在这里插入图片描述

(2.3)判断是否成功:
在这里插入图片描述

5.心得体会:
查阅资料才发现不用穷举法算24点小游戏,穷举法种类较多,比较麻烦。所有我采用2元运算进行列举,避免了复杂的括号运算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值