通常,数据驱动设计中的实体和组件或游戏代码的其他部分将具有检查的名称,如果您想要找出您正在处理的对象.
void Player::Interact(Entity *myEntity)
{
if(myEntity->isNearEnough(this) && myEntity->GetFamilyName() == "guard")
{
static_cast<Guard*>(myEntity)->Say("No mention of arrows and knees here");
}
}
Run Code Online (Sandbox Code Playgroud)
如果你忽略了这可能是过早优化的可能性,很明显,如果他们的"名称"是一个简单的32位值而不是实际的字符串,查找实体将会快得多.
计算字符串名称中的哈希值是一种可能的选择.我实际上没有尝试过,但是在32bit的范围和良好的散列函数下,碰撞的风险应该是最小的.
问题是:显然我们需要某种方法将代码内(或某种外部文件中)字符串名称转换为那些整数,因为处理这些命名对象的人仍然希望将对象称为"守卫" "而不是"0x2315f21a".
假设我们正在使用C++并希望替换代码中出现的所有字符串,这是否可以通过语言内置功能实现,还是我们必须构建一个外部工具来手动浏览所有文件并交换值?
我有一个IF语句,我想转换成一个Switch语句......但它有2个变量!是否可以在C上进行?
这是一个摇滚,纸,剪刀游戏:
(R代表岩石,P代表纸张,S代表剪刀)
char play1, play2;
printf("\nPlayer 1 - Enter your Play: ");
scanf ("%c", &play1);
printf("\nPlayer 2 - Enter your Play: ");
scanf (" %c", &play2);
if (play1 == 'R' && play2 == 'P') {
printf ("Paper wins!"); }
else if (play1 == 'R' && play2 == 'S') {
printf ("Rock wins!");}
else if (play1 == 'R' && play2 == 'R) {
printf ("Draw!");}
Run Code Online (Sandbox Code Playgroud)
我必须为其他选项做这个,所以最好使用开关!