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); }
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; } }