Java实现24点游戏
一、题目要求:
1.问题描述:24点游戏是经典的纸牌益智游戏。
常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
2.基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
要求:
①.程序风格良好(使用自定义注释模板)
②.列出表达式无重复。
3.提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
要求:
①.程序风格良好(使用自定义注释模板)
②.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
③.所有成绩均可记录在TopList.txt文件中。
二、代码实现
package work;
import java.util.Scanner;
import java.util.Random;
public class Game {
static int[]arg=new int[4];//四个数字
static int[]op=new int[3];//运算符三种位置
public static void main(String[] args) {
int g;
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
System.out.println("欢迎体验24点游戏");
System.out.println("输入1开始游戏,输入2退出游戏");
g=sc.nextInt();//获取从键盘输入的数字
if(g==2)
{
System.exit(0);
}
else
{
do
{
System.out.println("随机生成的四个数为");
Random(arg);//random为随机数生成函数
Order(0);//order()为排序函数
System.out.println("继续游戏还是退出游戏。继续游戏请选1,退出游戏请选2");
g=sc.nextInt();//获取从键盘输入的数字
}while(g==1);
}
}
/*定义随机数函数并将随机数取余变为1~K之间的牌数*/
public static int Random(int[]arg)
{
Random r=new Random();
for(int i=0;i<arg.length;i++)
{
arg[i]=(int)(Math.abs(r.nextInt())%13+1);//返回数的绝对值
System.out.println(cards(arg[i]));
}
return 0;
}
/* 将数字变成牌数,即:11-J,12-Q,13-K*/
public static char cards(int p)
{
/*判断产生的随机数是否为1,若为1,则返回字符*/
if(p==1)
return 'A';
else if(p<10)
return (char)(p+'0');
else if(p==10)
{
System.out.print(Integer.parseInt("10",10));
return 10;
}
else if(p==11)
return 'J';
else if(p==12)
return 'Q';
else if(p==13)
return 'K';
else
return 0;
}
/*得出所有数的排列组合*/
public static void Order(int t) {
if (t >=arg.length)
{
calculate(0, 0,"");
return;
}
for (int i = t; i < arg.length; i++)
{
two(i, t);
Order(t + 1);
two(i, t);
}
}
//数组中前两个数交换
public static void two(int i, int j) {
int t = 0;
t = arg[i];
arg[i] = arg[j];
arg[j] = t;
}
public static void calculate(int t, int num, String s) {
if (t == 4) {
if (num == 24 && correct(s))
{
System.out.println(s);
}
return;
}
if (t == 0) {
calculate(t + 1, num + arg[t],
String.valueOf(arg[0]));
return;
}
for (int i = 0; i < 4; i++) {
if (i == 0) {
op[t-1] = 1;
calculate(t + 1, num + arg[t], s + "+"
+ String.valueOf(arg[t]));
}
if (i == 1) {
op[t-1] = 1;
if (num - arg[t] > 0) {
calculate(t + 1, num - arg[t],
s + "-" + String.valueOf(arg[t]));
}
else
{
return;
}
}
if (i == 2) {
op[t - 1] = 2;
calculate(t + 1, num * arg[t], s + "*" +
String.valueOf(arg[t]));
}
if (i == 3) {
op[t - 1] = 2;
if (num % arg[t] == 0) {
calculate(t + 1, num / arg[t],
s + "/" + String.valueOf(arg[t]));
}
else
{
return;
}
}
}
}
//验证集合中的表达式是否等于,筛选出符合24的表达式
public static boolean correct(String s) {
int t = 0;
if (op[0] == 1 && op[1] == 1 && op[2] == 2 ||
op[0] == 2&& op[1] == 1 && op[2] == 2)
{
t = s.lastIndexOf("*") > s.lastIndexOf("/") ?//定义优先级
s.lastIndexOf("*"): s.lastIndexOf("/");
System.out.println("(" + s.substring( 0,t)
+ ")" + s.substring(t));
return false;
}
else if (op[0] == 1 && op[1] == 2)
{
t = s.indexOf("*") > s.indexOf("/") ? //定义运算符的优先级,减少重复
s.indexOf("*") : s.indexOf("/");
System.out.println("(" + s.substring(0, t) +
")" + s.substring(t));
return false;
}
return true;
}
}
三、运行结果

本文介绍了一个基于Java语言实现的24点游戏程序。该程序能够随机生成四张扑克牌,玩家需要通过加、减、乘、除运算使这四张牌的数值结果等于24。文中提供了完整的源代码,并解释了主要的功能模块。

332

被折叠的 条评论
为什么被折叠?



