Skip to content

定义

机制的定义:

实体及其自身的各种属性,均拥有自身的运行逻辑,也拥有与实体或属性相互影响的逻辑,对这些逻辑进行抽象的结果就是机制。典型的机制包括:

  1. 低光度敌对生物生成(世界实体的光度属性影响生物实体的生成)
  2. 耕地上的作物成长(方块实体的类别属性和湿润属性影响作物实体的生长度属性)
  3. 骷髅和僵尸遇阳光会自然(世界实体的光度属性影响骷髅和僵尸实体的debuff属性)
  4. 非和平模式下玩家跑动会消耗饱食度(玩家实体的移动运行逻辑影响自身的饱食度属性)
  5. ......

根据上述描述,可以提取出如下三要素:

  1. 实体
  2. 实体的属性
  3. 实体的行为

某个实体的某个属性会影响某个实体的行为算一种机制,某一群实体的行为会影响某个实体的行为或属性也算一种机制,这些行为导致的属性变化或属性变化导致的行为变化,即可归类为不同的机制。

以食物举例,食物拥有饱食度属性、被食用行为,玩家拥有食用行为;在玩家通过食用行为食用食物后,食物的被食用行为触发,该行为中食物就会根据自身的饱食度属性影响玩家的饱食度属性。该例子中食物的饱食度属性和被食用行为、玩家的饱食度槽属性和进食行为共同构建了一套饱食度机制,玩家拥有饱食度槽属性,这个属性槽可以通过食用行为和被食用行为改变,对其中的概念进行抽象可以得到以下概念:

  1. 食用者(consumer)
  2. 被食用者(producer)
  3. 食用行为(consumer behavior)
  4. 被食用行为(producer behavior)

其中食用者和被食用者可以是生物、物品、方块甚至是世界,食用行为和被食用行为可以是毁灭、转换或者任何其他自定义逻辑,由此可以抽象出如下接口:

java
/**
 * 食用者
 *
 * @author zhongpengcheng
 * @since 2023-09-24 22:12:30
 */
public interface IFoodConsumer {
    /**
     * 食用食物
     */
    default void consume(IFoodProducer foodProducer, World world) {
    }
}

/**
 * 被食用者
 *
 * @author zhongpengcheng
 * @since 2023-09-24 22:11:52
 */
public interface IFoodProducer {
    /**
     * 被食用
     */
    default void produce(IFoodConsumer foodConsumer, World world) {
    }
}
/**
 * 食用者
 *
 * @author zhongpengcheng
 * @since 2023-09-24 22:12:30
 */
public interface IFoodConsumer {
    /**
     * 食用食物
     */
    default void consume(IFoodProducer foodProducer, World world) {
    }
}

/**
 * 被食用者
 *
 * @author zhongpengcheng
 * @since 2023-09-24 22:11:52
 */
public interface IFoodProducer {
    /**
     * 被食用
     */
    default void produce(IFoodConsumer foodConsumer, World world) {
    }
}