iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用Java怎么制作一个24点游戏
  • 632
分享到

使用Java怎么制作一个24点游戏

2023-06-15 01:06:08 632人浏览 安东尼
摘要

本篇文章给大家分享的是有关使用Java怎么制作一个24点游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24

本篇文章给大家分享的是有关使用Java怎么制作一个24点游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、常见游戏规则

从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。

基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。

程序风格良好(使用自定义注释模板)

列出表达式无重复。

提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。

 程序风格良好(使用自定义注释模板)

使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。

所有成绩均可记录在TopList.txt文件中。

二、算法分析

用户需要提前输入4个数,作为凑成24点的基数,构成arr数组,从而求解目标数T=24。

在数arr中,首先取两个数与操作符集合进行组合,分别得到一组表达式,对于新得到的每个表达式,都可以和原集合中剩下的元素,组合成新的集合组,将每次得到的表达式,都用"()"包住,以保证计算先后顺序。

对集合中所有元素进行两两组合,并与剩余元素形成新的集合。由此,我们得到了一组元素为k-1个的集合组

对新集合组中的每一个集合,重复以上1-3步,可得到一组包含k-2个元素的集合组...以此类推,最后会得到一组集合,其中每个集合都只包含一个元素,这个就是我们合成的最终表达式.对第四步得到的表达式集合进行求解,判断其是否等于目标数24,将符合条件的过滤出来,即得到所有满足条件的表达式。

三、概要设计

主函数程序流程图

使用Java怎么制作一个24点游戏

四、代码

