i'm trying to make a game in which the player faces an infinite (finitely specified) series of enemies and has to specify a strategy that provably defeats all of them (ie defeats enemy n in finite time for all n). i'm intending to do it by having the player describe their strategy in a decidable language, which is then incorporated into a larger program in that decidable language that runs the strategy against each enemy in turn, halting if the player loses. it should then be possible to determine whether that program halts.
if the language is straighforwardly a PDA then this seems like it should work, but my understanding is that a PDA only fails to halt by getting into an infinite loop. i'd like it to be possible for each enemy to be different, say, the nth enemy has n health. but in that case a winning strategy will never loop because each new enemy introduces a never-before-seen state (and also i believe a PDA struggles to represent arbitrarily large numbers, you can have one on the stack as unary or whatever but you can't compare it to others because you lose information about it by reading it? - and the specified strategy is just a fragment of a larger program that may be run repeatedly forever, so it can't read from input, this all has to be on the stack with $\epsilon$-transitions). so i'm looking for a model of computation that's nontrivial and decidable but can have a counter that goes up forever.