void TrackSelectionModel::shiftRows(const QModelIndexList & indices, int delta) { if (delta < 0) { for (int i = indices.count()-1; i >= 0; i--) { shiftRow(indices[i], delta, false); } } else if (delta > 0) { for (int i = indices.count()-1; i >= 0; i--) { shiftRow(indices[i], delta, false); } } invalidate(); }
/*Add legal Moves for Knight at Location to Linked List*/ int getKnightSingleMove(Game *game, Location *loc, ListNode *temp, MoveType type){ MoveType col; MoveType row; char c; int flag = 0; switch (type) { case UR:col = R; row = U; break; case UL:col = L; row = U; break; case DL:col = L; row = D; break; case DR:col = R; row = D; break; case U:row = U; case D:row = D; case L:col = L; case R:row = R; } if (canMoveK(game->board, loc, 1, col) && canMoveK(game->board, loc, 2, row)){ c = game->board[loc->column + shiftCol(game->board, loc, col)][loc->row + shiftRow(game->board, loc, row) * 2]; if (isEmpty(c) || isOpposite(c, game->board, loc)){ Move *move = setMove(loc, setLocation(loc->column + shiftCol(game->board, loc, col), loc->row + shiftRow(game->board, loc, row) * 2), NONETYPE); if (isValidMove(game, move)){ addMoveToList(temp, move); flag = 1; } else{ freeMove(move); } } } if (canMoveK(game->board, loc, 2, col) && canMoveK(game->board, loc, 1, row)){ c = game->board[loc->column + shiftCol(game->board, loc, col) * 2][loc->row + shiftRow(game->board, loc, row)]; if (isEmpty(c) || isOpposite(c, game->board, loc)){ Move *move = setMove(loc, setLocation(loc->column + shiftCol(game->board, loc, col) * 2, loc->row + shiftRow(game->board, loc, row)), NONETYPE); if (isValidMove(game, move)){ addMoveToList(temp, move); flag = 1; } else{ freeMove(move); } } } return flag; }
/*Add legal Moves for Bishop/Rook/Queen/King at Location to Linked List*/ int getBRQKMoves(Game *game, Location *loc, ListNode *temp){ int killflag, blockedflag, i, j, dist, len; int flag = 0; MoveType type; MoveType *list = getMoveTypeList(game->board, loc); len = getMoveTypeListLength(game->board, loc); for (i = 0; i < len; i++){ killflag = 0; blockedflag = 0; type = list[i]; dist = distFrom(game->board, loc, type); if (isKing(game->board, loc) && dist>0){ dist = 1; } for (j = 1; j <= dist&&!killflag&&!blockedflag; j++){ Location *tLoc = setLocation(loc->column + shiftCol(game->board, loc, type)*j, loc->row + shiftRow(game->board, loc, type)*j); if (legalMoveToKing(game, loc, tLoc)){ Move *move = setMove(loc, tLoc, NONETYPE); if (isValidMove(game, move)){ addMoveToList(temp, move); flag = 1; } else{ freeMove(move); } } else{ free(tLoc); } } } return flag; }