Как правильно прописать старт программы - Java

Узнай цену своей работы

Формулировка задачи:

Ребятки, помогите плиз. Есть код змейки, в интерфейс прилепил 2 кнопки. Одна с выходом, вторая с "new game", проблем не было с первой кнопкой, прописать пару слов, а вот как прописать чтобы при нажатии начиналась новая игра, я не знаю... Помогите, пожалуйста. И ещё... Пожаулйста, помогите написать код, чтобы когда змейка сжирала еду, была отображена табличка с очками, к примеру, за каждое сожранное яблоко - 10 очей. Спасибо всем, кто помог! 1 class
package snake1;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Snake1 extends JPanel implements ActionListener {
 
    public static final int SCALE = 32;
    public static final int WIDTH = 20;
    public static final int HEIGHT = 20;
    public static final int SPEED = 120;
 
    Food a = new Food((int) (Math.random() * WIDTH), (int) (Math.random() * HEIGHT));
    Snake s = new Snake(10, 10, 9, 10);
    Timer t = new Timer(SPEED, this);
 
    public Snake1() { //konstruktor
        t.start();
        addKeyListener(new Keyboard());
        setFocusable(true);
    }
 
    public void paint(Graphics g) {
        g.setColor(color(255, 140, 0));
        g.fillRect(0, 0, WIDTH * SCALE, HEIGHT * SCALE);
        g.setColor(color(192, 192, 192));
 
        for (int xx = 0; xx <= WIDTH * SCALE; xx += SCALE) {
            g.drawLine(xx, 0, xx, HEIGHT * SCALE);
        }
 
        for (int yy = 0; yy <= HEIGHT * SCALE; yy += SCALE) {
            g.drawLine(0, yy, WIDTH * SCALE, yy);
        }
 
        for (int d = 0; d < s.length; d++) {
            g.setColor(color(20, 30, 150));
            g.fillRect(s.snakeX[d] * SCALE + 1, s.snakeY[d] * SCALE + 1, SCALE - 1, SCALE - 1);
        }
 
        g.setColor(color(255, 0, 0));
        g.fillRect(a.posX * SCALE + 1, a.posY * SCALE + 1, SCALE - 1, SCALE - 1);
    }
 
    public Color color(int red, int green, int blue) {
        return new Color(red, green, blue);
    }
 
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setSize(WIDTH * SCALE, HEIGHT * SCALE + 20);
        f.setLocationRelativeTo(null);
        f.add(new Snake1());
        f.setVisible(true);
        //TOHLE JSEM PRIDAL
        addMenu(f);
 
    }
 
    @Override
    public void actionPerformed(ActionEvent arg0) {
        s.move();
        if ((s.snakeX[0] == a.posX) & (s.snakeY[0] == a.posY)) {
            a.setRandomPosition();
            s.length++;
 
        }
        for (int k = 1; k < s.length; k++) {
            if ((s.snakeX[k] == a.posX) & (s.snakeY[k] == a.posY)) {
                a.setRandomPosition();
            }
            if ((s.snakeX[0] == a.posX) & (s.snakeY[0] == a.posY)) {
                a.setRandomPosition();
                s.length++;
            }
        }
        repaint();
 
    }
 
    private class Keyboard extends KeyAdapter {
 
        public void keyPressed(KeyEvent kEvt) {
            int key = kEvt.getKeyCode();
 
            if ((key == KeyEvent.VK_RIGHT) & s.direction != 2) {
                s.direction = 0;
            }
            if ((key == KeyEvent.VK_DOWN) & s.direction != 3) {
                s.direction = 1;
            }
            if ((key == KeyEvent.VK_LEFT) & s.direction != 0) {
                s.direction = 2;
            }
            if ((key == KeyEvent.VK_UP) & s.direction != 1) {
                s.direction = 3;
            }
        }
    }
/**
 * metoda na vytvoreni menu
 * @param f JFrame
 */
    static void addMenu(JFrame f) {
 
        JMenuBar menuBar = new JMenuBar();
        f.setJMenuBar(menuBar);
 
        JMenuItem leftMenu = new JMenuItem("leftMenu");
        JMenuItem rightMenu = new JMenuItem("rightMenu");
        menuBar.add(leftMenu);
        menuBar.add(rightMenu);
 
        JMenuItem newAction = new JMenuItem("New");
        JMenuItem cutAction = new JMenuItem("Exit");
 
        leftMenu.add(newAction);
        rightMenu.add(cutAction);
 
        newAction.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                System.out.println("NEW"); 
            }
 
        });
        cutAction.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("EXIT");
                System.exit(0);
            }
        });
    }
}
package snake1;
 
public class Snake {
    
    Snake1 main;
    
    public int direction = 0;
    public int length = 2;
    
    public int snakeX[] = new int[main.WIDTH*main.HEIGHT];
    public int snakeY[] = new int[main.WIDTH*main.HEIGHT];
 
    public Snake(int x0, int y0, int x1, int y1){
        snakeX[0] = x0;
        snakeY[0] = y0;
        snakeX[1] = x1;
        snakeY[1] = y1;    
    }
    
