Java 在每层打开新锁的地方实施调平系统的标准实施规程
下面是一个快速的场景。想象一下,我有一个地雷,可以从1级升级到3级 一级地雷:可以开采青铜。100马力 二级矿:可以开采银矿。200hp 三级采矿:可以开采黄金。300马力 我希望能够将地雷从一级升级到二级,再升级到三级。目前,我可以在一个类中完成这一切,并使用upgradeLevel()方法更新level和hp属性。然后,我的minebrown()、mineslver()和mineGold()方法可以只检查level属性,并在清除level需求的情况下执行操作。然而,这似乎不像java那样只有一个类自己完成所有更新。我想知道人们通常如何在java中实现升级/升级系统 我想到了一些基本的东西,比如下面的UML图:Java 在每层打开新锁的地方实施调平系统的标准实施规程,java,Java,下面是一个快速的场景。想象一下,我有一个地雷,可以从1级升级到3级 一级地雷:可以开采青铜。100马力 二级矿:可以开采银矿。200hp 三级采矿:可以开采黄金。300马力 我希望能够将地雷从一级升级到二级,再升级到三级。目前,我可以在一个类中完成这一切,并使用upgradeLevel()方法更新level和hp属性。然后,我的minebrown()、mineslver()和mineGold()方法可以只检查level属性,并在清除level需求的情况下执行操作。然而,这似乎不像java那样只有
我的看看/搜索有限状态机是如何在Java中实现的,这将是你的答案。如果使用一个类来完成所有这些,我不会有任何问题。过度复杂的事情并不总是好的;-) 我将使用您的简单示例来说明接口的使用和接口的多个具体类实现
public class Level1 implements Level {
@Override
public boolean isLevel(int level) {
return (level == 1);
}
@Override
public Player updateLevel(Player player) {
player.setLevel(1);
player.setMiningLevel(1);
player.setMaximumHitPoints(100);
return player;
}
}
一级地雷:可以开采青铜。100马力
二级矿:可以开采银矿。200hp
三级采矿:可以开采黄金。300马力
如果采矿和生命点是升级所做的唯一事情,那么这种方法将过于工程化。当级别发生多个更改时,使用接口和具体类的威力就来了
首先,我们创建一个Player
类。这是一个带有getter和setter的普通Java类
public class Player {
private String name;
private int level;
private int maximumHitPoints;
private int miningLevel;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getMaximumHitPoints() {
return maximumHitPoints;
}
public void setMaximumHitPoints(int maximumHitPoints) {
this.maximumHitPoints = maximumHitPoints;
}
public int getMiningLevel() {
return miningLevel;
}
public void setMiningLevel(int miningLevel) {
this.miningLevel = miningLevel;
}
}
此类将包含级别、挖掘级别和最大生命点的值
现在,您可以使用if-else
语句列表或switch
语句更新此类。当你有30个关卡和10个不同的关卡值时,这会很快变得混乱
因此,您要做的第一件事是创建一个级别接口。让我们称之为级别
public interface Level {
public boolean isLevel(int level);
public Player updateLevel(Player player);
}
看起来很简单。现在,让我们看看这个接口的一个具体类实现
public class Level1 implements Level {
@Override
public boolean isLevel(int level) {
return (level == 1);
}
@Override
public Player updateLevel(Player player) {
player.setLevel(1);
player.setMiningLevel(1);
player.setMaximumHitPoints(100);
return player;
}
}
是的,您必须为每个级别创建一个具体的类实现
最后,您将构建一个具体实现的列表。createLevels
方法将为每个级别设置一行。然后,当您想要更新玩家统计信息时,您只需像这样迭代列表
Public class Levels {
private List<Level> levels;
public Levels() {
this.levels = new ArrayList<>();
createLevels();
}
private void createLevels() {
this.levels.add(new Level1());
}
public void updatePlayer(Player player, int levelNum) {
for (Level level : levels) {
if (level.isLevel(levelNum)) {
level.updateLevel(player);
return;
}
}
}
}
公共类级别{
私人名单级别;
公共级别(){
this.levels=新的ArrayList();
createLevels();
}
私有void createLevels(){
this.levels.add(新的Level1());
}
public void updatePlayer(Player-Player,int-levelNum){
用于(级别:级别){
if(level.isLevel(levelNum)){
级别。更新级别(玩家);
返回;
}
}
}
}
Public class Levels {
private List<Level> levels;
public Levels() {
this.levels = new ArrayList<>();
createLevels();
}
private void createLevels() {
this.levels.add(new Level1());
}
public void updatePlayer(Player player, int levelNum) {
for (Level level : levels) {
if (level.isLevel(levelNum)) {
level.updateLevel(player);
return;
}
}
}
}