LoadAndSave.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:5k
- package model;
- import java.awt.Point;
- import java.io.*;
- import java.util.ArrayList;
- import java.util.Properties;
- /**
- * 用户的一些数据,包括运行游戏的窗体位置,游戏中途需要退出而又希望下一次游戏的 的时候能将前一次状态读取回来,还有如果用户打破了记录,那么程序要存储这些记录
- * 或者读取先前的记录。这些操作必须依赖对文件的操作来实现,本类就以静态方法的形 式提供了处理这些数据的接口。
- *
- * @author : 何晓飞
- * @version : 2.0
- *
- */
- public class LoadAndSave {
- private static final String root="";
- /* 保存窗口位置的一个属性集 */
- private static final Properties frameLocation = new Properties();
- /* 保存存档游戏的数据的一个属性集 */
- private static final Properties save = new Properties();
- /* 保存游戏各关记录 */
- private static final Properties record = new Properties();
- /* 保存最短破关时间纪录的文件 */
- public static File recordFile = new File(root+"record.ini");
- /* 保存上次退出时主窗口位置的文件 */
- public static File setFile = new File(root+"setup.ini");
- /* 保存存档游戏的数据的文件 */
- public static File saveFile = new File(root+"save.ini");
- /**
- * 从文件中读取属性集
- *
- * @param p
- * 属性名
- * @param name
- * 文件名
- */
- public static void loadFromFile(Properties p, File name) {
- try {
- p.loadFromXML(new FileInputStream(name));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 读取窗口位置
- *
- * @return location 由x,y生成一个Point对象
- */
- public static Point loadLocation() {
- Point location = null;
- int x = 0;
- int y = 0;
- /**
- * 读取文件的时候,必须保证文件存在
- */
- if (setFile.exists()) {
- try {
- loadFromFile(frameLocation, setFile);
- x = Integer.parseInt(frameLocation.getProperty("frameX"));
- y = Integer.parseInt(frameLocation.getProperty("frameY"));
- } catch (NumberFormatException e) {
- e.printStackTrace();
- }
- location = new Point(x, y);
- }
- return location;
- }
- /**
- * 装载所有的记录
- *
- * @param totalLevel
- * 总关数
- * @return record类型的Array list
- */
- public static ArrayList<Record> loadRecord(int totalLevel) {
- int seconds = 0;
- /**
- * 一个包含record类型的容器
- */
- ArrayList<Record> records = new ArrayList<Record>();
- if (recordFile.exists()) {
- try {
- loadFromFile(record, recordFile);
- /**
- * 读取的记录条数和总关数直接相关,如果该关存在一条记录那么 将它读取出来
- */
- for (int i = 1; i <= totalLevel; i++) {
- if (record.getProperty("Level" + i) != null) {
- seconds = Integer.parseInt(record.getProperty("Level"
- + i));
- records.add(new Record(i, seconds));
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return records;
- }
- /**
- * 从保存存档游戏的数据的文件读入存档游戏的数据
- *
- */
- public static State loadSave() {
- /**
- * 三个数据需要读取的数据
- */
- String pictureFile = null;
- String gameMusic = null;
- int level = 0;
- int score = 0;
- int reminds=0;
- /**
- * 一条state包括上述的三条数据
- */
- State state = null;
- if (saveFile.exists()) {
- try {
- loadFromFile(save, saveFile);
- pictureFile = save.getProperty("PictureFile");
- gameMusic = save.getProperty("GameMusic");
- level = Integer.parseInt(save.getProperty("Level"));
- score=Integer.parseInt(save.getProperty("Score"));
- reminds=Integer.parseInt(save.getProperty("reminds"));
- /*
- * 读取数据并建立一条
- */
- state = new State(pictureFile, gameMusic, level,score,reminds);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return state;
- }
- /**
- * 保存数据
- *
- * @param pictureFile
- * 图片文件夹
- * @param gameMusic
- * 游戏音乐
- * @param level
- * 当前关数
- */
- public static void saveData(String pictureFile, String gameMusic, int level,int score,int reminds) {
- try {
- save.setProperty("PictureFile", pictureFile);
- save.setProperty("GameMusic", gameMusic);
- save.setProperty("Level", level + "");
- save.setProperty("Score", score+"");
- save.setProperty("reminds", reminds+"");
- saveToFile(save, saveFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 保存窗口位置
- *
- * @param p
- * 表示窗口位置Point对象
- */
- public static void saveLocation(Point p) {
- /**
- * setProperty只接受字符串型的数据,如果是整形那么可以加上"", 既不影响数据又成功的使其转化成String
- */
- try {
- frameLocation.setProperty("frameX", p.x + "");
- frameLocation.setProperty("frameY", p.y + "");
- saveToFile(frameLocation, setFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 保存记录
- *
- * @param level
- * 当前关数
- * @param seconds
- * 所用时间
- */
- public static void saveRecord(int level, int seconds) {
- try {
- record.setProperty("Level" + level, seconds + "");
- saveToFile(record, recordFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 保存属性集到文件中
- *
- * @param p
- * 属性名
- * @param name
- * 文件名
- */
- public static void saveToFile(Properties p, File name) {
- try {
- p.storeToXML(new FileOutputStream(name), "no comment", "GB2312");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }