contract CryptoCards is ERC721Full, Ownable {

    string public tokenMetadataBaseURI = "https://apidemo721.nagemon.com/card/";
    constructor (string memory name, string memory symbol) public ERC721Full(name, symbol) {}
    function updateBaseURI(string calldata _tokenMetadataBaseURI) onlyOwner external {
        tokenMetadataBaseURI = _tokenMetadataBaseURI;
    }
    function register(address user, uint8 numberToken) onlyOwner external {
        for (uint8 j = 0; j < numberToken ; j++) {
            create(user); // Give each new player 5 cards
        }
    }

    function create(address user) private {
        uint256 tokenId = totalSupply() + 1;
        _mint(user, tokenId);
    }
    /**
        * @dev Returns an URI for a given token ID
        * Throws if the token ID does not exist. May return an empty string.
        * @param _tokenId uint256 ID of the token to query
        */
    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        return Strings.strConcat(
            tokenMetadataBaseURI,
            Strings.uint2str(_tokenId)
        );
    }
}
function tokenURI(uint256 _tokenId) public view returns (string memory) {
    return Strings.strConcat(
        tokenMetadataBaseURI,
        Strings.uint2str(_tokenId)
    );
}

/**
 * @dev Returns an URI for a given token ID
 * Throws if the token ID does not exist. May return an empty string.
 * @param _tokenId uint256 ID of the token to query
 */