Java Properties类:利用Properties类制作猜数字小游戏

在学习Random类时我们制作过猜数字小游戏,学习了Properties类后,可以为此游戏添加保存得分记录功能

游戏规则:

玩家可以选择玩游戏还是查看得分

玩游戏:

首先玩家需要选择难度:

难度级别 范围
简单 1~10
中等 1~100
困难 1~1000
专家 1~10000

 

程序会根据随机生成一个难度随机生成一个整数。

玩家现在可以猜数,系统会判断猜大了还是猜小了。

最后根据玩家的尝试次数产生得分,并保存到文件中。

查看得分:

根据难度显示得分

 

制作步骤:

首先编写游戏主菜单方法:

public static void MainMenu() {
  System.out.println("====主菜单====");
  System.out.println("1.玩游戏");
  System.out.println("2.查看得分");
  System.out.println("0.返回");
}

选择难度方法:

public static void ChooseLevel() {
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("请选择难度:");
            System.out.println("1.简单");
            System.out.println("2.中等");
            System.out.println("3.困难");
            System.out.println("4.专家");
            switch(sc.next()) {
            //跟据难度传参
            case "1":
                NewGame(10);
                break;
            case "2":
                NewGame(100);
                break;
            case "3":
                NewGame(1000);
                break;
            case "4":
                NewGame(10000);
                break;
            default:
                continue;
            }
            break;
        }
    }

新游戏方法:

public static void NewGame(int max) {
        Scanner sc = new Scanner(System.in);
        int number = new Random().nextInt(max);
        System.out.println("神秘数字已产生,(0~"+max+")");
        int count = 1;
        while(true) {
            System.out.println("第"+count+"次猜:");
            int guess = sc.nextInt();
            if(guess>number) {
                System.out.println("您猜大了");
                count++;
                continue;
            }else if(guess<number) {
                System.out.println("您猜小了");
                count++;
                continue;
            }else {
                System.out.println("您猜对了!一共猜了"+count+"次");
                if(updateFile(max,count)) {
                    System.out.println("新记录!");
                }
                return;
            }
        }
    }

更新得分文件

public static boolean updateFile(int type,int num) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("src\\practice\\scores");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        
        
        Properties p = new Properties();
        try {
            p.load(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
        int oldscore = Integer.parseInt(p.getProperty(Integer.toString(type)));

        if(oldscore>num||oldscore==0) {
            p.setProperty(Integer.toString(type), Integer.toString(num));
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream("src\\practice\\scores");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            try {
                p.store(fos, null);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        }
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

重置得分

public static void Reset() {
        
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("src\\practice\\scores");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Properties p = new Properties();
        
        p.setProperty("10", "0");
        p.setProperty("100", "0");
        p.setProperty("1000", "0");
        p.setProperty("10000", "0");
        
        try {
            p.store(fos, null);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

获得得分:

public static String getScore(String type) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("src\\practice\\scores");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        
        Properties p = new Properties();
        try {
            p.load(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return p.getProperty(type);
    }

展示得分:

public static void showScores() {
        Scanner sc = new Scanner (System.in);
        while(true) {
            System.out.println("得分记录:\n");
            System.out.println("简单模式:"+(getScore("10").equals("0")?"暂无得分":getScore("10")));
            System.out.println("中等模式:"+(getScore("100").equals("0")?"暂无得分":getScore("100")));
            System.out.println("困难模式:"+(getScore("1000").equals("0")?"暂无得分":getScore("1000")));
            System.out.println("专家模式:"+(getScore("10000").equals("0")?"暂无得分":getScore("10000")));
            System.out.println("输入c重置得分,输入0返回");
            switch(sc.next()) {
            case "0":
                return;
            case "c":
            case "C":
                Reset();
                break;
            }
        }
    }

测试类:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true) {
            MainMenu();
            switch (sc.next()) {
            case "1":
                ChooseLevel();
                break;
            case "2":
                showScores();
                break;
            case "0":
                return;
            default:
                continue;
            }
        }
    }

运行效果:

 

 

 

posted @ 2021-02-27 19:34  lucascube  阅读(174)  评论(0)    收藏  举报