Ejemplo n.º 1
0
void pokeLoc(Layer& layer, int l, int x, int y, bool charge, char dir)
{
    Component* c = &layer.get(l)->get(x, y);
    if (c->getID() == "WIRE")
        invokeWire(layer, l, x, y, charge);
    else if (c->getID() == "LIGHT")
        invokeLight(layer, l, x, y, charge);
    else if (c->getID() == "VERT")
        invokeVert(layer, l, x, y, charge);
    else if (c->getID() == "NOT" && dir == 'l')
        invokeNot(layer, l, x, y, charge);
    else if ((dir == 'd' || dir == 'u') && isGate(c->getID()))
        invokeGate(layer, l, x, y, charge, dir);
}
Ejemplo n.º 2
0
bool Board::isWay(int pos, int dir, Square sq) {
    int p1 = move(pos, dir, 2);
    if (p1 == OUT)
        return (sq == out ? TRUE : FALSE);
    int p2, p3;
    if (dir == N || dir == S) {
        p2 = move(p1, E);
        p3 = move(p1, W);
    } else {
        p2 = move(p1, N);
        p3 = move(p1, S);
    }
    switch (sq) {
        case out    : return isOut(p1) | isOut(p2) | isOut(p3);
        case empty  : return isEmpty(p1) & isEmpty(p2) & isEmpty(p3);
        case brick  : return isBrick(p1) | isBrick(p2) | isBrick(p3);
        case prison : return isPrison(p1) | isPrison(p2) | isPrison(p3);
        case gate   : return isGate(p1) & isGate(p2) & isGate(p3);
        case tunnel : return isTunnel(p1) &
                             (isTunnel(p2) || isEmpty(p2)) &
                             (isTunnel(p3) || isEmpty(p3));
        default     : return FALSE;
    }
}