void GraphicalBoardFrame::deleteWidgets() { if (m_boardSize.isEmpty()) return; for (QSize currentTile(0, 0); currentTile.height() < m_boardSize.height(); currentTile.setHeight(currentTile.height() + 1)) { for (currentTile.setWidth(0); currentTile.width() < m_boardSize.width(); currentTile.setWidth(currentTile.width() + 1)) { delete tileAt(currentTile); removeTile(currentTile); } } for (int row = 0; row <= m_boardSize.height(); ++row) { delete markAt(QSize(0, row)); removeMark(QSize(0, row)); } for (int col = 1; col <= m_boardSize.width(); ++col) { delete markAt(QSize(col, 0)); removeMark(QSize(col, 0)); } }
void reflowConditional(BLOCK *src, BLOCK *dst) { BLOCKLIST *bl, *bl1 = src->succ; BLOCKLIST temp; BRIGGS_SET *bls = briggsAlloc(blockCount); int i; temp.block = dst; temp.next = NULL; src->succ = &temp; for (i=0; i < blockCount; i++) if (blockArray[i]) blockArray[i]->temp = FALSE; removeMark(bls, blockArray[0]); for (i=1; i < blockCount; i++) if (blockArray[i] && blockArray[i]->alwayslive) removeMark(bls, blockArray[i]); src->succ = bl1; for (i=0; i < blockCount; i++) if (blockArray[i]) blockArray[i]->temp = FALSE; bl = bl1; while (bl) { if (bl->block != dst) removeDeadBlocks(bls, src, bl->block); bl = bl->next; } if (dst->critical) { BLOCK *crit = dst; BLOCKLIST *bl = crit->succ->block->pred; while (bl) { if (bl->block == crit) { bl->block = src; break; } bl = bl->next; } dst = crit->succ->block; crit->succ = crit->pred = NULL; blockArray[crit->blocknum] = NULL; } src->succ->block = dst; src->succ->next = NULL; }
static void removeMark(BRIGGS_SET *bls, BLOCK *b) { BLOCKLIST *bl; if (b->blocknum == exitBlock || b->temp) return; b->temp = TRUE; briggsSet(bls, b->blocknum); bl = b->succ; while (bl) { removeMark(bls, bl->block); bl = bl->next; } }
/* * This handles the main envent with qGo : something has been clicked on the board */ void qGoBoard::slotBoardClicked(bool , int x, int y , Qt::MouseButton mouseState) { bool blackToPlay = getBlackTurn(); switch (boardwindow->getGamePhase()) { case phaseInit: //should not happen return ; case phaseNavTo: { boardwindow->getBoardHandler()->findMoveByPos(x, y); return; } case phaseEdit: { switch (boardwindow->getEditMark()) { case markNone: { if(tree->getCurrent()->getMatrix()->getStoneAt(x,y) == stoneNone) addStone(mouseState == Qt::LeftButton ? stoneBlack : stoneWhite, x, y); else addStone(stoneErase, x, y); setModified(true); return; } default: { if (mouseState == Qt::LeftButton) addMark(x,y, boardwindow->getEditMark()); else removeMark(x,y); setModified(true); return; } } return; } case phaseEnded: return; case phaseScore: { localMarkDeadRequest(x,y); return; } case phaseOngoing: if (blackToPlay && boardwindow->getMyColorIsBlack()) localMoveRequest(stoneBlack,x,y); if (!blackToPlay && boardwindow->getMyColorIsWhite()) localMoveRequest(stoneWhite,x,y); return; } }
// check <real_number> bool isNum(string s) { s = removeMark(s); int p = s.find_first_of('.'); if (p == -1) return !s.empty() && isDigits(s); else return s.size() > 1 && (isDigits(s.substr(0, p)) && isDigits(s.substr(p+1))); }
// check <integer> bool isInt(string s) { s = removeMark(s); return !s.empty() && isDigits(s); }