Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Save New Duplicate & Edit Just Text
- package keyEventlearning;
- import javafx.animation.*;
- import javafx.application.Application;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.layout.Pane;
- import javafx.scene.paint.Color;
- import javafx.scene.shape.Rectangle;
- import javafx.stage.Stage;
- import javafx.util.Duration;
- import java.util.ArrayList;
- import java.util.List;
- public class first extends Application {
- private List<Rectangle> snakeBody = new ArrayList<>();
- private Pane sp = new Pane();
- private dir direction = dir.right;
- private boolean running = false;
- private Rectangle snake = new Rectangle(0, 0, 25, 25);
- private Rectangle food = new Rectangle(25, 25);
- private Timeline timeline = new Timeline();
- private String s;
- private Group g = new Group();
- public enum dir {
- right, left, up, down
- }
- private void createFood() {
- food.setFill(Color.RED);
- food.setTranslateX((int) (Math.random() * (475)) / 25 * 25);
- food.setTranslateY((int) (Math.random() * (475)) / 25 * 25);
- }
- public Rectangle r() {
- return new Rectangle(snake.getX(), snake.getY(), 25, 25);
- }
- private void createSnake() {
- snake.setFill(Color.BLUE);
- snake.setX((int) (Math.random() * (250)) / 25 * 25);
- snake.setY((int) (Math.random() * (250)) / 25 * 25);
- snakeBody.add(0, snake);
- new AnimationTimer() {
- private long lastUpdate = 0;
- public void handle(long now) {
- if (now - lastUpdate >= 280000000) {
- if (snake.getX() == food.getTranslateX() && snake.getY() == food.getTranslateY()) {
- createFood();
- snakeBody.add(r());
- snakeBody.get(snakeBody.size()-1).setFill(Color.BLUE);
- g.getChildren().addAll(snakeBody.get(snakeBody.size()-1));
- }
- if (running) {
- switch (direction) {
- case right:
- if(snakeBody.size() > 1) {
- snakeBody.get(snakeBody.size()-1).setX(snake.getX());
- snakeBody.get(snakeBody.size()-1).setY(snake.getY());
- }
- snake.setY(snake.getY());
- snake.setX(snake.getX()+25);
- break;
- case left:
- if(snakeBody.size() > 1) {
- snakeBody.get(snakeBody.size()-1).setX(snake.getX());
- snakeBody.get(snakeBody.size()-1).setY(snake.getY());
- }
- snake.setY(snake.getY());
- snake.setX(snake.getX()-25);
- break;
- case up:
- if(snakeBody.size() > 1) {
- snakeBody.get(snakeBody.size()-1).setX(snake.getX());
- snakeBody.get(snakeBody.size()-1).setY(snake.getY());
- }
- snake.setY(snake.getY()+25);
- snake.setX(snake.getX());
- break;
- case down:
- if(snakeBody.size() > 1) {
- snakeBody.get(snakeBody.size()-1).setX(snake.getX());
- snakeBody.get(snakeBody.size()-1).setY(snake.getY());
- }
- snake.setY(snake.getY()-25);
- snake.setX(snake.getX());
- break;
- }
- }
- lastUpdate = now;
- }
- }
- }.start();
- }
- private void startGame() {
- createFood();
- createSnake();
- running = false;
- }
- public static void main(String args) {
- launch(args);
- }
- public void start(Stage primaryStage) {
- sp.setPrefSize(500, 500);
- g.getChildren().addAll(sp);
- sp.setPrefSize(500, 500);
- sp.getChildren().addAll(food,snake);
- Scene scene = new Scene(g, Color.FLORALWHITE);
- scene.setOnKeyPressed(e -> {
- s = e.getCode().toString();
- running = false;
- });
- KeyFrame kf = new KeyFrame(new Duration(20), e -> {
- if (!running) {
- switch (s) {
- case "W":
- if (direction != dir.up) {
- direction = dir.down;
- running = true;
- break;
- }
- case "S":
- if (direction != dir.down) {
- direction = dir.up;
- running = true;
- break;
- }
- case "A":
- if (direction != dir.right) {
- direction = dir.left;
- running = true;
- break;
- }
- case "D":
- if (direction != dir.left) {
- direction = dir.right;
- running = true;
- break;
- }
- }
- }
- });
- timeline.getKeyFrames().add(kf);
- timeline.setCycleCount(Animation.INDEFINITE);
- timeline.play();
- startGame();
- primaryStage.setScene(scene);
- primaryStage.setTitle("Hello");
- primaryStage.show();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement