gpt4 book ai didi

java - 为角色制作装备时子类太多(角色扮演游戏)

转载 作者:行者123 更新时间:2023-11-29 04:34:20 25 4
gpt4 key购买 nike

我正在构建一个小型角色扮演游戏。一个角色有多个属性,比如:力量、魔法、射箭和防御。玩家还可以穿戴装备,如 Helm 、躯干、腿、 Boot 、手套和武器。每件装备都有自己的统计数据。例如,银色躯干有 10 防御力。

当角色有,比如 15 防御,并且他穿着银色躯干,他的防御现在将是 25。无论如何,为了穿装备,它需要被生产。目前我用抽象工厂模式设计它(见图片)。

设计有很多类,其中大部分基本没用,比如青铜 Helm 银躯干等等,因为它们只有一个实例类统计。

因此,我的问题是:什么是生产装备的最佳方式,少一些更有用。由于它是针对学校项目的,因此我最好使用设计模式。 enter image description here

最佳答案

The design has a lot of classes, with most of them are basically useless, like Bronze Helmet, Silver Torso et cetera, because they only have an instance of the class Stats.

您似乎没有充分理由爆炸您的设计。整个层次结构可以只替换为一个名为 Equipment 的类。

public class Equipment {
private Stats stats;
private String equiptmentName;

//constructors and getters and setters follow..
}

您的Player 类然后可以有SetEquipment,如下所示。无论何时安装或卸载设备,您都可以使用 Equipment 中的 stats 更新 Player 统计数据。

public class Player {
private Set<Equipment> mountedEquipment;
private Stats baseStats;

public Player(Stats baseStats) {
this.baseStats = baseStats;//set base stats for player
mountedEquipment = new HashSet<Equipment>();
}

public void mountEquipment(Equipment equipment) {
baseStats.setMagic(baseStats.getMagic()+equipment.getStats().getMagic());

//update base stats similarly for strength, hitpoints, etc
mountedEquipment.add(equipment);

}

public void unmountEquipment(Equipment equipment) {

baseStats.setMagic(baseStats.getMagic()-equipment.getStats().getMagic());
//update base stats in a similar fashion for strength, hitpoints, etc
mountedEquipment.remove(equipment);
}

public Set<Equipment> getMountedEquiptment() {
return Collections.unmodifiableSet(mountedEquiptment);
}

}

您实际上不需要您在问题中显示的任何Factory 类,因为您可以将所有可能的stats 添加到EquipmentPlayer 类,每当您引入新的 Equipment 类型时。

关于java - 为角色制作装备时子类太多(角色扮演游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com