Exemplo n.º 1
0
Arquivo: move.c Projeto: mplaton1/IPP
Move constructMoveCommand(int x, int y, Move result, board Game) {

    Piece piece = pieceOnPosition(Game, result->xFrom, result->yFrom);
    result->xTo = x;
    result->yTo = y;
    result->isPieceCreated = NULL;

    if (isPositionFree(Game, x, y)) {
        result->isPieceRemoved = NULL;
    }
    else {
        Piece piece1 = pieceOnPosition(Game, x, y);
        Piece winner = tournament(piece, piece1);
        result->isPieceRemoved = (winner != piece) ? piece : piece1;
        if (winner == NULL) {
            result->isPieceRemoved = piece1;
        }
    }

    return result;
}
Exemplo n.º 2
0
InventoryItem* Inventory::getItemAt( size_t invPosX, size_t invPosY )
{
  assert( !isPositionFree( invPosX, invPosY ) );

  size_t numBackItems = backpackItems.size();
  for( size_t curBackItemNr=0; curBackItemNr<numBackItems; ++curBackItemNr )
  {
    InventoryItem* curItem = backpackItems[ curBackItemNr ];
    size_t itemPosX = curItem->getInventoryPosX();
    size_t itemPosY = curItem->getInventoryPosY();
    size_t itemSizeX = curItem->getItem()->getSizeX();
    size_t itemSizeY = curItem->getItem()->getSizeY();

    if( itemPosX <= invPosX && itemPosX + itemSizeX > invPosX &&
        itemPosY <= invPosY && itemPosY + itemSizeY > invPosY )
    {
      return curItem;
    }
  }

  // should have found an item so should never reach here
  abort();
}
Exemplo n.º 3
0
Arquivo: move.c Projeto: mplaton1/IPP
int getPossibleMoves(board Game, Piece piece, Move *movesTable, Point point) {
    int n = 0;

    movesTable[n] = newMove();
    n++;

    if (piece->lastMove == currentTurn(Game)) {
        return n;
    }

    n = getMovesCommands(Game, piece, movesTable, point);

    Move result = moveBuilder(point, piece, Game);
    int board_Size = boardSize(Game);
    int x = point->x;
    int y = point->y;


    if (toupper(piece->letter) == 'C' &&
            currentTurn(Game) - piece->lastMove >=3 ) {
        for (int j=-1; j<=1; j++) {
            for (int i=-1; i<=1; i++) {
                if ( (j != 0 ||
                     i != 0) &&
                     validatePoint(makePoint(x + i, y + j), board_Size) &&
                     isPositionFree(Game, x + i, y + j)) {
                    result->xTo = x + i;
                    result->yTo = y + j;
                    result->isPieceRemoved= NULL;


                    char letter = piece->letter;
                    Piece pieceCreated = createNewPiece(piece->owner, letter,
                                                        currentTurn(Game));
                    result->isPieceCreated = pieceCreated;
                    result->command = PRODUCE_PEASANT;
                    movesTable[n] = newMove();
                    copyMoveData(movesTable[n], result);
                    n++;

                    free(result->isPieceCreated);

                    letter = matchingKnightLetter(letter);

                    pieceCreated = createNewPiece(piece->owner, letter,
                                                  currentTurn(Game) - 1);
                    result->isPieceCreated = pieceCreated;
                    result->command = PRODUCE_KNIGHT;
                    movesTable[n] = newMove();
                    copyMoveData(movesTable[n], result);
                    n++;

                    free(result->isPieceCreated);
                }
            }
        }
    }

    free(result);

    return n;
}