The problem here is that there is a cap of how much gas[1] a block may consume which is the moving average of consumed gas plus some extra.
A few contracts got stuck that way; by getting to a point where they could no longer use that much gas.
[1]: Gas in Ethereum refers to the amount of value paid for computation, once gas runs out the execution is terminated and the gas subtracted from the senders account.
When the transaction runs, gas is consumed. If the transaction finished or there is no more gas, computation stops.
Now, transactions have no limit but blocks of transactions have. This is to prevent a single person creating and mining gigantic transaction to stall the network.
This limit is dynamic and you can raise it by having the network use more gas until the moving average climbs high enough.
I wonder if it's cheaper to verify a proof of checkmate that someone else computes. I'm not sure exactly what such a proof would look like, but there are lots of problems where finding a proof is hard, but verifying one is easy. Then you could make the checkmating player prove that it's checkmate and provide that proof along with their final move, and the contract could just verify it.