I tentar simular um jogo de futebol no Android Studio (linguagem: Java). I 90 gera números aleatórios. Cada iteração deve representar um minuto de partida. (Mas agora é apenas um segundo quando o teste). Após cada minuto jogado (neste caso segundo), os minutos e, possivelmente, a pontuação deve ser ajustada no aplicativo. Eu já testaram uma série de soluções que eu poderia encontrar na internet, tais como a solução da linha que aparece em todos os lugares. No entanto, isto não resultar no resultado que eu esperava.
resultado esperado: Um aplicativo que começa em 0 minutos e uma pontuação 0-0, aumentando o número de minutos de jogo por 1 a cada segundo, e também ajustando a pontuação se um gol é marcado.
A saída real: Uma tela branca para o número de milissegundos especificado no código, e em seguida, apenas o 'resultado final' do jogo. Por exemplo: 90' 2-1
.
Já tentou colocar a try/catch
outra parte código no loop. Eu também têm substituído sleep
com wait
. Isso sempre produz a mesma saída. Alguém pode me dizer como posso obter o número de segundos para subir ao vivo na tela e as mudanças de pontuação, assim que uma meta cai?
public void playLeagueMatch(Team team1, Team team2, TextView minuteTV,
TextView homeGoalsTV, TextView awayGoalsTV){
int strength1 = team1.strength;
int strength2 = team2.strength;
int minutesPlayed = 0;
double separation = Double.valueOf(strength1) / (Double.valueOf(strength1)+Double.valueOf(strength2)) * 100;
int homeGoals = 0;
int awayGoals = 0;
for (minutesPlayed = 0; minutesPlayed < 91; minutesPlayed++) {
String minuteName = Integer.toString(minutesPlayed);
minuteTV.setText(minuteName + "'");
int random = playMinute();
if(random < 101){
if(random <= separation){
homeGoals++;
homeGoalsTV.setText(Integer.toString(homeGoals));
}
else{
awayGoals++;
awayGoalsTV.setText(Integer.toString(awayGoals));
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
A função playMinute:
public int playMinute(){
Random ran = new Random();
int random = ran.nextInt(3500) + 1;
return random;
}
Não use Thread.sleep()
é uma prática ruim. Você pode usar um Countdown Timer
e em onTick
executar o seuplayMinute()
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
Log.i("seconds remaining: " ,""+ millisUntilFinished / 1000);
}
public void onFinish() {
Log.i("Timer Finished");
}
}.start();