I looked at this problem once as an assignment in a post-graduate Computer Science course... Well, I was trying to work out how to play Battleships without a central trusted authority, but the principle is the same.
My solution was very similar to the one suggested in the question - sending encrypted versions of your moves (in Battleships: of your ship positions) first, and then revealing.
However, there were still two challenges I could not work around:
The Internet is unreliable, and players might drop out of the game at any time through no fault of their own (or even due to sabotage by the other player). In that situation, they should not be punished. The game should be cancelled. However, that situation is indistinguishable from a player receiving the decryption key from the other player, immediately realising they have lost, and deliberately disconnecting before sending their own key.
If the game completed, and one player could mathematically prove that they had won, the other player could (dishonestly) deny it and simply refuse to pay. At that point, the dispute needs to be escalated to some trusted authority (e.g. the tournament manager or a government court) to resolve. If there is such an authority trusted by both sides, it would likely be easier for them to host such a game, rather than forensically examine the results.
Even an encryption-based solution has flaws.