package Game;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.Random;public class Compute {//定义随机产生的四个数static int number[] = new int[4];//转换后的num1,num2,num3,num4static int m[]=new int [4];static String n[] = new String[4];//用来判断是否有解static boolean flag = false;//存放操作符static char[] operator = { '+', '-', '*', '/' };private static Object key;public static void main(String[] args){Random rand = new Random();System.out.println("下列给出四个数字,使用+,-,*,/进行计算使最后计算结果为24");for(int i=0;i<4;i++){number[i]=rand.nextInt(13)+1;//随机生成四个int型数if(number[i]==1){System.out.println("A");//如果随机生成的数为1,则显示为扑克牌牌面中的A}else if(number[i]==11){System.out.println("J");//如果随机生成的数为11,则显示为扑克牌牌面中的J}else if(number[i]==12){System.out.println("Q");//如果随机生成的数为12,则显示为扑克牌牌面中的Q}else if(number[i]==13){System.out.println("K");//如果随机生成的数为13,则显示为扑克牌牌面中的K}elseSystem.out.println(number[i]);}System.out.println("可能的结果有:");calculate(); }//给定2个数和指定操作符的计算public static int calcute(int count1, int count2, char operator) {if (operator == '+') {    return count1 + count2;    }     else if (operator == '-') {    return count1 - count2;    }    else if (operator == '*') {    return count1 * count2;    }    else if ((operator == '/' )&& (count2 != 0) && (count1%count2==0)) {    return count1 / count2;   }    else {    return -1;            }}//计算生成24的函数public static void calculate(){Map<Integer, Integer> map = new HashMap<Integer, Integer>();//存放数字,用来判断输入的4个数字中有几个重复的,和重复的情况for (int i = 0; i < number.length; i++) {if(map.get(number[i]) == null){map.put(number[i], 1);} else {map.put(number[i], map.get(number[i]) + 1);}}if(map.size() == 1){//如果只有一种数字,此时只有一种排列组合,如5,5,5,5calculation(number[0], number[1],number[2],number[3]);}else if(map.size()==2){//如果只有2种数字,有2种情况,如1,1,2,2和1,1,1,2int index = 0;//用于数据处理int state = 0;//判断是哪种情况for (Integer key : map.keySet()) {if(map.get(key) == 1){//如果是有1个数字和其他3个都不同,将number变为 number[0]=number[1]=number[2],//将不同的那个放到number[3],方便计算number[3] = key;state = 1;}else if(map.get(key)==2){//如果是两两相同的情况,将number变为number[0]=number[1],number[2]=number[3]的情况number[index++]=key;number[index++]=key;}else{number[index++]=key;}}//列出2种情况的所有排列组合,并分别计算if(state == 1){calculation(number[3],number[1],number[1],number[1]);calculation(number[1],number[3],number[1],number[1]);calculation(number[1],number[1],number[3],number[1]);calculation(number[1],number[1],number[1],number[3]);}if(state==0){calculation(number[1],number[1],number[3],number[3]);calculation(number[1],number[3],number[1],number[3]);calculation(number[1],number[3],number[3],number[1]);calculation(number[3],number[3],number[1],number[1]);calculation(number[3],number[1],number[3],number[1]);calculation(number[3],number[1],number[1],number[3]);}}else if(map.size()==3){//有3种数字的情况int index = 0;for (Integer key : map.keySet()) {if(map.get(key) == 2){//将相同的2个数字放到number[2]=number[3]number[2] = key;number[3] = key;} else {number[index++] = key;}}//排列组合,所有情况calculation(number[0],number[1],number[3],number[3]);calculation(number[0],number[3],number[1],number[3]);calculation(number[0],number[3],number[3],number[1]);calculation(number[1],number[0],number[3],number[3]);calculation(number[1],number[3],number[0],number[3]);calculation(number[1],number[3],number[3],number[0]);calculation(number[3],number[3],number[0],number[1]);calculation(number[3],number[3],number[1],number[0]);calculation(number[3],number[1],number[3],number[0]);calculation(number[3],number[0],number[3],number[1]);calculation(number[3],number[0],number[1],number[3]);calculation(number[3],number[1],number[0],number[3]);}else if(map.size() == 4){//4个数都不同的情况calculation(number[0],number[1],number[2],number[3]);calculation(number[0],number[1],number[3],number[2]);calculation(number[0],number[2],number[1],number[3]);calculation(number[0],number[2],number[3],number[1]);calculation(number[0],number[3],number[1],number[2]);calculation(number[0],number[3],number[2],number[1]);calculation(number[1],number[0],number[2],number[3]);calculation(number[1],number[0],number[3],number[2]);calculation(number[1],number[2],number[3],number[0]);calculation(number[1],number[2],number[0],number[3]);calculation(number[1],number[3],number[0],number[2]);calculation(number[1],number[3],number[2],number[0]);calculation(number[2],number[0],number[1],number[3]);calculation(number[2],number[0],number[3],number[1]);calculation(number[2],number[1],number[0],number[3]);calculation(number[2],number[1],number[3],number[0]);calculation(number[2],number[3],number[0],number[1]);calculation(number[2],number[3],number[1],number[0]);calculation(number[3],number[0],number[1],number[2]);calculation(number[3],number[0],number[2],number[1]);calculation(number[3],number[1],number[0],number[2]);calculation(number[3],number[1],number[2],number[0]);calculation(number[3],number[2],number[0],number[1]);calculation(number[3],number[2],number[1],number[0]);}if(flag==false)System.out.println("这四张牌面数字无法经过运算得到24!");}public static void calculation(int num1, int num2, int num3, int num4){for (int i = 0; i < 4; i++){//第1次计算,先从四个数中任意选择两个进行计算char operator1 = operator[i];int firstResult = calcute(num1, num2, operator1);//先选第一,和第二个数进行计算int midResult = calcute(num2, num3, operator1);//先选第二和第三两个数进行计算int tailResult = calcute(num3,num4, operator1);//先选第三和第四俩个数进行计算for (int j = 0; j < 4; j++){//第2次计算,从上次计算的结果继续执行,这次从三个数中选择两个进行计算char operator2 = operator[j];int firstMidResult = calcute(firstResult, num3, operator2);int firstTailResult = calcute(num3,num4,operator2);int midFirstResult = calcute(num1, midResult, operator2);int midTailResult= calcute(midResult,num4,operator2);int tailMidResult = calcute(num2, tailResult, operator2);for (int k = 0; k < 4; k++){//第3次计算,也是最后1次计算,计算两个数的结果,如果是24则输出表达式char operator3 = operator[k];//在以上的计算中num1,num2,num3,num4都是整型数值,但若要输出为带有A,J,Q,K的表达式,则要将这四个数都变为String类型,下同if(calcute(firstMidResult, num4, operator3) == 24){m[0]=num1;m[1]=num2;m[2]=num3;m[3]=num4;for(int p=0;p<4;p++){if(m[p]==1){n[p]="A";}if(m[p]==2){n[p]="2";}if(m[p]==3){n[p]="3";}if(m[p]==4){n[p]="4";}if(m[p]==5){n[p]="5";}if(m[p]==6){n[p]="6";}if(m[p]==7){n[p]="7";}if(m[p]==8){n[p]="8";}if(m[p]==9){n[p]="9";}if(m[p]==10){n[p]="10";}if(m[p]==11){n[p]="J";}if(m[p]==12){n[p]="Q";}if(m[p]==13){n[p]="k";}}System.out.println("((" + n[0] + operator1 + n[1] + ")" + operator2 + n[2] + ")" + operator3 + n[3]);flag = true;//若有表达式输出,则将说明有解,下同}if(calcute(firstResult, firstTailResult, operator3) == 24){System.out.println("(" + n[0] + operator1 + n[1] + ")" + operator3 + "(" + n[2] + operator2 + n[3] + ")");flag = true;}if(calcute(midFirstResult, num4, operator3) == 24){m[0]=num1;m[1]=num2;m[2]=num3;m[3]=num4;for(int p=0;p<4;p++){if(m[p]==1){n[p]="A";}if(m[p]==2){n[p]="2";}if(m[p]==3){n[p]="3";}if(m[p]==4){n[p]="4";}if(m[p]==5){n[p]="5";}if(m[p]==6){n[p]="6";}if(m[p]==7){n[p]="7";}if(m[p]==8){n[p]="8";}if(m[p]==9){n[p]="9";}if(m[p]==10){n[p]="10";}if(m[p]==11){n[p]="J";}if(m[p]==12){n[p]="Q";}if(m[p]==13){n[p]="k";}}System.out.println("(" + n[0] + operator2 + "(" + n[1] + operator1 + n[2] + "))" + operator3 + n[3]);flag = true;}if(calcute(num1,midTailResult, operator3) == 24){m[0]=num1;m[1]=num2;m[2]=num3;m[3]=num4;for(int p=0;p<4;p++){if(m[p]==1){n[p]="A";}if(m[p]==2){n[p]="2";}if(m[p]==3){n[p]="3";}if(m[p]==4){n[p]="4";}if(m[p]==5){n[p]="5";}if(m[p]==6){n[p]="6";}if(m[p]==7){n[p]="7";}if(m[p]==8){n[p]="8";}if(m[p]==9){n[p]="9";}if(m[p]==10){n[p]="10";}if(m[p]==11){n[p]="J";}if(m[p]==12){n[p]="Q";}if(m[p]==13){n[p]="k";}}System.out.println(" " + n[0] + operator3 + "((" + n[1] + operator1 + n[2] + ")" + operator2 + n[3] + ")");flag = true;}if(calcute(num1,tailMidResult,operator3) == 24){m[0]=num1;m[1]=num2;m[2]=num3;m[3]=num4;for(int p=0;p<4;p++){if(m[p]==1){n[p]="A";}if(m[p]==2){n[p]="2";}if(m[p]==3){n[p]="3";}if(m[p]==4){n[p]="4";}if(m[p]==5){n[p]="5";}if(m[p]==6){n[p]="6";}if(m[p]==7){n[p]="7";}if(m[p]==8){n[p]="8";}if(m[p]==9){n[p]="9";}if(m[p]==10){n[p]="10";}if(m[p]==11){n[p]="J";}if(m[p]==12){n[p]="Q";}if(m[p]==13){n[p]="k";}}System.out.println(" " + n[0] + operator3 + "(" + n[1] + operator2 + "(" + n[2] + operator1 + n[3] + "))");flag = true;}}}}}}

五、测试

测试用例:2 8 10 4

测试结果:

使用Java怎么制作一个24点游戏

可以看到,程序成功的生成了对应测试用例的结果,结果是正确的。

测试无法组成24点的数据:7 13 1 6

使用Java怎么制作一个24点游戏

经过多次运行, 7,13,1,6这四个数据,无法组成24点,程序输出No answer运行正确。

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

以上就是使用Java怎么制作一个24点游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 使用Java怎么制作一个24点游戏

本文链接: https://www.lsjlt.com/news/276535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Java怎么制作一个24点游戏
    本篇文章给大家分享的是有关使用Java怎么制作一个24点游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24...
    99+
    2023-06-15
  • 怎么用Python制作24点小游戏
    这篇文章主要介绍“怎么用Python制作24点小游戏”,在日常操作中,相信很多人在怎么用Python制作24点小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python制作24点小游戏”的疑惑有所...
    99+
    2023-06-29
  • 用Java实现24点游戏
    目录一、常见游戏规则二、算法分析三、概要设计四、代码五、测试一、常见游戏规则 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13...
    99+
    2024-04-02
  • 使用Java怎么制作一个坦克大战游戏
    这篇文章给大家介绍使用Java怎么制作一个坦克大战游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。package tankwar;import java.awt.Color;import ...
    99+
    2023-05-30
    java
  • 详解如何利用Python制作24点小游戏
    目录先睹为快游戏规则(改编自维基百科)逐步实现Step1:制作24点生成器Step2:定义游戏精灵类Step3:实现游戏主循环先睹为快 24点 游戏规则(改编自维基百科) 从1~10...
    99+
    2024-04-02
  • 使用python怎么制作一个猜数字游戏
    本篇文章给大家分享的是有关使用python怎么制作一个猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的...
    99+
    2023-06-14
  • 使用CocosCreator怎么制作一个微信小游戏
    使用CocosCreator怎么制作一个微信小游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、在微信公众平台下载微信开发者工具 地址: http...
    99+
    2023-06-14
  • Python+Pygame怎么实现24点游戏
    这篇文章主要介绍了Python+Pygame怎么实现24点游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python+Pygame怎么实现24点游戏文章都会有所收获,下面我们一起来看看吧。游戏介绍(1)什么...
    99+
    2023-06-30
  • 怎么在python中使用tkinter制作一个2048游戏
    怎么在python中使用tkinter制作一个2048游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建main.py代码:from tkinter i...
    99+
    2023-06-14
  • 使用C语言怎么制作一个扫雷游戏
    本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底...
    99+
    2023-06-14
  • 使用vbs怎么制作一个数字益智游戏
    今天就跟大家聊聊有关使用vbs怎么制作一个数字益智游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 选择操作: 游戏开始时会提示选择注册, 登录, 退出三种选项,注册: 注册成功会...
    99+
    2023-06-08
  • 利用java制作一个猜数字小游戏
    今天就跟大家聊聊有关利用java制作一个猜数字小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体方法如下:package com.swift;import java.util....
    99+
    2023-05-31
    java ava
  • 使用C/C++怎么制作一个推箱子小游戏
    使用C/C++怎么制作一个推箱子小游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。运行示例:以下为完整代码:#include <stdio.h>#inc...
    99+
    2023-06-15
  • 如何使用Python Pygame实现24点游戏
    这篇文章主要讲解了“如何使用Python Pygame实现24点游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Python Pygame实现24点游戏”吧!游戏介绍(1)什么是2...
    99+
    2023-07-06
  • 怎么用PyQt5制作一个猜数字小游戏
    今天小编给大家分享一下怎么用PyQt5制作一个猜数字小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始之前,直接来看一...
    99+
    2023-06-29
  • 使用python怎么制作一个俄罗斯方块小游戏
    这期内容当中小编将会给大家带来有关使用python怎么制作一个俄罗斯方块小游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth...
    99+
    2023-06-14
  • 使用C语言制作一个猜数字游戏
    本篇文章为大家展示了使用C语言制作一个猜数字游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的...
    99+
    2023-06-15
  • 怎样用Python制作一个贪吃蛇游戏
    一,首先我们可以使用Python的tkinter函数库来生成一个窗口 代码如下: import tkinter as tk //导入tkinter函数库win = tk.Tk() //创建一个窗口win.title("Python Snak...
    99+
    2023-09-25
    游戏 python
  • 使用pygame制作一个贪吃蛇的小游戏
    之前我们已经学习了如果使用pygame创建一个窗口,现在我们来学习使用pygame来制作一个经典的小游戏—贪吃蛇。首先我们需要导入待使用的模块:import pygame, sys, randomfrom pygame.locals imp...
    99+
    2023-06-02
  • 怎么用HTML5制作一个简单的桌球游戏
    本篇内容介绍了“怎么用HTML5制作一个简单的桌球游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!话说这...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作