Как я могу сделать, чтобы Apple, Stone и Mushroom исчезали и возрождались через определенное время? - PullRequest
0 голосов
/ 04 марта 2020

Так что я изо всех сил пытаюсь заставить это работать, если кто-нибудь может дать мне руку, чтобы понять это, было бы очень признательно.

Я в основном хочу установить другой таймер или переменную, которая будет постоянно увеличиваться, и как только это Достигнув числа, скажем, 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) {

    }
}

Я не ожидаю, что полные ответы просто дайте мне идеи, чтобы я мог понять это самостоятельно, но полные ответы с хорошим объяснением будет много оценили.

...