int Table::addAt(shared_ptr<AnimalCard> card, int row, int col, bool force) { if (!force) { //Transformation des nombres de row/col de l'affichage de table en nombre actuel de table row = START_LOCATION + (row - startPrintRow); col = START_LOCATION + (col - startPrintCol); } if (!isInbounds(row, col)) { IllegalPlacement ip("Position de carte n'est pas sur la table 103x103."); throw ip; } else if (!isLegalPlacement(row, col, topMax, botMax, leftMax, rightMax)) { IllegalPlacement ip("Position de la carte est invalide sur la table."); throw ip; } else if (cardsOnTable[row][col]->isPlayed()){ IllegalPlacement ip("Position de la table est deja occupee."); throw ip; } else if (force) { // Option pour forcer le placement de la carte - utiliser lors du loading de joute cardsOnTable[row][col] = card; cardsOnTable[row][col]->play(); return 1; } else { int numConnections = numberOfConnections(card, row, col); if (numConnections > 0) { cardsOnTable[row][col] = card; cardsOnTable[row][col]->play(); //Recalcule l'espace d'affichage if (row == topMax && topMax != 0){topMax--;startPrintRow++;} if (row == botMax && botMax != MAX_SIZE_TABLE-1){botMax++;} if (col == leftMax && leftMax != 0){leftMax--;startPrintCol++;} if (col == rightMax && rightMax != MAX_SIZE_TABLE-1){rightMax++;} printTableLength = botMax - topMax + 1; printTableWidth = rightMax - leftMax + 1; numCardsOnTable++; return numConnections; } else { IllegalPlacement ip("Carte ne se connecte pas a aucune autre carte."); throw ip; } } }
//----------------------------------------------------------------------------------------------- // generates a description for driver file //----------------------------------------------------------------------------------------------- QString InjectionWell::description() const { QString str("START WELL\n"); str.append(" NAME " + name() + "\n"); str.append(" TYPE I \n"); str.append(" GROUP " + group() + "\n"); str.append(" BHPLIMIT " + QString::number(bhpLimit()) + "\n"); str.append(" BHPINJ "); if(bhpInj() == WellControl::QWAT) str.append("WATER\n"); else if(bhpInj() == WellControl::QOIL) str.append("OIL\n"); else if(bhpInj() == WellControl::QGAS) str.append("GAS\n"); if(hasInstallTime()) { str.append(" INSTALLTIME " + QString::number(installTime()->value()) + " " + QString::number(installTime()->max()) + " " + QString::number(installTime()->min()) + "\n"); } if(hasCost()) { str.append(" COST " + QString::number(cost()->constantCost()) + " " + QString::number(cost()->fractionCost()) + " " + QString::number(cost()->capacityCost()) + "\n"); } if(numberOfConstantConnections() > 0) { str.append(" START CONNECTIONS\n"); for(int i = 0; i < numberOfConnections(); ++i) { WellConnection *wc = constantConnection(i); if(wc->cell() >= 0) str.append(" " + QString::number(wc->cell()) + " " + QString::number(wc->wellIndex()) + "\n"); else str.append(" " + QString::number(wc->i()) + " " + QString::number(wc->j()) + " " + QString::number(wc->k1()) + " " + QString::number(wc->k2()) + " " + QString::number(wc->wellIndex()) + "\n"); } str.append(" END CONNECTIONS\n\n"); } if(numberOfVariableConnections() > 0) { str.append(" START VARCONNECTIONS\n"); for(int i = 0; i < numberOfVariableConnections(); ++i) { WellConnectionVariable *wcv = variableConnection(i); str.append(" " + QString::number(wcv->iVariable()->value()) + " " + QString::number(wcv->iVariable()->max()) + " " + QString::number(wcv->iVariable()->min()) + " " + QString::number(wcv->jVariable()->value()) + " " + QString::number(wcv->jVariable()->max()) + " " + QString::number(wcv->jVariable()->min()) + " " + QString::number(wcv->wellConnection()->k1()) + " " + QString::number(wcv->wellConnection()->k2()) + " " + QString::number(wcv->wellConnection()->wellIndex()) + "\n"); } str.append(" END VARCONNECTIONS\n"); } str.append(" START SCHEDULE\n"); for(int i = 0; i < numberOfControls(); ++i) str.append(control(i)->description()); str.append(" END SCHEDULE\n\n"); str.append("END WELL\n\n"); return str; }