Делаю лабиринт. Движение осуществляется по фрейму, в зависимости от значения в массиве map
, где 1 - можно двигаться, 2 - стена. Ну и как следствие получается, что я двигаюсь по одному пикселю и для большого лабиринта мне придется создать большой массив. Как без увеличения массива увеличить размер лабиринта?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class RealMaze implements ActionListener {
int x = 1;
int y = 1;
JButton button;
MyDrawPanel myDrawPanel;
JFrame frame;
public static void main(String[] args) {
RealMaze realMaze = new RealMaze();
realMaze.go();
}
public void go() {
frame = new JFrame();
myDrawPanel = new MyDrawPanel();
button = new JButton("Test");
frame.setSize(100, 100);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(BorderLayout.CENTER, myDrawPanel);
frame.getContentPane().add(BorderLayout.SOUTH, button);
button.addActionListener(this);
}
//Движение по фрейму
public void actionPerformed(ActionEvent event) {
if (map[x][y] == 1) {
x++;
System.out.println(x);
System.out.println(map[x][y]);
}
frame.repaint();
}
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.gray);
g.fillRect(x, y, 10, 10);
}
}
//Карта, 2 - стена.
int[][] map = new int[][]{
{1,1,1,1,1,1,1,2,1,1},
{1,1,1,1,1,1,1,2,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{2,2,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1}
};
}
Вам нужно изменить размер шага при выводе. То есть определить некий модификатор, на который вы будете умножать координату при выводе на фрейм.
Например:
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.gray);
// Получу размер стороны квадрата.
int sideLength = getSideLength();
// нарисую квадрат масштабируя координаты.
g.fillRect(x*sideLength, y*sideLength, sideLength, sideLength);
}
private int getSideLength() {
// минимальная сторона компоненты.
int minComponentSide = (this.getHight() > this.getWidth()) ? this.getWidth() : this.getHight();
// максимальная сторона карты.
int maxMapSide = (map.length > map[0].length) ? map.length : map[0].length;
// длина стороны, чтобы карта уместилась и комнаты были квадратные.
return minComponentSide / maxMapSide;
}
}
Я могу предложить альтернативу - используй картинку!
BufferedImage image = ImageIO.read(this.getClass.getResources("image.png");
int clr= image.getRGB(x,y);
Делаешь черно-белый лабиринт картинкой. Загружаешь сюда, и перебирая координаты проверяешь чтоб цифра не была равна 0 (черный).
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Выводит непонятные символы, не могу понять где и как нужно менять кодировку
Здравствуйте, возможно ли разработать приложение для Android которое бы создавало сессию ssh и к которой можно было подключиться по средствам...