@Override
    protected void go(Map map, Direction direction) {
        super.go(map, direction);

        int dx, dy;
        int h = (int) collisionArea.getHeight();

        switch (direction) {
        case UPPER_LEFT:
            dx = x - SPEED;
            dy = y - SPEED;
            collisionArea.setLocation(dx, dy - h);
            if (!map.isHit(collisionArea)) {
                x = dx;
                y = dy;
            }
            break;
        case UPPER_RIGHT:
            dx = x + SPEED;
            dy = y - SPEED;
            collisionArea.setLocation(dx, dy - h);
            if (!map.isHit(collisionArea)) {
                x = dx;
                y = dy;
            }
            break;
        case LOWER_LEFT:
            dx = x - SPEED;
            dy = y + SPEED;
            collisionArea.setLocation(dx, dy - h);
            if (!map.isHit(collisionArea)) {
                x = dx;
                y = dy;
            }
            break;
        case LOWER_RIGHT:
            dx = x + SPEED;
            dy = y + SPEED;
            collisionArea.setLocation(dx, dy - h);
            if (!map.isHit(collisionArea)) {
                x = dx;
                y = dy;
            }
            break;
        default:
            break;
        }

        collisionArea.setLocation(x, y - h);
    }