Суть игры заключается в том, что есть 3 круга красного цвета, случайным образом выбирается один из них и закрашивается в зеленый. В течении определенного промежутка времени (который постепенно будет уменьшаться) необходимо клацнуть на него мышкой, если этого не происходит, выбирается другой случайный круг. Собственно, я не знаю как реализовать эти промежутки времени и не знаю как сделать, чтобы игра длилась определенное время. Вот, что у меня есть на данный момент
package yourreaction;
import javafx.application.Application;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.input.*;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import java.util.Vector;
import java.util.Random;
public class YourReaction extends Application {
Scene scene;
VBox vbox;
final int AmountOfCircles = 9;
final int radius = 20;
int score = 0;
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) {
stage.setTitle("Hello World!");
vbox = new VBox(5);
scene = new Scene(vbox, 300, 250);
stage.setScene(scene);
Button B_Start = new Button("Start");
Button B_Exit = new Button("Exit");
B_Start.setOnMousePressed(new EventHandler<MouseEvent> () {
public void handle(MouseEvent me) {
GameProcess();
}
});
B_Exit.setOnMousePressed(new EventHandler<MouseEvent> () {
public void handle(MouseEvent me) {
System.exit(0);
}
});
vbox.setAlignment(Pos.CENTER);
vbox.getChildren().addAll(B_Start, B_Exit);
stage.show();
}
public int GameProcess() {
vbox.getChildren().clear();
Random random = new Random();
HBox hbox = new HBox(5);
hbox.setAlignment(Pos.CENTER);
scene.setRoot(hbox);
Circle circle1 = new Circle(radius, Color.RED);
Circle circle2 = new Circle(radius, Color.RED);
Circle circle3 = new Circle(radius, Color.RED);
hbox.getChildren().addAll(circle1, circle2, circle3);
//while(true) {
int RandomNum = 1 + random.nextInt(3);
if(RandomNum == 1) circle1.setFill(Color.GREEN);
if(RandomNum == 2) circle2.setFill(Color.GREEN);
if(RandomNum == 3) circle3.setFill(Color.GREEN);
circle1.setOnMousePressed(new EventHandler<MouseEvent> () {
public void handle(MouseEvent me) {
circle1.setFill(Color.RED);
score++;
}
});
circle2.setOnMousePressed(new EventHandler<MouseEvent> () {
public void handle(MouseEvent me) {
circle2.setFill(Color.RED);
score++;
}
});
circle3.setOnMousePressed(new EventHandler<MouseEvent> () {
public void handle(MouseEvent me) {
circle3.setFill(Color.RED);
score++;
}
});
//}
return score;
}
}
В создании этой игры, Вам не обойтись без использования нескольких потоков. Внимательно изучите тему многопоточности в java; обратите свое внимание на метод .sleep()
. Вероятнее всего Вам нужно будет запустить ваш цикл в потоке таким образом чтобы на каждой итерации количество миллисекунд "пауза" уменьшалось.
Это, в некотором роде, может послужить примером: ожидание по времени.
Что бы игра длилась определённое время используй System.currentTimeMillis()
. Метод вернёт тебе переменную типа long, это количество миллисекунд прошедших с 1 января 1970 по текущий момент (вызов метода). Добавь условие для выхода:
if (System.currentTimeMillis() >= timeIsOut){ break }
где timeIsOut
твоя переменная long которая указывает на время по достижению которого игра должна завершиться. Поток можно прервать методом interrupt()
, но будьте осторожны, внезапное завершение потока может быть небезопасным.
Здесь я не совсем уверен что использование System.currentTimeMillis()
- лучший вариант. Но, считаю что после изучения темы потоков Вы сможете найти своё "лучшее решение". Не лишним будет посмотреть класс Calendar()
хм.. Calendar.getInstance()
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я использую в данный момент IDE Eclipse Version: Neon2 Release (4
Как мне сделать, что б при входе на сайт сначало проверяло inMemoryAuth, и если юзера там нету, то уже через UserDetailsServiceВот мой вариант кода: