It is definitely feasible to implement the logic of your game as a smart contact and then it’s guaranteed to be secure for all users.
Each transaction to change the game state will cost a few cents as gas. If this cost is an issue (for example your game has tens of thousands of transactions per player), then you can use payment channels to reduce this cost.
One of the interesting things mentioned is randomness, which is difficult in the Web3 space. A verifiable randomness function (VRF) is difficult to make on TON, and the randomness generated on-chain is influenced by blocks' validators.
You may want to create an oracle for these purposes.