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

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

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

Ребятки, помогите плиз. Есть код змейки, в интерфейс прилепил 2 кнопки. Одна с выходом, вторая с "new game", проблем не было с первой кнопкой, прописать пару слов, а вот как прописать чтобы при нажатии начиналась новая игра, я не знаю... Помогите, пожалуйста. И ещё... Пожаулйста, помогите написать код, чтобы когда змейка сжирала еду, была отображена табличка с очками, к примеру, за каждое сожранное яблоко - 10 очей. Спасибо всем, кто помог! 1 class
Листинг программы
  1. package snake1;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Graphics;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.KeyAdapter;
  9. import java.awt.event.KeyEvent;
  10. import javax.swing.JButton;
  11. import javax.swing.JFrame;
  12. import javax.swing.JMenuBar;
  13. import javax.swing.JMenuItem;
  14. import javax.swing.JPanel;
  15. import javax.swing.Timer;
  16. public class Snake1 extends JPanel implements ActionListener {
  17. public static final int SCALE = 32;
  18. public static final int WIDTH = 20;
  19. public static final int HEIGHT = 20;
  20. public static final int SPEED = 120;
  21. Food a = new Food((int) (Math.random() * WIDTH), (int) (Math.random() * HEIGHT));
  22. Snake s = new Snake(10, 10, 9, 10);
  23. Timer t = new Timer(SPEED, this);
  24. public Snake1() { //konstruktor
  25. t.start();
  26. addKeyListener(new Keyboard());
  27. setFocusable(true);
  28. }
  29. public void paint(Graphics g) {
  30. g.setColor(color(255, 140, 0));
  31. g.fillRect(0, 0, WIDTH * SCALE, HEIGHT * SCALE);
  32. g.setColor(color(192, 192, 192));
  33. for (int xx = 0; xx <= WIDTH * SCALE; xx += SCALE) {
  34. g.drawLine(xx, 0, xx, HEIGHT * SCALE);
  35. }
  36. for (int yy = 0; yy <= HEIGHT * SCALE; yy += SCALE) {
  37. g.drawLine(0, yy, WIDTH * SCALE, yy);
  38. }
  39. for (int d = 0; d < s.length; d++) {
  40. g.setColor(color(20, 30, 150));
  41. g.fillRect(s.snakeX[d] * SCALE + 1, s.snakeY[d] * SCALE + 1, SCALE - 1, SCALE - 1);
  42. }
  43. g.setColor(color(255, 0, 0));
  44. g.fillRect(a.posX * SCALE + 1, a.posY * SCALE + 1, SCALE - 1, SCALE - 1);
  45. }
  46. public Color color(int red, int green, int blue) {
  47. return new Color(red, green, blue);
  48. }
  49. public static void main(String[] args) {
  50. JFrame f = new JFrame();
  51. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  52. f.setResizable(false);
  53. f.setSize(WIDTH * SCALE, HEIGHT * SCALE + 20);
  54. f.setLocationRelativeTo(null);
  55. f.add(new Snake1());
  56. f.setVisible(true);
  57. //TOHLE JSEM PRIDAL
  58. addMenu(f);
  59. }
  60. @Override
  61. public void actionPerformed(ActionEvent arg0) {
  62. s.move();
  63. if ((s.snakeX[0] == a.posX) & (s.snakeY[0] == a.posY)) {
  64. a.setRandomPosition();
  65. s.length++;
  66. }
  67. for (int k = 1; k < s.length; k++) {
  68. if ((s.snakeX[k] == a.posX) & (s.snakeY[k] == a.posY)) {
  69. a.setRandomPosition();
  70. }
  71. if ((s.snakeX[0] == a.posX) & (s.snakeY[0] == a.posY)) {
  72. a.setRandomPosition();
  73. s.length++;
  74. }
  75. }
  76. repaint();
  77. }
  78. private class Keyboard extends KeyAdapter {
  79. public void keyPressed(KeyEvent kEvt) {
  80. int key = kEvt.getKeyCode();
  81. if ((key == KeyEvent.VK_RIGHT) & s.direction != 2) {
  82. s.direction = 0;
  83. }
  84. if ((key == KeyEvent.VK_DOWN) & s.direction != 3) {
  85. s.direction = 1;
  86. }
  87. if ((key == KeyEvent.VK_LEFT) & s.direction != 0) {
  88. s.direction = 2;
  89. }
  90. if ((key == KeyEvent.VK_UP) & s.direction != 1) {
  91. s.direction = 3;
  92. }
  93. }
  94. }
  95. /**
  96. * metoda na vytvoreni menu
  97. * @param f JFrame
  98. */
  99. static void addMenu(JFrame f) {
  100. JMenuBar menuBar = new JMenuBar();
  101. f.setJMenuBar(menuBar);
  102. JMenuItem leftMenu = new JMenuItem("leftMenu");
  103. JMenuItem rightMenu = new JMenuItem("rightMenu");
  104. menuBar.add(leftMenu);
  105. menuBar.add(rightMenu);
  106. JMenuItem newAction = new JMenuItem("New");
  107. JMenuItem cutAction = new JMenuItem("Exit");
  108. leftMenu.add(newAction);
  109. rightMenu.add(cutAction);
  110. newAction.addActionListener(new ActionListener() {
  111. public void actionPerformed(ActionEvent arg0) {
  112. System.out.println("NEW");
  113. }
  114. });
  115. cutAction.addActionListener(new ActionListener() {
  116. public void actionPerformed(ActionEvent arg0) {
  117. System.out.println("EXIT");
  118. System.exit(0);
  119. }
  120. });
  121. }
  122. }
