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可以随便修改, 配置生成生物,不用重新编译代码
    
    ```
  • 相关阅读:
    UVA 12338
    最短路问题
    菜鸟调错(十)——启动Tomcat报错“Unsupported major.minor version xxx ”
    Servlet总结(一)
    <html>
    Android Developer:Allocation Tracker演示
    H2数据库集群
    安卓通过广播自己主动回填短信验证码
    江湖问题研究-- intent传递有没有限制大小,是多少?
    spring 配置文件被加载两次
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236711.html
Copyright © 2011-2022 走看看