Hi @Mamo_West
It s a good idea to try to make a different Dapp 
Few comment on the contract:
If you want to check the provable address in the callback you need to set
provable_setProof(proofType_Ledger);
In the constructor otherwise the callback will fail.
I donât think you need to call update() a first time in the constructor because you will loose your free call.
Itâs a good idea to create a self destruct function to get back your fund when you want to destroy the contract. But you donât have to transfert the fund before the selfdestruct function is called, because it takes a msg.sender as argument and it sends back the fund from the contract to the address specify.
So you can just do
function close() public onlyOwner {
selfdestruct(msg.sender);
}
In your throwDiceResult you cannot divide floating number, actually their is no floating number in solidity, you will have to deal with wei , or assign a number of ether to a variable the (0.5 ether) you can find in the documentation is just a syntax sugar to avoid typing everything in wei. Does it work for you in remix ?
Your throwDice function is payable but the player is not able to multiply his gain because you are not using this value later. So for now if i bet 0.5 eth or 2 eth the gain will be the same ? Even you use this Dapp with a web3js interface someone is still able to interact with it directly on the blockchain.
Did you try your contract on Remix because i think the contract can compile but canât execute. Itâs probably cause by the contract size.
You are doing a nice usage of private, strongly typing variable and function is a good practice and can help you to limit the size of you contract.
Do not hesitate to post a video of your Dapp when itâs done 
Edit typo