c++ 制作一个npc状态机包含定时创建与销毁npc拥有行为组
以下是一个简单的C++ NPC状态机示例,其中包含定时创建和销毁,并且具有行为组:
#include <iostream>
#include <chrono>
#include <thread>
#include <vector>
// 行为接口
class Behavior {
public:
virtual void execute() = 0;
};
// 跑步行为
class RunBehavior : public Behavior {
public:
void execute() override {
std::cout << "Run!" << std::endl;
}
};
// 跳跃行为
class JumpBehavior : public Behavior {
public:
void execute() override {
std::cout << "Jump!" << std::endl;
}
};
// NPC类
class NPC {
public:
NPC() {
m_behaviors.push_back(new RunBehavior());
m_behaviors.push_back(new JumpBehavior());
}
void update() {
if (m_isActive) {
// 随机执行一个行为
int index = rand() % m_behaviors.size();
m_behaviors[index]->execute();
}
}
void setActive(bool isActive) {
m_isActive = isActive;
}
private:
bool m_isActive = false;
std::vector<Behavior*> m_behaviors;
};
int main() {
std::vector<NPC*> npcs;
// 定时创建和销毁NPC
for (int i = 0; i < 10; i++) {
NPC* npc = new NPC();
npcs.push_back(npc);
npc->setActive(true);
std::this_thread::sleep_for(std::chrono::seconds(1));
npc->setActive(false);
npcs.erase(std::remove(npcs.begin(), npcs.end(), npc), npcs.end());
delete npc;
}
// 更新NPC状态机
while (true) {
for (auto npc : npcs) {
npc->update();
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}
在这个示例中,Behavior 类是一个行为的接口,RunBehavior 和 JumpBehavior 类是 Behavior 接口的具体实现。NPC 类是一个拥有多种行为的状态机,它可以随机执行其中之一。main 函数演示了如何定时创建和销毁 NPC,并且在一个无限循环中更新 NPC 的状态机。
原文地址: http://www.cveoy.top/t/topic/bD8o 著作权归作者所有。请勿转载和采集!