详细的解释都在注释里面了
// import 这些是引用包和类制药下面的代码有用到相关包,IDEA 编译器会自动生成,所以在 IDEA 中可以不用敲
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.regex.Pattern;
class arithmetic {
static Scanner scanner = new Scanner(System.in); // 定义输入类属性
static int inputNum = 0; // 定义输入数据属性,并将它初始化为 0
static int randomNum = 0; // 定义随机数属性,并将它初始化为 0
static int guessCount = 0; // 定义猜的次数属性,并将它初始化为 0
static int guessMaxCount = 11; // 定义猜的最少次数属性,并将它初始化为 11,因为只有 10 个数据可进行猜测,最多可猜 10 次,这里将它初始化为 11 次
public static void clearConsole() throws AWTException { // 清屏功能函数
Robot robot = new Robot(); // 实例化一个 Robot 类
robot.keyPress(KeyEvent.VK_CONTROL); // 按下 ctrl 键
robot.keyPress(KeyEvent.VK_ALT); // 按下 alt 键
robot.keyPress(KeyEvent.VK_BACK_SPACE); // 按下 backspace 键
robot.keyRelease(KeyEvent.VK_BACK_SPACE); // 松开 backspace 键
robot.keyRelease(KeyEvent.VK_ALT); // 松开 alt 键
robot.keyRelease(KeyEvent.VK_CONTROL); // 松开 ctrl 键
robot.delay(100); // 时延为 100 毫秒
}
public static void mainPage() throws AWTException { // 主界面
clearConsole(); // 先清屏
System.out.println(" 猜数字小游戏"); // 打印游戏名称
// 开始打印游戏功能键
for( int i = 0; i < 20; i++ ) {
System.out.print("*");
}
System.out.print("\n\t1.游戏规则");
System.out.print("\n\t2.开始游戏");
System.out.print("\n\t3.查看本次最高成绩");
System.out.println("\n\t4.退出游戏");
for( int i = 0; i < 20; i++ ) {
System.out.print("*");
}
System.out.println("\n请选择功能:");
// 结束打印游戏功能键
choiceFunction(); // 调用功能键选择函数
}
public static void returnMainPage() throws AWTException { // 功能跳转函数:从此界面调转到其他界面
inputNum = scanner.nextInt(); // 接收输入的数据
if ( inputNum == 4 ) { // 输入 4 的话
clearConsole(); // 先清屏
mainPage(); // 再跳转到主界面
}
else if ( inputNum == 2 ) { // 输入 2 的话
clearConsole(); // 先清屏
gameBegin(); // 再跳转到游戏界面
}
else if ( inputNum == 3 ) { // 输入 3 的话
clearConsole(); // 先清屏
showMaxPoint(); // 再跳转到打印最佳成绩界面
}
else { // 输入其他键,提示错误
System.out.println("输入错误");
returnMainPage(); // 运用简单的递归算法
}
}
public static void choiceFunction() throws AWTException { // 功能函数:在主界面中判断输入的功能键
while ( true ) { // 用死循环才能一直进行游戏,但记得一定要设定至少一个终止死循环的条件,不然程序会一直运行下去
boolean boolFunction; // 用于接收正则表达式的布尔结果
String strFunction = scanner.next(); // 用于接收输入的功能键字符串
boolFunction = Pattern.matches("[1-4]",strFunction); // 运用正则表达式,判断所输入的功能是否在 1 到 4 之间
if ( boolFunction ) { // boolFunction 为 true 的话,或者说输入的功能键没问题的话
int numFunction = Integer.parseInt( strFunction ); // 将输入的功能键数据从字符串转化为整数
switch ( numFunction ) {
case 1: // 功能键是 1 的话
clearConsole(); // 先清屏
gameRules(); // 跳转到游戏规则界面
break; // 记得要终止
case 2: // 功能键是 2 的话
clearConsole(); // 先清屏
gameBegin(); // 跳转到游戏界面
break; // 记得要终止
case 3: // 功能键是 3 的话
clearConsole(); // 先清屏
showMaxPoint(); // 跳转到最佳成绩界面
break; // 记得要终止
case 4: // 功能键是 4 的话
System.exit(1); // 结束程序
break; // 记得要终止
default: // 与上面的功能键都不一致的话,保险起见
break; // 直接终止程序
}
}
else { // 输入的不是功能键的话,打印输入错误
System.err.println("输入有误");
System.out.println("请重新选择:");
}
}
}
public static void gameRules() throws AWTException { // 游戏郭泽界面
System.out.println("规则:");
System.out.println("\t1.程序会自动生成一个 1 - 10 之间的整数,用户输入一个整数进行竞猜"); // \t 是制表符
System.out.println("\t2.如果未猜对,程序会给出相应提示");
System.out.println("\t3.每次游戏的输入数字的次数会被记录下来,退出游戏则重置为 0 ");
System.out.println("\t4.除了主界面,每个界面可以按 2 开始游戏,按 3 可查看本次游戏的最好成绩,按 4 返回主界面");
returnMainPage(); // 调用功能跳转函数
}
public static void gameBegin() throws AWTException { // 游戏界面
guessCount = 0; // 本次猜测的次数记得要初始化,因为每次开始游戏的话,次数都会归 0
Random random = new Random(); // 实例化随机数类
randomNum = random.nextInt(10); // 产生一个 0 到 9 之间的整数,包括 0 和 9
randomNum = randomNum + 1; // 因为是要在 0 到 10 之间猜测,所以要加个 1
System.out.println("游戏开始");
while ( true ) { // 用死循环才能一直进行游戏,但记得一定要设定至少一个终止死循环的条件,不然程序会一直运行下去
inputNum = scanner.nextInt(); // 接收输入的数据
if ( inputNum == randomNum ) { // 猜测的数是产生的随机数的话
System.out.println("恭喜你,猜对了!!!");
guessCount += 1; // 猜测的次数加 1
break; // 猜对就可以让死循环结束了
}
else if ( inputNum > randomNum ) { // 猜测的数大于随机数的话
System.out.println("大了");
guessCount += 1; // 猜测次数加 1
}
else { // 猜测的数小于随机数的话
System.out.println("小了");
guessCount += 1; // 猜测次数加 1
}
}
if ( guessMaxCount > guessCount) { // 如果本次猜测的次数比之前的成绩好的话
guessMaxCount = guessCount; // 将最佳成绩替换为本次的成绩
}
returnMainPage(); // 调用功能跳转函数
}
public static void showMaxPoint() throws AWTException { // 最佳成绩界面
if ( guessMaxCount == 11 ) { // 没有进行游戏的话
System.out.println("还未开始游戏");
}
else { // 进行了游戏
System.out.println("本次游戏最高成绩:" + guessMaxCount);
}
returnMainPage(); // 调用功能跳转函数
}
public static void main( String[] args ) throws AWTException { // 主函数
mainPage(); // 只调用主页面函数就行
}
}