In a simple card game (human vs. CPU) the logic works, but I want to delay the computer’s turn.
I have tried using Thread.sleep(int milliseconds) which works, but it messes up the order images are displayed. I’m not using a game loop, I am just dynamically updating ImageViews whenever cards are changed. The problem with Thread.sleep is all the images only update after Thread.sleep, there is no displaying only the human card before Thread.sleep. The human’s card and computer’s card display after Thread.sleep.
I’ve used Thread.sleep like so:
playPlayerCard(player); // Human first
displayPile(); // Display card pile (ImageView's)
player = nextPlayer(player); // Get's next player in Player mPlayers List<Player>
// Wait for computer to 'Think'
Thread.sleep(500);
playPlayerCard(player); //Computer's turn
displayPile(); // Display card pile (ImageView's)
Am I using Thread.sleep() wrong? Is there a better/correct way? I’ve searched online and tried using new Thread(), using handler.postDelayed(Runnable r, long milliseconds) and also CountDownTimer but none work since my variables: playPlayerCard(player); aren’t final variables.
I’ve always had problems delaying actions and the images appearing at the correct times. Any suggestions? Thanks in advance.
I used the solution from @Jakar and changed my variables to class-scope in order to use the Handler and Runnable correctly. This worked, the delay works correctly using
To clarify the solution, I had to take out the arguments from
playPlayerCard(Player player)and use a class-scopePlayer mPlayer;variable inplayPlayerCard()instead.