Caramba cara, queria poder te ajudar mais!
Contudo estou tendo dificuldades para compreender exatamente o que o seu codigo está fazendo. Por isso vou tentar explicar o que eu acho que esta acontecendo para você mesmo poder implementar essa mudança ai!
O seu codigo, pelo que pude entender, está fazendo o movimento do jogador e o movimento do computador juntos, porque eles estão no mesmo trecho de codigo.
Experimenta criar dois metodos separados para esses problemas, um sendo por exemplo:
jogadorFazJogada(){
//E aqui vc atualiza o seu frame com a jogado do jogador, so a do jogador
}
Depois cria um
maquinaFazJogada(){
//E aqui vc le a jogado da jogador, calcula o proximo passo da maquina e em seguida atualiza novamente o frame
}
Como não entendi direito o seu codigo, não posso te mostrar o que exatamente fazer, mas deve ser mais ou menos isso.
Dai quando for chamar os metodos vocÊ pode primeiramente atualizar quando o jogador faz a jogada e mandar o sistema esperar 2 segundos para fazer a sua jogada. Eu fiz isso usando usando o metodo sleep da classe Thread. Então ficaria mais ou menos assim:
jogadorFazJogada();
Thread t = new Thread("rei");
ExecutorService threadExecutor = Executors.newFixedThreadPool(1);
try {
t.sleep(200);
threadExecutor.execute(t);
if (t.isInterrupted()) {
System.exit(0);
}
} catch (InterruptedException ex) {
Logger.getLogger(TelaInicializacao.class.getName()).log(Level.SEVERE, null, ex);
}
MaquinaFazJogada();
Essa Thread obrigada que o programa espere.
Caso vc queira continuar sem fazer os 2 metodos conforme te falei, vc pode encontrar no seu codigo onde essas duas ações acontecem e entre elas colocar a thread para forçar a espera.
Flw