作爲Statistic
(或一組Statistics
)描述了一種Achievement
不應該/這些Statistic
/秒被存儲在Achievement
類?例如,改進的Achievement
類:
public class Achievement {
SparseArray<Statistic> mStatistics = new SparseArray<Statistic>();
// to get a reference to the statisctics that make this achievement
public SparseArray<Statistic> getStatics() {
return mStatistics;
}
// add a new Statistic to these Achievement
public void addStatistic(int statisticId, Statistic newStat) {
// if we don't already have this particular statistic, add it
// or maybe update the underlining Statistic?!?
if (mStatistics.get(statisticId) == null) {
mStatistic.add(newStat);
}
}
// remove the Statistic
public void removeStatistic(int statisticId) {
mStatistic.delete(statisticId);
}
// check to see if this achievment has a statistic with this id
public boolean hasStatistics(int statisticId) {
return mStatistic.get(statisticId) == null ? false : true;
}
// rest of your code
}
此外,Statistic
類應該存儲它的目標(50值Statistic1)值在它作爲一個字段。
的成就有很多相關的統計,這個關係必須 關聯的每個成就所要求的統計(和它 值)。例如,Achievement1需要Statistic1的值爲 50(或更高),Statistic2的值爲100(或更高)。
的統計數據已經存儲在個成就因此,所有你需要做的是保存個成就(或成就他們自己)的ID數組/列表,這樣,你將有機會獲得的統計數據取得了這些成就。
鑑於一個統計我還需要知道什麼是相關的成就 (爲了檢查他們統計變化時。
你會使用的成就上述陣列/列表,迭代和檢查,看是否實現認爲特別Statistic
:
ArrayList<Achievement> relatedAchievements = new ArrayList<Achievement>();
for (Achievement a : theListOfAchievments) {
if (a.hasStatistics(targetStatistic)) {
relatedAchievements.add(a); // at the end this will store the achievements related(that contain) the targetStatistic
}
}
另一種選擇是有地方靜態映射,其存儲成就有一個Statistic
,映射將在每次調用addStatictic
或removeStatistic
方法時得到更新。
關於你的代碼,如果你不需要Statistic
對象,並很高興與只是抱着它id
參考,那麼你可以提高statisticsForAnAchievement
有:
SparseArray<SparseIntArray> statisticsForAnAchievement;
// the index of the SparseArray is the Achievement's id
// the index of the SparseIntArray is the Statistic's id
// the value of the SparseIntArray is the Statistic's value