ich würde das Zeichnen so machen:
Jede Anwendugn in delphi hat ein OnIdle-Ereignis. Wenn in der Anwendung nichts passiert (onidle auftritt), setzt du einen Flag beim Ereignis OnIdle auf true. Ein Timer zum Zeichnen ist sehr langsam. Aber er tut es fürs Erste.
Wenn das Timerereignis auftritt, frägst du ab, ob der Flag True ist (also bisher ist nix in der Anwendung passiert) Dann setzt du den Flag auf False. Wenn der Flag im OnIdle-Ereignis schon False ist, also vorher kein OnIdle-Ereignis auftrat, zeichnest du dein Spielfeld neu.
Damit kannst du verhindern, dass dein Formular(Spielfeld) ständig neu gezeichnet wird, wenn das Timer-Ereignis auftritt.
So ähnlich programmiert man das unter DirectX und das ist eine sehr effiziente Methode, damit die CPU nicht ständig rechnen muss, wenn du deine Anwendung mal auf Symbolgröße minimierst.