zoukankan      html  css  js  c++  java
  • 11-13 游戏编程行为模式

    ### Behavioral Pattern
    
    #### interpreter pattern
        string -> code
        
        
    instruction set: 提供基本操作
    virtual machine: 执行指令
    
    front-end: 生成效率更高的字节码
    
    ```
    void setHealth(int wizard, int amount);
    void setWisdom(int wizard, int amount);
    void setAgility(int wizard, int amount);
    void playSound(int soundId);
    void spawnParticles(int particleType);
    
    enum Instruction
    {
      INST_SET_HEALTH      = 0x00,
      INST_SET_WISDOM      = 0x01,
      INST_SET_AGILITY     = 0x02,
      INST_PLAY_SOUND      = 0x03,
      INST_SPAWN_PARTICLES = 0x04
    };
    
    switch (instruction)
    {
      case INST_SET_HEALTH:
        setHealth(0, 100);
        break;
    
      case INST_SET_WISDOM:
        setWisdom(0, 100);
        break;
    
      case INST_SET_AGILITY:
        setAgility(0, 100);
        break;
    
      case INST_PLAY_SOUND:
        playSound(SOUND_BANG);
        break;
    
      case INST_SPAWN_PARTICLES:
        spawnParticles(PARTICLE_FLAME);
        break;
    }
    
    
    
    ### stack matchine
    
    class VM
    {
    public:
      VM()
      : stackSize_(0)
      {}
      
    
    private:
      void push(int value)
      {
        // Check for stack overflow.
        assert(stackSize_ < MAX_STACK);
        stack_[stackSize_++] = value;
      }
    
      int pop()
      {
        // Make sure the stack isn't empty.
        assert(stackSize_ > 0);
        return stack_[--stackSize_];
      }
    
    private:
      static const int MAX_STACK = 128;
      int stackSize_;
      int stack_[MAX_STACK];
    };
    
    case INST_ADD:
    {
      int b = pop();
      int a = pop();
      push(a + b);
      break;
    }
    
    
    ```
    
    
    
    ### subclass 沙箱
    
    子类使用父类提供的方法
    
    #### Type Object
    
    ```
    class Monster{}
    class Drogon: Monster {}
    class Troll: Monster {}
    
        VS
    class Breed {}
    class Monster{
        public Breed breed;
    }
    
    
    Monster drogon = new Monster{ breed= new Breed("drogon")};
    
    Breed read config
    
    
    // 好处
    // monster的breed可以随便修改, 配置生成生物,不用重新编译代码
    
    ```
  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236711.html
Copyright © 2011-2022 走看看