если (aCHAR == 'персонаж' || 'другой символ') проблемы - PullRequest
0 голосов
/ 02 мая 2011

Привет, поэтому я пытаюсь проверить определенный символ в строке, чтобы убедиться, что это не \, =, | и т. Д., И заменяю пробел символом "player", если это не так, но функция возвращает trueкаждый раз, даже если char newLoc равен '' (пусто):

screen.get_contents возвращает векторный контейнер, полный строк, а
sprite.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;
    };

в чем проблема? Спасибо !!

Ответы [ 2 ]

8 голосов
/ 02 мая 2011

Вам нужно:

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

То, что вы написали, эквивалентно:

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

, что эквивалентно:

if (newLoc == 1)

Обратите внимание, что уборщикспособ записи это может быть:

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

default:
    return false;
}
4 голосов
/ 02 мая 2011
newLoc == '|' || '/' || '_' || '=' || 'X' || 'x'

не работает, вы должны сделать это так:

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

Однако это легче читать:

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