Java и Java Swing. Может ли кто-нибудь объяснить эти взаимодействия Thread.sleep()?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java и Java Swing. Может ли кто-нибудь объяснить эти взаимодействия Thread.sleep()?

Сообщение Anonymous »

Я работаю над своим первым личным проектом — делаю простую игру в блэкджек с использованием Java и Java Swing (как раз то, что изучает мой класс), и я хочу сделать так, чтобы при последовательном вытягивании карты программой (по сравнению с тем, когда игрок нажимает кнопку удара), между вытягиванием каждой карты была небольшая пауза.
Вот мой метод, который использует Thread.sleep():

Код: Выделить всё

public static void pause(int time) {
//makes java pause for a certain amount of time in ms
try {
Thread.sleep(time);
}
catch (InterruptedException e) {

}

}
Я не уверен, что я просто использую это неправильно, но всякий раз, когда у меня это получается так:

Код: Выделить всё

public void drawFirstCards(){
//draw the initial two cards for the player and the dealer
hit(dealer);
pause(DRAW_DELAY);
hit(dealer);
pause(DRAW_DELAY);
hit(user);
pause(DRAW_DELAY);
hit(user);
}
Все работает так, как я хочу. Я хотел сделать его менее «копированным и пастообразным», поэтому попробовал добавить его в метод hit следующим образом:

Код: Выделить всё

public void hit(Player player){
//draw a card and add its value to the score. If the score is over 21, the player state is bust. If the score is 21, the player state is blackjack.
Card drawnCard = deck.drawCard();
player.addCard(drawnCard);
player.addScore(drawnCard.getValue());
user.revalidate();
user.repaint();
pause(DRAW_DELAY);
}
Но теперь, программа, но теперь, всякий раз, когда я нажимаю кнопку «Нажатие», значок карточки появляется после паузы, а не перед ней, что мне не нравится, поскольку из-за этого она кажется запаздывающей.
Кроме того, позже есть немного кода, где у меня есть цикл while, который также использует мой метод паузы:

Код: Выделить всё

public void dealersTurn() { //After the user stands or gets a blackjack, the dealer starts drawing cards
//draw cards until either the dealer busts or the dealer gets a score that is greater than or equal to the user
while (dealer.getScore() < BLACKJACK && dealer.getScore() < user.getScore()) {
hit(dealer);
pause(DRAW_DELAY);
}
}
Я думал, что программа вытянет карту, подождет, а затем вытянет другую карту, но вместо этого она вытягивает все карты, и вам приходится ждать общее время ожидания, прежде чем значки появятся в графическом интерфейсе.
Может ли кто-нибудь помочь мне лучше понять Threads.sleep(), чтобы я мог заставить его работать так, как я хочу? Или есть лучший способ делать небольшие паузы?

Подробнее здесь: https://stackoverflow.com/questions/797 ... teractions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»