gpt4 book ai didi

c++ - 有没有更优雅的方法来实现 C++ 游戏的 "cheat code"实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:21 25 4
gpt4 key购买 nike

我一直在通过深入研究一个项目(一个简单的 2d 游戏)来学习 C++。我试图实现一组作弊,但我在字符串操作方面是个新手。我确信会有比下面的代码更优雅的方式来实现我想要的。

根据要求,stringBuffer 只是一个包含最后 12 个按下字符的字符串。我把它放在前面是因为它在最后调整大小后被修剪,因此我的秘籍必须倒退。我在字符串操作方面非常菜鸟,我知道这里有问题,这就是为什么我要求对其进行查看并可能进行改进的原因。

//The following code is in my keyPressed function
cheatBuffer = (char)key + cheatBuffer;
cheatBuffer.resize(12);
string tempBuffer;
string cheats[3] = {"1taehc","2taehc","3taehc"};
for(int i = 0;i < 3;i++){
tempBuffer = cheatBuffer;
tempBuffer.resize(cheats[i].size());
if(cheats[i] == tempBuffer){
switch(i){
case 1:
//activate cheat 1
break;
case 2:
//active cheat 2
break;
case 3:
//active cheat 3
break;
}
}
}

代码分别为“cheat1”、“cheat2”和“cheat3”。我不禁想到这可能会好很多。任何见解将不胜感激。

最佳答案

您可能要考虑使用:

std::map<std::string, std::function<void ()>> (如果你可以使用C++0x)

std::map<std::string, std::tr1::function<void ()>> (如果可以使用TR1)

std::map<std::string, boost::function<void ()>> (如果你可以使用 Boost)

(当然,函数的签名可以不同)

使用 C++0x 的例子

#include <map>
#include <functional>
#include <string>
#include <iostream>

typedef std::map<std::string, std::function<void ()>> cheat_map;

inline void cheat1()
{
std::cout << "cheat 1 used!" << std::endl;
}

inline void cheat2()
{
std::cout << "cheat 2 used!" << std::endl;
}

int main()
{
cheat_map myCheats;
myCheats.insert(std::pair<std::string, std::function<void ()>>("cheat1", std::function<void ()>(cheat1)));
myCheats.insert(std::pair<std::string, std::function<void ()>>("cheat2", std::function<void ()>(cheat2)));

std::string buffer;
while (std::getline(std::cin, buffer)) {
if (!std::cin.good()) {
break;
}

cheat_map::iterator itr = myCheats.find(buffer);
if (itr != myCheats.end()) {
myCheats[buffer]();
}
}
}

输入:

notourcheat
cheat1
cheat2
cheat1

输出:

cheat 1 used!
cheat 2 used!
cheat 1 used!

Live demo

关于c++ - 有没有更优雅的方法来实现 C++ 游戏的 "cheat code"实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com