我有一個遊戲,跟蹤每場比賽後的用戶統計數據,比如他們走了多遠,他們被攻擊了多少次,他們落了多遠等等,而我目前的實現看起來有點像下面這樣簡化版本):尋找一個合適的設計模式
Class Player{
int id;
public Player(){
int id = Math.random()*100000;
PlayerData.players.put(id,new PlayerData());
}
public void jump(){
//Logic to make the user jump
//...
//call the playerManager
PlayerManager.jump(this);
}
public void attack(Player target){
//logic to attack the player
//...
//call the player manager
PlayerManager.attack(this,target);
}
}
Class PlayerData{
public static HashMap<int, PlayerData> players = new HashMap<int,PlayerData>();
int id;
int timesJumped;
int timesAttacked;
}
public void incrementJumped(){
timesJumped++;
}
public void incrementAttacked(){
timesAttacked++;
}
}
Class PlayerManager{
public static void jump(Player player){
players.get(player.getId()).incrementJumped();
}
public void incrementAttacked(Player player, Player target){
players.get(player.getId()).incrementAttacked();
}
}
所以我必須保持所有的統計數據,並把它從玩家級的,因爲它是不是玩家邏輯的一部分PlayerData類。然後我有PlayerManager,它將在服務器上,並且控制着玩家之間的交互(很多邏輯被排除在外,所以我可以保持這種簡單)。我把這些調用放到了Manager類的PlayerData類中,因爲有時你必須在玩家之間做一些檢查,例如,如果攻擊實際發生,那麼你會增加「attackHits」。
主要問題(在我看來,糾正我,如果我錯了)是,這是不是很可擴展。如果我想通過添加方法和字段來跟蹤新的統計信息,則必須觸摸PlayerData類,然後必須向PlayerManager添加更多方法,因此它不是非常模塊化的。
如果您對此有所改進,您會建議,我會非常感激。謝謝。
你有多少種類型的玩家?如果不止一個,每種類型的玩家是否都有相同的動作? – Bhushan
只有一種類型的玩家,所有人都採取相同的行動。我想稍後添加操作和統計信息的選項,因此我需要更多的可擴展性。 – user1066015