Advertisement
madopew

Untitled

Apr 29th, 2020
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.00 KB | None | 0 0
  1. package kz.engine;
  2.  
  3. import javax.swing.JDialog;
  4. import javax.swing.JOptionPane;
  5.  
  6. import com.jogamp.opengl.GLAutoDrawable;
  7.  
  8. import kz.gamelogic.Board;
  9. import kz.graphics.Graphics;
  10. import kz.graphics.ImageResource;
  11. import kz.graphics.Renderer;
  12. //главное меню: поле и правила
  13. public class Menu {
  14.     //размер окна
  15.     private float sizeOfWindow;
  16.     //данная переменная хранит текущий уровень
  17.     private Board board;
  18.     //текущий номер уровная
  19.     private int currentLevel = 0;
  20.     //кнопка "начать заново"
  21.     private GameObject reset;
  22.     //лампочки индикации номера уровня
  23.     private GameObject[] lights;
  24.     //максимальное количесвто уровней
  25.     private static final int MAX_LEVELS = 9;
  26.     //все используемые текстуры (подгружаются один раз)
  27.     public static final ImageResource REG0 = new ImageResource("/res/regular0.png");
  28.     public static final ImageResource REG1 = new ImageResource("/res/regular1.png");
  29.     public static final ImageResource BOR0 = new ImageResource("/res/border0.png");
  30.     public static final ImageResource BOR1 = new ImageResource("/res/border1.png");
  31.     public static final ImageResource SHI0 = new ImageResource("/res/shield0.png");
  32.     public static final ImageResource SHI1 = new ImageResource("/res/shield1.png");
  33.     public static final ImageResource DEV0 = new ImageResource("/res/devil0.png");
  34.     public static final ImageResource DEV1 = new ImageResource("/res/devil1.png");
  35.     public static final ImageResource HUM0 = new ImageResource("/res/human0.png");
  36.     public static final ImageResource HUM1 = new ImageResource("/res/human1.png");
  37.     public static final ImageResource COR0 = new ImageResource("/res/corner0.png");
  38.     public static final ImageResource COR1 = new ImageResource("/res/corner1.png");
  39.     public static final ImageResource FOR0 = new ImageResource("/res/forward0.png");
  40.     public static final ImageResource FOR1 = new ImageResource("/res/forward1.png");
  41.     private static final ImageResource RESB = new ImageResource("/res/reset.png");
  42.     private static final ImageResource MENU = new ImageResource("/res/menu.png");
  43.     private static final ImageResource LIG0 = new ImageResource("/res/light0.png");
  44.     private static final ImageResource LIG1 = new ImageResource("/res/light1.png");
  45.     private static final ImageResource BACK = new ImageResource("/res/backTile.png");
  46.     //константы координат, размеров
  47.     private static final int RESET_X = 740;
  48.     private static final int RESET_Y = 400;
  49.     private static final int RESET_W = 200;
  50.     private static final int RESET_H = 50;
  51.     private static final int FIRST_LIGHT_X = 740;
  52.     private static final int FIRST_LIGHT_Y = 462;
  53.     private static final int LIGHT_SIZE = 35;
  54.     private static final int X_DIST_LIGHTS = 83;
  55.     private static final int Y_DIST_LIGHTS = 48;
  56.     private static final int LIGHTS_ROW_AMOUNT = 3;
  57.     private static final int MENU_WIDTH = 400;
  58.     //строковые константы
  59.     private static final String CONGRATS_TEXT_STR = "Ты прошел все уровни! Игра будет перезапущена.";
  60.     private static final String CONGRATS_STR = "Поздравляем!";
  61.    
  62.     public Menu(GLAutoDrawable drawable) {
  63.         //в размер окна сохраняем высоту окна (т.к. поле имеет
  64.         //размер высота*высота)
  65.         this.sizeOfWindow = drawable.getSurfaceHeight();
  66.         //подгружаем первый уровень
  67.         board = getLevel(currentLevel);
  68.         //инициализируем кнопку и лампочки
  69.         reset = new GameObject(RESET_X, RESET_Y, RESET_W, RESET_H, RESB);
  70.         lights = new GameObject[MAX_LEVELS];
  71.         for(int i = 0; i < MAX_LEVELS; i++) {
  72.             //получение координат лампочек в двухмерном пространстве
  73.             int x = FIRST_LIGHT_X + i % LIGHTS_ROW_AMOUNT * X_DIST_LIGHTS;
  74.             int y = FIRST_LIGHT_Y + i / LIGHTS_ROW_AMOUNT * Y_DIST_LIGHTS;
  75.             lights[i] = new GameObject(x, y, LIGHT_SIZE, LIGHT_SIZE, LIG0);
  76.         }
  77.     }
  78.     //обработка нажатия
  79.     public void click(int x, int y) {
  80.         //если нажато в области поля, обрабатываем нажатие в поле
  81.         //иначе если нажата кнопка перезапуска, перезапускаем уровень
  82.         if(x <= sizeOfWindow) {
  83.             board.step(x, y);  
  84.         } else if (reset.isPressed(x, y)){
  85.             restartLevel();
  86.         }
  87.     }
  88.    
  89.     public void display() {
  90.         //отрисовываем в порядке: что рисуется первее, то находится сзади
  91.         //сначала задний фон поля
  92.         Graphics.drawImage(BACK, 0, 0, Renderer.HEIGHT, Renderer.HEIGHT);
  93.         //потом само поле
  94.         board.display();
  95.         //меню
  96.         Graphics.drawImage(MENU, Renderer.HEIGHT, 0, MENU_WIDTH, Renderer.HEIGHT);
  97.         //кнопку перезапуска
  98.         reset.display();
  99.         //все лампочки
  100.         for(int i = 0; i < MAX_LEVELS; i++)
  101.             lights[i].display();
  102.     }
  103.     //возвращает уровень в зависимости от его номера
  104.     private Board getLevel(int level) {
  105.         switch(level) {
  106.         default:
  107.         case 0:
  108.             //последовательно:
  109.             // 1) массив хранящий в себе номера ячеек с демонами
  110.             // 2) номер ячейки с игроком
  111.             // 3) номера ячеек со стенами
  112.             // 4) размер поля
  113.             return new Board(new int[][] { {3, 2}, {6, 6} },
  114.                     new int[] {6, 3},
  115.                     new int[][] { {7, 1}, {7, 4}, {8,4 }, {8, 3} },
  116.                     sizeOfWindow);
  117.         case 1:
  118.             return new Board(new int[][] {{2,1}, {4,8}},
  119.                     new int[] {6,5},
  120.                     new int[][] {{3,4},{3,8},{5,7},{5,8},{6,8},{8,4}},
  121.                     sizeOfWindow);
  122.         case 2:
  123.             return new Board(new int[][] {{3,4},{8,1}},
  124.                     new int[] {6,4},
  125.                     new int[][] {{5,3},{5,6},{6,6}},
  126.                     sizeOfWindow);
  127.         case 3:
  128.             return new Board(new int[][] {{3,7},{5,2},{7,2}},
  129.                     new int[] {5,6},
  130.                     new int[][] {{3,6},{4,5},{4,7},{5,8},{6,5},{6,7},{7,6}},
  131.                     sizeOfWindow);
  132.         case 4:
  133.             return new Board(new int[][] {{2,7},{8,1}},
  134.                     new int[] {5,5},
  135.                     new int[][] {{3,5},{5,2},{5,8},{7,5}, {3,2}, {3,1}},
  136.                     sizeOfWindow);
  137.         case 5:
  138.             return new Board(new int[][] {{1,1},{8,1},{8,7}},
  139.                     new int[] {4,4},
  140.                     new int[][] {{3,6},{4,1},{6,2},{7,5},{3,3}},
  141.                     sizeOfWindow);
  142.         case 6:
  143.             return new Board(new int[][] {{2,1},{2,8},{7,2}},
  144.                     new int[] {5,5},
  145.                     new int[][] {{2,2},{2,7},{3,2},{3,7},{5,8},{7,7},{8,7}},
  146.                     sizeOfWindow);
  147.         case 7:
  148.             return new Board(new int[][] { {2, 8}, {4, 1} },
  149.                     new int[] {4, 5},
  150.                     new int[][] { {4, 6}, {6, 6}},
  151.                     sizeOfWindow);
  152.         case 8:
  153.             return new Board(new int[][] {{2,8}, {7,8}, {7,1}},
  154.                     new int[] {5, 4},
  155.                     new int[][] {{4,3},{4,4},{5,1},{6,1},{6,5},{7,2},{8,6}},
  156.                     sizeOfWindow);     
  157.         }
  158.     }
  159.     //при перезапуске уровня перезаписываем текущий уровень
  160.     public void restartLevel() {
  161.         board = getLevel(currentLevel);
  162.     }
  163.     private void restartGame() {
  164.         //выключаем все лампочки
  165.         for(GameObject l : lights)
  166.             l.setTexture(LIG0);
  167.         //выводим сообщение с победой
  168.         JOptionPane optionPane = new JOptionPane();
  169.         optionPane.setMessage(CONGRATS_TEXT_STR);
  170.         JDialog dialog = optionPane.createDialog(CONGRATS_STR);
  171.         dialog.setAlwaysOnTop(true);
  172.         dialog.setVisible(true);
  173.         dialog.setResizable(false);
  174.         //устанавливаем текущий уровень в начало
  175.         currentLevel = 0;
  176.     }
  177.     //следующий уровень
  178.     public void nextLevel() {
  179.         //зажигаем лампочку с текущим уровнем
  180.         lights[currentLevel].setTexture(LIG1);
  181.         //если текущий уровень последний начинаем заново
  182.         if(++currentLevel == MAX_LEVELS) {
  183.             restartGame();
  184.         }
  185.         //перезапускаем новый уровень
  186.         restartLevel();
  187.     }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement