LoadAndSave.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:5k
源码类别:

游戏

开发平台:

Java

  1. package model;
  2. import java.awt.Point;
  3. import java.io.*;
  4. import java.util.ArrayList;
  5. import java.util.Properties;
  6. /**
  7.  * 用户的一些数据,包括运行游戏的窗体位置,游戏中途需要退出而又希望下一次游戏的 的时候能将前一次状态读取回来,还有如果用户打破了记录,那么程序要存储这些记录
  8.  * 或者读取先前的记录。这些操作必须依赖对文件的操作来实现,本类就以静态方法的形 式提供了处理这些数据的接口。
  9.  * 
  10.  * @author : 何晓飞
  11.  * @version : 2.0
  12.  * 
  13.  */
  14. public class LoadAndSave {
  15. private static final String root="";
  16. /* 保存窗口位置的一个属性集 */
  17. private static final Properties frameLocation = new Properties();
  18. /* 保存存档游戏的数据的一个属性集 */
  19. private static final Properties save = new Properties();
  20. /* 保存游戏各关记录 */
  21. private static final Properties record = new Properties();
  22. /* 保存最短破关时间纪录的文件 */
  23. public static File recordFile = new File(root+"record.ini");
  24. /* 保存上次退出时主窗口位置的文件 */
  25. public static File setFile = new File(root+"setup.ini");
  26. /* 保存存档游戏的数据的文件 */
  27. public static File saveFile = new File(root+"save.ini");
  28. /**
  29.  * 从文件中读取属性集
  30.  * 
  31.  * @param p
  32.  *            属性名
  33.  * @param name
  34.  *            文件名
  35.  */
  36. public static void loadFromFile(Properties p, File name) {
  37. try {
  38. p.loadFromXML(new FileInputStream(name));
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. /**
  44.  * 读取窗口位置
  45.  * 
  46.  * @return location 由x,y生成一个Point对象
  47.  */
  48. public static Point loadLocation() {
  49. Point location = null;
  50. int x = 0;
  51. int y = 0;
  52. /**
  53.  * 读取文件的时候,必须保证文件存在
  54.  */
  55. if (setFile.exists()) {
  56. try {
  57. loadFromFile(frameLocation, setFile);
  58. x = Integer.parseInt(frameLocation.getProperty("frameX"));
  59. y = Integer.parseInt(frameLocation.getProperty("frameY"));
  60. } catch (NumberFormatException e) {
  61. e.printStackTrace();
  62. }
  63. location = new Point(x, y);
  64. }
  65. return location;
  66. }
  67. /**
  68.  * 装载所有的记录
  69.  * 
  70.  * @param totalLevel
  71.  *            总关数
  72.  * @return record类型的Array list
  73.  */
  74. public static ArrayList<Record> loadRecord(int totalLevel) {
  75. int seconds = 0;
  76. /**
  77.  * 一个包含record类型的容器
  78.  */
  79. ArrayList<Record> records = new ArrayList<Record>();
  80. if (recordFile.exists()) {
  81. try {
  82. loadFromFile(record, recordFile);
  83. /**
  84.  * 读取的记录条数和总关数直接相关,如果该关存在一条记录那么 将它读取出来
  85.  */
  86. for (int i = 1; i <= totalLevel; i++) {
  87. if (record.getProperty("Level" + i) != null) {
  88. seconds = Integer.parseInt(record.getProperty("Level"
  89. + i));
  90. records.add(new Record(i, seconds));
  91. }
  92. }
  93. } catch (Exception e) {
  94. e.printStackTrace();
  95. }
  96. }
  97. return records;
  98. }
  99. /**
  100.  * 从保存存档游戏的数据的文件读入存档游戏的数据
  101.  * 
  102.  */
  103. public static State loadSave() {
  104. /**
  105.  * 三个数据需要读取的数据
  106.  */
  107. String pictureFile = null;
  108. String gameMusic = null;
  109. int level = 0;
  110. int score = 0;
  111. int reminds=0;
  112. /**
  113.  * 一条state包括上述的三条数据
  114.  */
  115. State state = null;
  116. if (saveFile.exists()) {
  117. try {
  118. loadFromFile(save, saveFile);
  119. pictureFile = save.getProperty("PictureFile");
  120. gameMusic = save.getProperty("GameMusic");
  121. level = Integer.parseInt(save.getProperty("Level"));
  122.     score=Integer.parseInt(save.getProperty("Score"));
  123.     reminds=Integer.parseInt(save.getProperty("reminds"));
  124. /*
  125.  * 读取数据并建立一条
  126.  */
  127. state = new State(pictureFile, gameMusic, level,score,reminds);
  128. } catch (Exception e) {
  129. e.printStackTrace();
  130. }
  131. }
  132. return state;
  133. }
  134. /**
  135.  * 保存数据
  136.  * 
  137.  * @param pictureFile
  138.  *            图片文件夹
  139.  * @param gameMusic
  140.  *            游戏音乐
  141.  * @param level
  142.  *            当前关数
  143.  */
  144. public static void saveData(String pictureFile, String gameMusic, int level,int score,int reminds) {
  145. try {
  146. save.setProperty("PictureFile", pictureFile);
  147. save.setProperty("GameMusic", gameMusic);
  148. save.setProperty("Level", level + "");
  149. save.setProperty("Score", score+"");
  150. save.setProperty("reminds", reminds+"");
  151. saveToFile(save, saveFile);
  152. } catch (Exception e) {
  153. e.printStackTrace();
  154. }
  155. }
  156. /**
  157.  * 保存窗口位置
  158.  * 
  159.  * @param p
  160.  *            表示窗口位置Point对象
  161.  */
  162. public static void saveLocation(Point p) {
  163. /**
  164.  * setProperty只接受字符串型的数据,如果是整形那么可以加上"", 既不影响数据又成功的使其转化成String
  165.  */
  166. try {
  167. frameLocation.setProperty("frameX", p.x + "");
  168. frameLocation.setProperty("frameY", p.y + "");
  169. saveToFile(frameLocation, setFile);
  170. } catch (Exception e) {
  171. e.printStackTrace();
  172. }
  173. }
  174. /**
  175.  * 保存记录
  176.  * 
  177.  * @param level
  178.  *            当前关数
  179.  * @param seconds
  180.  *            所用时间
  181.  */
  182. public static void saveRecord(int level, int seconds) {
  183. try {
  184. record.setProperty("Level" + level, seconds + "");
  185. saveToFile(record, recordFile);
  186. } catch (Exception e) {
  187. e.printStackTrace();
  188. }
  189. }
  190. /**
  191.  * 保存属性集到文件中
  192.  * 
  193.  * @param p
  194.  *            属性名
  195.  * @param name
  196.  *            文件名
  197.  */
  198. public static void saveToFile(Properties p, File name) {
  199. try {
  200. p.storeToXML(new FileOutputStream(name), "no comment", "GB2312");
  201. } catch (Exception e) {
  202. e.printStackTrace();
  203. }
  204. }
  205. }