Так что я изо всех сил пытаюсь заставить это работать, если кто-нибудь может дать мне руку, чтобы понять это, было бы очень признательно.
Я в основном хочу установить другой таймер или переменную, которая будет постоянно увеличиваться, и как только это Достигнув числа, скажем, 5000 тиков за 5 секунд, он будет сброшен до начального уровня и начнется снова при вызове newApple (); функция, так что я могу постоянно возродить новые фрукты вокруг экрана.
package Test.src.Snake;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class Snake extends JPanel implements KeyListener, ActionListener {
private final int WIDTH = 500, HEIGHT = 550, DELAY = 75;
private final int size = 10;
private final int allDots = 2500;
private final int applePos = 50;
private int[] x = new int[allDots];
private int[] y = new int[allDots];
private boolean up = false;
private boolean down = false;
private boolean left = false;
private boolean right = true;
private boolean inGame = true;
private int xApple;
private int yApple;
private int xStone;
private int yStone;
private int xMushroom;
private int yMushroom;
private int length;
private int score = 0;
private Random ran = new Random();
private int num;
private Font font = new Font("Helvetica", Font.PLAIN, 16);
Timer timer = new Timer(DELAY, this);
public Snake() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
//setBackground(Color.GREEN);
addKeyListener(this);
init();
}
private void init() {
length = 3;
for (int i = 0; i < length; i++) {
x[i] = 200;
y[i] = 200;
}
newApple();
timer.start();
}
public void actionPerformed(ActionEvent actionEvent) {
if (inGame) {
move();
apple();
collision();
}
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.DARK_GRAY);
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < 50; j++) {
g.drawRect(i * size, j * size, size,size);
}
}
g.setColor(Color.BLACK);
g.drawLine(0, 500, 500, 500);
for (int i = 0; i < length; i++) {
if (i == 0) {
g.setColor(new Color(0,128,0));
g.fillRect(x[i], y[i], size, size);
} else {
g.setColor(new Color(34,139,34));
g.fillRect(x[i], y[i], size, size);
}
}
if (num == 0) {
g.setColor(Color.RED);
g.fillRoundRect(xApple, yApple, size, size, 10,10);
}
if (num == 1) {
g.setColor(Color.GRAY);
g.fillRoundRect(xStone, yStone, size, size, 10,10);
}
if (num == 2) {
g.setColor(Color.BLUE);
g.fillRoundRect(xMushroom, yMushroom, size, size, 10,10);
}
endGame(g);
score(g);
}
private void endGame(Graphics g) {
String endGameScreen = "Game Over";
String resetGameText = "Press Space to Reset";
if(!inGame) {
timer.stop();
g.setColor(Color.BLACK);
g.setFont(font);
g.drawString(endGameScreen, 210, 200);
g.drawString(resetGameText, 170, 230);
}
}
private void score(Graphics g) {
String windowScore = "Score: " + score;
String tailLength = "Tail Length: " + (length - 1);
g.setFont(font);
g.setColor(Color.BLACK);
g.drawString(windowScore, 20, 530);
g.drawString(tailLength, 150, 530);
}
private void apple() {
if((x[0] == xApple) && (y[0] == yApple)) {
length++;
score += 10;
newApple();
}
if((x[0] == xStone) && (y[0] == yStone)) {
length++;
score += 10;
newApple();
}
if((x[0] == xMushroom) && (y[0] == yMushroom)) {
length++;
score += 30;
newApple();
}
}
private void newApple() {
num = ran.nextInt(3);
//System.out.println(num);
if (num == 0) {
int r = ran.nextInt(applePos);
xApple = (r * size);
r = ran.nextInt(applePos);
yApple = (r * size);
}
if (num == 1) {
int r = ran.nextInt(applePos);
xStone = (r * size);
r = ran.nextInt(applePos);
xStone = (r * size);
}
if (num == 2) {
int r = ran.nextInt(applePos);
xMushroom = (r * size);
r = ran.nextInt(applePos);
yMushroom= (r * size);
}
}
private void move() {
for (int i = length; i > 0; i--) {
x[i] = x[(i - 1)];
y[i] = y[(i - 1)];
}
if (up) {
y[0] -= size;
}
if (down) {
y[0] += size;
}
if (left) {
x[0] -= size;
}
if (right) {
x[0] += size;
}
}
private void collision() {
for (int i = length; i > 0; i--) {
if (x[0] == x[i] && y[0] == y[i]) {
length = 0;
inGame = false;
}
}
if (x[0] == getWidth()) {
x[0] = -10;
}
if (x[0] == -size) {
x[0] = getWidth();
}
if (y[0] == 500) {
y[0] = -10;
}
if (y[0] == -size) {
y[0] = 490;
}
}
public void keyPressed(KeyEvent keyEvent) {
int key = keyEvent.getKeyCode();
if ((key == KeyEvent.VK_W) && (!down)) {
up = true;
left = false;
right = false;
}
if ((key == KeyEvent.VK_S) && (!up)) {
down = true;
left = false;
right = false;
}
if((key == KeyEvent.VK_A) && (!right)) {
left = true;
up = false;
down = false;
}
if((key == KeyEvent.VK_D) && (!left)) {
right = true;
up = false;
down = false;
}
if ((key == KeyEvent.VK_UP) && (!down)) {
up = true;
left = false;
right = false;
}
if ((key == KeyEvent.VK_DOWN) && (!up)) {
down = true;
left = false;
right = false;
}
if((key == KeyEvent.VK_LEFT) && (!right)) {
left = true;
up = false;
down = false;
}
if((key == KeyEvent.VK_RIGHT) && (!left)) {
right = true;
up = false;
down = false;
}
if(key == KeyEvent.VK_SPACE) {
inGame = true;
timer.start();
length = 3;
score = 0;
for (int i = 0; i < length; i++) {
x[i] = 200;
y[i] = 200;
}
}
}
public void keyReleased(KeyEvent keyEvent) {
}
public void keyTyped(KeyEvent keyEvent) {
}
}
Я не ожидаю, что полные ответы просто дайте мне идеи, чтобы я мог понять это самостоятельно, но полные ответы с хорошим объяснением будет много оценили.