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可以随便修改, 配置生成生物,不用重新编译代码 ```
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)