    public void move() {
                
        for (int d = length; d > 0; d--) {
            snakeX[d] = snakeX[d-1];
            snakeY[d] = snakeY[d-1];
        }
 
        if(direction == 0) snakeX[0]++;
        if(direction == 1) snakeY[0]++;
        if(direction == 2) snakeX[0]--;
        if(direction == 3) snakeY[0]--;
    
        for (int d = length-1; d > 0; d--) {
            if((snakeX[0] == snakeX[d]) & (snakeY[0] == snakeY[d])) length = d-2;
          }
        
        if(snakeX[0] > main.WIDTH) snakeX[0] = 0;
        if(snakeX[0] < 0) snakeX[0] = main.WIDTH-1;
        if(snakeY[0] > main.HEIGHT) snakeY[0] = 0;
        if(snakeY[0] < 0) snakeY[0] = main.HEIGHT-1;
        
        if (length < 2) length = 2;
        
        }
}
3 class
package snake1;
 
public class Food {
    
    Snake1 main;
    
    public int posX;
    public int posY;
    
    public Food(int startX, int startY){  // konstruktor
        posX = startX;
        posY = startY;
    }
    
    public void setRandomPosition() {
        posX = (int) (Math.random()*main.WIDTH);
        posY = (int) (Math.random()*main.WIDTH);
    }
}

Решение задачи: «Как правильно прописать старт программы»

textual
Листинг программы
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.Timer;
 
 
public class GamePanel extends JPanel implements ActionListener {
    
    private final int SCALE = 32;
    private final int WIDTH = 20;
    private final int HEIGHT = 20;
    public static final int SPEED = 300;
    public static final int ALL_SCALES = 16*20;
    
    private final int snakeX[] = new int[ALL_SCALES];
    private final int snakeY[] = new int[ALL_SCALES];
    private final int RAND_POS = 15;
    
    private int len, a_x, a_y;
    private static int direction = 0;
    private boolean game_over = false;
    public static Timer t;
    
    static JPanel contentPane;
    
 
    public GamePanel() {
        setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
        setBackground(color(255, 140, 0));
        initGame();
        
    }
    
     private  void initGame() {
        len = 2;
        for (int z = 0; z < len; z++) {
            snakeX[z] = 50 - z * SCALE;
            snakeY[z] = 50;
        }
        
        locateFood();
        t = new Timer(SPEED, this);
     }
     
     private  void locateFood(){
         int r = (int) (Math.random() * RAND_POS);
         a_x = r * RAND_POS;
         r = (int) (Math.random() * RAND_POS);
         a_y = r * RAND_POS;
     }
     
     @Override
    public void actionPerformed(ActionEvent e) {
        if(!game_over){
            move();
            checkFood();
        }
        repaint();
    }
    
    private void checkFood(){
        if(a_x >= snakeX[0] && a_x <= snakeX[0]+SCALE && a_y >= snakeY[0] && a_y <= snakeY[0]+SCALE  ){
            len++;
            locateFood();
        }
        if(game_over) t.stop();
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); 
        if(!game_over){
           g.setColor(color(255, 0, 0));
           g.fillRect(a_x, a_y, SCALE-1, SCALE-1);
           for(int z = 0; z < len; z++){
                g.setColor(color(20, 30, 150));
               g.fillRect(snakeX[z], snakeY[z], SCALE-1, SCALE-1);
           }
        } else{
            gameOver(g);
        }
    }
    
    private void gameOver(Graphics g){
        String msg = "Victory!";
        Font font = new Font("Helvetica", Font.BOLD, 20);
        g.setColor(Color.white);
        g.setFont(font);
        g.drawString(msg, 150, 150);
    }
    
    private void move(){
        if(len >= 10) game_over = true;
        
        for(int z = len; z > 0; z--){
            snakeX[z] = snakeX[z-1];
            snakeY[z] = snakeY[z-1];
        }
         if(direction == 2){
            snakeX[0] -= SCALE;
        }
         if(direction == 1){
            snakeY[0] += SCALE;
        }
         if(direction == 0){
            snakeX[0] += SCALE;
        }
         if(direction == 3){
            snakeY[0] -= SCALE;
        }
    }
    
    public static void main(String[] args) {
       
                createGUI();     
    }
    
    private static void createGUI(){
        JFrame  f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setLocation(50, 10);
        f.setTitle("Snake");
        contentPane = new JPanel();
        contentPane.setPreferredSize(new Dimension(600, 600));
        contentPane.setFocusable(true);
        contentPane.addKeyListener(new KeyBoard());
        f.setContentPane(contentPane);
        f.pack();
        f.setVisible(true);
        
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Game");
        menuBar.add(menu);
        JMenuItem menuNew = new JMenuItem("New Game");
        JMenuItem menuExit = new JMenuItem("Exit");
        menu.add(menuNew);
        menu.add(menuExit);
        f.setJMenuBar(menuBar);
        menuExit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        
        menuNew.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              contentPane.removeAll();;
              contentPane.add(new GamePanel());
              contentPane.revalidate();
              contentPane.repaint();
              
              t.start();
            }
        });
    }
   
    public Color color(int red, int green, int blue) {
        return new Color(red, green, blue);
    }
 
    private static class KeyBoard implements KeyListener{
 
        @Override
        public void keyTyped(KeyEvent e) { }
 
        @Override
        public void keyPressed(KeyEvent e) {
          int key = e.getKeyCode();
          if(key == KeyEvent.VK_LEFT && direction != 0 ){ direction = 2; }
          if(key == KeyEvent.VK_RIGHT && direction != 2){ direction = 0; }
          if(key == KeyEvent.VK_DOWN && direction != 3){ direction = 1; }
          if(key == KeyEvent.VK_UP && direction != 1){ direction = 3;  }
        }
 
        @Override
        public void keyReleased(KeyEvent e) { }
        
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы