24点游戏
棋牌类益智游戏,要求四个数字经过算术运算结果等于24.
这个游戏可以利用扑克牌进行(可以抽去大小王和花牌,留下40张数字牌),
然后从牌中随机抽取4张牌,用加、减、乘、除(也可以用括号,开方乘方等数学运算)
将抽出的四张牌的数字计算成24。
24点
四张牌必须使用且只能使用一次。
小时候玩的版本是只有1~10这10个数字,
但是对数字的顺序没有规定,也可以使用括号,
而且,当时只知道 +、-、*、\ 这四种运算法则,
就只用加减乘除。
背景
第一次接触24点游戏是在小学5年级的时候,那时候是在同学的计算器的上。
那时,同学发现计算器上有一个写着“24点”的按钮,按下去后就像发现了新大陆似的。
起初,我们并不知道这个游戏怎么玩,后来了个同学说明了大致的规则,然后我们就开始玩了。
此后,我们经常玩这个游戏,直到那个计算器的电池没电了。
目的
- .怀念小学时光,那时候一个简单地游戏便能够将一群朋友聚集在一起,简单,也快乐。
- 锻炼自己的编程能力,尝试自己实现一些简单地想法。
- 尽可能的少接触手机,回归简单的生活。
代码如下:
这是该游戏的接口
定义为接口主要是想先把想到的方法先记录下来。
package point24;
/**
* 24点游戏接口
* 其中声明了游戏介方法绍introtuct(),示例方法 example(),游戏方法play(),创建数字方法create(),列举结果方法enumerate()
* @author 莫得脑子
*
*/
public interface Point24 {
/**
* 游戏介绍
*/
public void introtuct();
/**
* 示例
*/
public void example();
/**
* 玩家游戏
*/
public void play();
/**
* 创建4个随机数
*/
public void create();
/**
* 列举可能的结果
*/
public void enumerate();
}
接口的实现
这代码写得烂,之所以会写,有两个原因。
一、怀念小时候的游戏
二、想体验自己通过程序完成自己想做的事情的感觉(尽管代码写得再差,心里也高兴)
package point24.impl;
import java.util.Scanner;
import point24.Point24;
/**
* 这是24点游戏接口的实现类
* 实现了接口中的方法
* @author 莫得脑子
*
*/
public class Point24Impl implements Point24{
static int num1,num2,num3,num4;//声明游戏中的四个数字
/**
* 游戏介绍
* 包括该游戏的简介,游戏规则
*/
@Override
public void introtuct() {
//简介
System.out.println();
System.out.println("简介:");
System.out.println("24点是棋牌类益智游戏");
System.out.println();
System.out.println(" 它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。");
System.out.println(" 这种游戏方式简单易学,能健脑益智,是一项极为有益的活动。");
System.out.println();
//游戏规则
System.out.println("规则:");
System.out.println();
System.out.println("随机生成4个数字(1~10),用加、减、乘、除(也可以用括号,开方乘方等数学运算)将四个数字计算成24");
System.out.println("要求四个数字经过算术运算结果等于24.");
System.out.println("四个数字必须使用且只能使用一次");
System.out.println();
}
/**
* 示例
* 演示游戏的界面
*/
@Override
public void example() {
System.out.println("***开始游戏***");
System.out.println("2 2 3 3"+"\t"+"请输入您的计算方法:");
System.out.println("(2+2)*(3+3)");
System.out.println("输入完成!");
}
/**
* 玩家游戏
* 玩家开始游戏,玩家可以输入自己的想法,输入完成后程序输出玩家的输入结果
*/
@Override
public void play() {
System.out.println("请输入您的计算方法:");
Scanner sc = new Scanner(System.in);
String result = sc.next();
System.out.println("输入完成!");
System.out.println("您输入的结果为:"+result);
System.out.println();
}
/**
* 创建游戏的4个随机数
*/
@Override
public void create() {
int cards[] = new int[4];
num1 = (int)(Math.random()*10+1);
num2 = (int)(Math.random()*10+1);
num3 = (int)(Math.random()*10+1);
num4 = (int)(Math.random()*10+1);
//将随机数装入数组
cards[0]=num1;
cards[1]=num2;
cards[2]=num3;
cards[3]=num4;
for (int i : cards) {
System.out.print(i+"\t");
}
}
@Override
public void enumerate() {
int count=0;
//列举游戏可能结果
boolean flag =false;//默认玩家计算结果错误
//++仅有一种
if (num1+num2+num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"+"+num3+"+"+num4);
}
//+-3种
// 如果出现两个-,那么其余两个数字的和至少要等于26,显然不可能
if (num1+num2+num3-num4==24) {
flag=true;
}
if (num1+num2-num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"-"+num3+"+"+num4);
}
if (num1-num2+num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"-"+num2+"+"+num3+"+"+num4);
}
//+*6种
if (num1+num2+num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"+"+num3+"*"+num4);
}
if (num1+num2*num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"*"+num3+"+"+num4);
}
if (num1*num2+num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"+"+num3+"+"+num4);
}
if (num1+num2*num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"*"+num3+"*"+num4);
}
if (num1*num2+num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"+"+num3+"*"+num4);
}
if (num1*num2*num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"*"+num3+"+"+num4);
}
//+/3种
//两个/不可能计算出24
if (num1+num2+num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"+"+num3+"/"+num4);
}
if (num1+num2/num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"/"+num3+"+"+num4);
}
if (num1/num2+num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"/"+num2+"+"+num3+"+"+num4);
}
//--不可能计算出24
//-*2种
//如果-出现在第一个位置,那么要求第一个数字至少是25,显然不可能
if (num1*num2*num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"*"+num3+"-"+num4);
}
if (num1*num2-num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"-"+num3+"*"+num4);
}
if (num1*num2-num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"-"+num3+"*"+num4);
}
//-/不可能计算出24
//**仅有一种
if (num1*num2*num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"*"+num3+"*"+num4);
}
//*/6种
if (num1*num2*num3/num4==24) { flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"*"+num3+"/"+num4);
}
if (num1*num2/num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"/"+num3+"*"+num4);
}
if (num1*num2/num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"/"+num3+"/"+num4);
}
if (num1*num2/num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"/"+num3+"*"+num4);
}
if (num1/num2/num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"/"+num2+"/"+num3+"*"+num4);
}
//三种运算符
if (num1+num2-num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"-"+num3+"*"+num4);
}
if (num1+num2-num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"-"+num3+"/"+num4);
}
if (num1+num2*num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"*"+num3+"-"+num4);
}
if (num1+num2*num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"*"+num3+"/"+num4);
}
if (num1+num2/num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"+"+num2+"/"+num3+"*"+num4);
}
if (num1-num2+num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"-"+num2+"+"+num3+"*"+num4);
}
if (num1*num2-num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"-"+num3+"+"+num4);
}
if (num1*num2+num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"+"+num3+"-"+num4);
}
if (num1*num2-num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"-"+num3+"/"+num4);
}
if (num1*num2+num3/num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"+"+num3+"/"+num4);
}
if (num1*num2/num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"/"+num3+"+"+num4);
}
if (num1*num2/num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"*"+num2+"/"+num3+"-"+num4);
}
if (num1/num2*num3+num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"/"+num2+"*"+num3+"+"+num4);
}
if (num1/num2*num3-num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"/"+num2+"*"+num3+"-"+num4);
}
if (num1/num2+num3*num4==24) {
flag=true;
count++;
System.out.println("第"+count+"组解"+num1+"/"+num2+"+"+num3+"*"+num4);
}
//根据flag值,判断随机生成的四个数字是否有解
if (flag==true) {
System.out.println("这四个数字组合有"+count+"组解");
}else {
System.out.println("这四个数字组合无解");
}
}
}
测试程序
package point24.test;
import java.util.Scanner;
import point24.Point24;
import point24.impl.Point24Impl;
public class Test {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
/**
* 24点游戏界面
*/
while (true) {
System.out.println("************************************************");
System.out.println("*************** 欢迎进入24点游戏 ***************");
System.out.println("************************************************");
System.out.println("********* 0.游戏规则 1.开始游戏 2.退出游戏********");
System.out.println("************************************************");
System.out.println("请选择菜单:");
// 操作数
int choice = sc.nextInt();
switch (choice) {
case 0:
System.out.println("***游戏规则***");
introduct();
System.out.println("示例:");
example();
break;
case 1:
System.out.println("***开始游戏***");
// 创建游戏所需的4个数字
create();
// 玩家开始游戏
play();
enumerate();
System.out.println();
break;
case 2:
System.out.println("退出成功!");
System.exit(0);
break;
default:
// 提示玩家操作有误
System.out.println("操作错误!");
break;
}
}
}
private static void enumerate() {
Point24 pE = new Point24Impl();
pE.enumerate();
}
private static void play() {
Point24 pP = new Point24Impl();
pP.play();
}
private static void create() {
Point24 pC = new Point24Impl();
pC.create();
}
private static void example() {
Point24 pE = new Point24Impl();
pE.example();
}
private static void introduct() {
Point24 pI = new Point24Impl();
pI.introtuct();
}
}
实现效果
游戏规则界面
游戏界面
游戏退出
写在最后
欢迎各位技术大佬批评指正。