Листинг программы
  1. package snake1;
  2. public class Snake {
  3. Snake1 main;
  4. public int direction = 0;
  5. public int length = 2;
  6. public int snakeX[] = new int[main.WIDTH*main.HEIGHT];
  7. public int snakeY[] = new int[main.WIDTH*main.HEIGHT];
  8. public Snake(int x0, int y0, int x1, int y1){
  9. snakeX[0] = x0;
  10. snakeY[0] = y0;
  11. snakeX[1] = x1;
  12. snakeY[1] = y1;
  13. }
  14. public void move() {
  15. for (int d = length; d > 0; d--) {
  16. snakeX[d] = snakeX[d-1];
  17. snakeY[d] = snakeY[d-1];
  18. }
  19. if(direction == 0) snakeX[0]++;
  20. if(direction == 1) snakeY[0]++;
  21. if(direction == 2) snakeX[0]--;
  22. if(direction == 3) snakeY[0]--;
  23. for (int d = length-1; d > 0; d--) {
  24. if((snakeX[0] == snakeX[d]) & (snakeY[0] == snakeY[d])) length = d-2;
  25. }
  26. if(snakeX[0] > main.WIDTH) snakeX[0] = 0;
  27. if(snakeX[0] < 0) snakeX[0] = main.WIDTH-1;
  28. if(snakeY[0] > main.HEIGHT) snakeY[0] = 0;
  29. if(snakeY[0] < 0) snakeY[0] = main.HEIGHT-1;
  30. if (length < 2) length = 2;
  31. }
  32. }
3 class
Листинг программы
  1. package snake1;
  2. public class Food {
  3. Snake1 main;
  4. public int posX;
  5. public int posY;
  6. public Food(int startX, int startY){ // konstruktor
  7. posX = startX;
  8. posY = startY;
  9. }
  10. public void setRandomPosition() {
  11. posX = (int) (Math.random()*main.WIDTH);
  12. posY = (int) (Math.random()*main.WIDTH);
  13. }
  14. }

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

