背景
人生没有后悔药,但是游戏有!机战有些关卡非常恶心,准确的说你会挂很多次,如果能够利用sl大法(s:存档 l:读档),再难过的坎都能过去!本章节将使用备忘录模式模拟SRW的存档读档。
实现
存档类:提供各种存档信息
/**
* 存档:里面会有一些信息,为了简单起见,只列举几个比较有代表性的
*/
public class Record {
// 第几关(话)
private Integer chapterNumber;
// 回合数
private Integer roundCount;
// bgm:在我的bgm下没有人可以战胜我
private String bgm;
public Record(Integer chapterNumber, Integer roundCount, String bgm) {
super();
this.chapterNumber = chapterNumber;
this.roundCount = roundCount;
this.bgm = bgm;
}
public Record() {
super();
}
public Integer getChapterNumber() {
return chapterNumber;
}
public void setChapterNumber(Integer chapterNumber) {
this.chapterNumber = chapterNumber;
}
public Integer getRoundCount() {
return roundCount;
}
public void setRoundCount(Integer roundCount) {
this.roundCount = roundCount;
}
public String getBgm() {
return bgm;
}
public void setBgm(String bgm) {
this.bgm = bgm;
}
public void showRecord() {
System.out.println("第" + chapterNumber + "关,第" + roundCount + "话,bgm是" + bgm);
}
}
存档操作类:用来设置存档信息和保存存档
/**
* 存档设置器
*/
public class RecordSetter {
// 第几关(话)
private Integer chapterNumber;
// 回合数
private Integer roundCount;
// bgm:在我的bgm下没有人可以战胜我
private String bgm;
/**
* 设置存档信息
*/
public void setRecordMsg(Integer chapterNumber, Integer roundCount, String bgm) {
this.chapterNumber = chapterNumber;
this.roundCount = roundCount;
this.bgm = bgm;
}
/**
* 保存存档
*/
public Record saveRecord() {
return new Record(chapterNumber, roundCount, bgm);
}
}
玩家类:能够保存/载入存档
/**
* 当前玩家:可以读档和存档
*/
public class Player {
// 存档记录:最高五个
private List<Record> records = new ArrayList<>();
public Player() {
super();
// 初始化存档记录
for (int i=0; i<5; i++) {
records.add(null); // 空记录
}
}
/**
* 存档
*/
public void save(int index, Record record) {
System.out.println("存档到记录位" + (index+1) + "中");
records.add(index, record);
}
/**
* 读档
*/
public void load(int index) {
System.out.println("从记录位" + (index+1) + "中读档");
Record record = records.get(index);
if (null == record) {
System.out.println("空存档");
} else {
record.showRecord();
}
}
}
测试类
public class MementoTest {
public static void main(String[] args) {
Player player = new Player();
RecordSetter setter = new RecordSetter();
// 现在是第2关,第10回合,bgm:钢铁的孤狼
// 保存到存档位1
setter.setRecordMsg(2, 10, "钢铁的孤狼");
player.save(0, setter.saveRecord());
// 顺利通关,现在是第3关,第2回合,bgm:堕落的白骑士
// 保存到存档位2
setter.setRecordMsg(3, 2, "堕落的白骑士");
player.save(1, setter.saveRecord());
// 顺利通关,现在是第5关,第4回合,bgm:钢之魂
setter.setRecordMsg(5, 4, "钢之魂");
// 保存到存档位5
player.save(4, setter.saveRecord());
System.out.println("我是分割线--------------------");
// 读存档位2
player.load(1);
// 读存档位3
player.load(2);
// 读存档位5
player.load(4);
}
}
输出结果
存档到记录位1中
存档到记录位2中
存档到记录位5中
我是分割线--------------------
从记录位2中读档
第3关,第2回合,bgm是堕落的白骑士
从记录位3中读档
空存档
从记录位5中读档
第5关,第4回合,bgm是钢之魂
结论
没什么想说的。