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));
    }
}
Beispiel #2
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;
}
Beispiel #3
0
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;
    }
}
Beispiel #4
0
/*
 * 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);
 }