2011-05-01 104 views
0

嗨,所以我试图检查字符串中的某个字符,以确保它不是\,=,|等,并替换与“玩家”角色的空间,如果它不是,但该功能返回true每次,即使焦炭newLoc等于“”(空):if(aCHAR =='character'||'another character')problems

screen.get_contents返回一个矢量容器充满strins,并
精灵.get_location返回一个包含两个数字的int数组,[0]表示X,[1]是Y.

bool check_collision(Sprite& sprite,int X, int Y, Screen& screen) 
    { 
    ////////////////////// check whats already there ///// 
     char newLoc = screen.get_contents(sprite.get_location()[0]+Y,sprite.get_location()[1]+X); 
     if (newLoc == '|' || '/' || '_' || '=' || 'X' || 'x') 
      return true; 
     else 
      return false; 
    }; 

问题是什么? 谢谢!

回答

8

您需要:

if (newLoc == '|' || newLoc == '/' || ...) 

什么你写等同于:

if (newLoc == ('|' || '/' || ...)) 

这相当于:

if (newLoc == 1) 

注意,写这个的更清洁的方式可能是:

switch (newLoc) 
{ 
case '|': 
case '/': 
... 
    return true; 

default: 
    return false; 
} 
+0

谢谢!但为什么IDE想出1? – Griffin 2011-05-01 23:06:23

+0

@Griffin:'||'是*逻辑OR运算符*。如果它的任何一个参数是“真”,那么它“返回”“真”。除非是空字符''\ 0'',否则字符文字的计算结果为“TRUE”。所以表达的RHS等同于“TRUE”。当解释为整数值时,这反过来评估为'1'。 – 2011-05-01 23:08:59

4
newLoc == '|' || '/' || '_' || '=' || 'X' || 'x' 

不工作,你必须做这样的:

newloc == '|' || newloc == '/' || etc... 

然而,这是更容易阅读:

switch (newloc): 
    case '|': 
    case '/': 
    case '_': 
    case '=': 
    case 'X': 
    case 'x': 
     return true; 
    default: 
     return false;