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可以随便修改, 配置生成生物,不用重新编译代码
    
    ```
  • 相关阅读:
    iOS的流畅性
    iOS系统的特点-iOS为什么运行更流畅
    安卓怎么不如ios运行流畅
    关于后台动态模板添加内容的总结 Builder使用
    PHP中用下划线开头的变量含义
    php 变量名前加一个下划线含义
    ThinkPHP 模版中的内置标签
    PC端页面如何调用QQ进行在线聊天?
    手机web页面调用手机QQ实现在线聊天的效果
    THINKPHP框架的优秀开源系统推荐
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236711.html
Copyright © 2011-2022 走看看