textual
Листинг программы
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.KeyEvent;
  8. import java.awt.event.KeyListener;
  9. import javax.swing.JFrame;
  10. import javax.swing.JMenu;
  11. import javax.swing.JMenuBar;
  12. import javax.swing.JMenuItem;
  13. import javax.swing.JPanel;
  14. import javax.swing.Timer;
  15.  
  16.  
  17. public class GamePanel extends JPanel implements ActionListener {
  18.    
  19.     private final int SCALE = 32;
  20.     private final int WIDTH = 20;
  21.     private final int HEIGHT = 20;
  22.     public static final int SPEED = 300;
  23.     public static final int ALL_SCALES = 16*20;
  24.    
  25.     private final int snakeX[] = new int[ALL_SCALES];
  26.     private final int snakeY[] = new int[ALL_SCALES];
  27.     private final int RAND_POS = 15;
  28.    
  29.     private int len, a_x, a_y;
  30.     private static int direction = 0;
  31.     private boolean game_over = false;
  32.     public static Timer t;
  33.    
  34.     static JPanel contentPane;
  35.    
  36.  
  37.     public GamePanel() {
  38.         setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
  39.         setBackground(color(255, 140, 0));
  40.         initGame();
  41.        
  42.     }
  43.    
  44.      private  void initGame() {
  45.         len = 2;
  46.         for (int z = 0; z < len; z++) {
  47.             snakeX[z] = 50 - z * SCALE;
  48.             snakeY[z] = 50;
  49.         }
  50.        
  51.         locateFood();
  52.         t = new Timer(SPEED, this);
  53.      }
  54.      
  55.      private  void locateFood(){
  56.          int r = (int) (Math.random() * RAND_POS);
  57.          a_x = r * RAND_POS;
  58.          r = (int) (Math.random() * RAND_POS);
  59.          a_y = r * RAND_POS;
  60.      }
  61.      
  62.      @Override
  63.     public void actionPerformed(ActionEvent e) {
  64.         if(!game_over){
  65.             move();
  66.             checkFood();
  67.         }
  68.         repaint();
  69.     }
  70.    
  71.     private void checkFood(){
  72.         if(a_x >= snakeX[0] && a_x <= snakeX[0]+SCALE && a_y >= snakeY[0] && a_y <= snakeY[0]+SCALE  ){
  73.             len++;
  74.             locateFood();
  75.         }
  76.         if(game_over) t.stop();
  77.     }
  78.    
  79.     @Override
  80.     protected void paintComponent(Graphics g) {
  81.         super.paintComponent(g);
  82.         if(!game_over){
  83.            g.setColor(color(255, 0, 0));
  84.            g.fillRect(a_x, a_y, SCALE-1, SCALE-1);
  85.            for(int z = 0; z < len; z++){
  86.                 g.setColor(color(20, 30, 150));
  87.                g.fillRect(snakeX[z], snakeY[z], SCALE-1, SCALE-1);
  88.            }
  89.         } else{
  90.             gameOver(g);
  91.         }
  92.     }
  93.    
  94.     private void gameOver(Graphics g){
  95.         String msg = "Victory!";
  96.         Font font = new Font("Helvetica", Font.BOLD, 20);
  97.         g.setColor(Color.white);
  98.         g.setFont(font);
  99.         g.drawString(msg, 150, 150);
  100.     }
  101.    
  102.     private void move(){
  103.         if(len >= 10) game_over = true;
  104.        
  105.         for(int z = len; z > 0; z--){
  106.             snakeX[z] = snakeX[z-1];
  107.             snakeY[z] = snakeY[z-1];
  108.         }
  109.          if(direction == 2){
  110.             snakeX[0] -= SCALE;
  111.         }
  112.          if(direction == 1){
  113.             snakeY[0] += SCALE;
  114.         }
  115.          if(direction == 0){
  116.             snakeX[0] += SCALE;
  117.         }
  118.          if(direction == 3){
  119.             snakeY[0] -= SCALE;
  120.         }
  121.     }
  122.    
  123.     public static void main(String[] args) {
  124.        
  125.                 createGUI();    
  126.     }
  127.    
  128.     private static void createGUI(){
  129.         JFrame  f = new JFrame();
  130.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  131.         f.setResizable(false);
  132.         f.setLocation(50, 10);
  133.         f.setTitle("Snake");
  134.         contentPane = new JPanel();
  135.         contentPane.setPreferredSize(new Dimension(600, 600));
  136.         contentPane.setFocusable(true);
  137.         contentPane.addKeyListener(new KeyBoard());
  138.         f.setContentPane(contentPane);
  139.         f.pack();
  140.         f.setVisible(true);
  141.        
  142.         JMenuBar menuBar = new JMenuBar();
  143.         JMenu menu = new JMenu("Game");
  144.         menuBar.add(menu);
  145.         JMenuItem menuNew = new JMenuItem("New Game");
  146.         JMenuItem menuExit = new JMenuItem("Exit");
  147.         menu.add(menuNew);
  148.         menu.add(menuExit);
  149.         f.setJMenuBar(menuBar);
  150.         menuExit.addActionListener(new ActionListener() {
  151.             @Override
  152.             public void actionPerformed(ActionEvent e) {
  153.                 System.exit(0);
  154.             }
  155.         });
  156.        
  157.         menuNew.addActionListener(new ActionListener() {
  158.             @Override
  159.             public void actionPerformed(ActionEvent e) {
  160.               contentPane.removeAll();;
  161.               contentPane.add(new GamePanel());
  162.               contentPane.revalidate();
  163.               contentPane.repaint();
  164.              
  165.               t.start();
  166.             }
  167.         });
  168.     }
  169.    
  170.     public Color color(int red, int green, int blue) {
  171.         return new Color(red, green, blue);
  172.     }
  173.  
  174.     private static class KeyBoard implements KeyListener{
  175.  
  176.         @Override
  177.         public void keyTyped(KeyEvent e) { }
  178.  
  179.         @Override
  180.         public void keyPressed(KeyEvent e) {
  181.           int key = e.getKeyCode();
  182.           if(key == KeyEvent.VK_LEFT && direction != 0 ){ direction = 2; }
  183.           if(key == KeyEvent.VK_RIGHT && direction != 2){ direction = 0; }
  184.           if(key == KeyEvent.VK_DOWN && direction != 3){ direction = 1; }
  185.           if(key == KeyEvent.VK_UP && direction != 1){ direction = 3;  }
  186.         }
  187.  
  188.         @Override
  189.         public void keyReleased(KeyEvent e) { }
  190.        
  191.     }
  192. }

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


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

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

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы