iOS Canvas.Invalidate

Is it possible to ensure that a canvas is updated on screen in iOS.

I am trying to develop a simple two-player board game for iOS. It has 3 modes of play: 1) human vs. computer_algorithm; 2) human vs. human; and 3) computer_algorithm1 vs. computer_algorithm2. The game works fine except when I match up computer_algorithm1 vs. computer_algorithm2. Then the game still plays properly, but the canvas only updates the screen after the entire game is played, not after each “move” as I had hoped. I have tried to place a canvas1.invalidate command in a variety of methods / places to no avail. The game works fine when there is a human player because it takes time for the player to select a move. Showing each move is important since I had hoped to use it for training new players as well as for evaluating different algorithms and determining where they could be improved.

I have looked at timers and threads, but I can’t figure out how / where to use them in my situation. Below is a simplification of the code. Any suggestions appreciated:

[code]
initialize_game

while game_over = false
if player_to_move = player1 then
algorithm1_pick_move
player_to_move = player2
else
algorithm2_pick_move
player_to_move = player1
end

update_canvas1
canvas1_invalidate
check_game_over

wend

congratulate_winner[/code]

A Timer is probably sufficient. Set up one with a period of a second or so. Then in its Action event do something like this:

If game_over Then
  ' Stop Timer
  congratulate_winner
 Return
End If

 if player_to_move = player1 then
	algorithm1_pick_move
	player_to_move = player2
  else
	algorithm2_pick_move
	player_to_move = player1
  end if

 update_canvas1
 canvas1_invalidate
 check_game_over

This gets rid of your loop and allows the UI to update, which allows your canvas to refresh. The loop is replaced by the timer calling itself every second or so.

Thank you Paul. It’s taking me some time to work out all the details. But you’ve placed me on the right track. Much appreciated.