Как отобразить лабиринт? - PullRequest
0 голосов
/ 03 мая 2019

Так что я работаю над лабиринтом, но для собственного предпочтения я хочу, чтобы он тоже выглядел привлекательно, поэтому я получил код для работы, однако он не совсем графический.По сути, мне не нужна помощь, чтобы лабиринт работал, мне нужна помощь, чтобы улучшить его внешний вид.Поэтому я пытаюсь выяснить, могу ли я каким-то образом преобразовать то, что у меня есть, в какие-то кнопки, которые отображаются в виде определенного цвета, а не «х», «» »."-" а также "#".Я также отмечу, что я очень хорошо разбираюсь в кодировании и, возможно, не пойму, если вы скажете мне «сделайте это», поэтому, если кто-то достаточно любезен, чтобы помочь мне, пожалуйста, наберитесь терпения, так как мне трудно просто «сделать это»

Я попытался преобразовать свой текст в кнопки, чтобы я мог просто раскрасить свои кнопки и сделать каждый из своих «х», «» »."-" "#" представлены цветами или, если я могу (что было бы предпочтительным вариантом), заменить их изображениями типа X a Line a Barrier и т. д., однако я не смог заставить его работать какЯ буквально сижу здесь, невежественный .. Как будто я пытался искать в Интернете, но я просто не знаю, что искать.

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

 package maze;

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class maze {

static JFrame mainFrame = new JFrame("MazeProgram");
static JLabel mazeLabel = new JLabel();
static boolean exitFound = false;

static char[][] puzzle = { { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
        { '#', ' ', ' ', ' ', '#', ' ', '#', '#', '#', '#', ' ', 'X', '#' },
        { '#', '#', ' ', '#', '#', ' ', '#', ' ', ' ', '#', ' ', '#', '#' },
        { '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', ' ', '#' },
        { '#', ' ', '#', ' ', ' ', '#', '#', '#', '#', ' ', '#', '#', '#' },
        { '#', '#', '#', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
        { '#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', '#', '#', '#', '#' },
        { '#', '#', ' ', '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', '#', '#' },
        { '#', ' ', '#', ' ', ' ', ' ', '#', '#', ' ', ' ', ' ', ' ', '#' },
        { '#', ' ', '#', '#', ' ', '#', '#', ' ', '#', ' ', '#', ' ', '#' },
        { '#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', ' ', '#', '#', '#' },
        { '#', ' ', '#', '#', '#', ' ', '#', ' ', '#', ' ', ' ', '#', '#' },
        { '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', '#', ' ', ' ', ' ', '#' },
        { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }, };

public static void main(String[] args) throws InterruptedException {
    initializeWindow();
    move(1, 1);
    printMaze();
}

public static void initializeWindow() {
    mainFrame = new JFrame("Maze Solver");
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setLayout(null);
    mainFrame.setSize(1920, 1080);
    mainFrame.setLocationRelativeTo(null);

    mazeLabel.setHorizontalAlignment(JLabel.CENTER); // centers the Component
    mazeLabel.setSize(1920, 1080); // sets maze label size
    mazeLabel.setFont(new Font("", Font.BOLD, 28));

    mainFrame.add(mazeLabel);
    mazeLabel.setVisible(true);
    mainFrame.setVisible(true);
}

public static void printMaze() { // prints the maze to a label
    mazeLabel.setText(""); // clear the label
    String tempLine = "<html><pre>"; // stores the maze from the char array to a string set up for html to allow new
                                        // lines. pre tells html to keep multiple spaces

    for (int j = 0; j < puzzle.length; j++) { // changes the row number
        for (int i = 0; i < puzzle[0].length; i++) { // changes the column number.
            tempLine = tempLine + puzzle[j][i] + " "; // add one character from the maze to the string
        }
        tempLine = tempLine + "<br>"; // add a line break to the string
    }
    tempLine = tempLine + "</html>";
    mazeLabel.setText(tempLine); // put the string into the label

}

public static void move(int row, int col) throws InterruptedException {

    if (puzzle[row][col] == 'X') { // checks if the maze is at the end
        exitFound = true;

    } else {

        puzzle[row][col] = '-'; // change the current location symbol to indicate that the spot has been visited
        //Thread.sleep(50);

        if ((exitFound == false) && (puzzle[row][col + 1] == ' ' || puzzle[row][col + 1] == 'X')) {
            move(row, col + 1);
        }
        if ((exitFound == false) && (puzzle[row + 1][col] == ' ' || puzzle[row + 1][col] == 'X')) {
            move(row + 1, col);
        }
        if ((exitFound == false) && (puzzle[row][col - 1] == ' ' || puzzle[row][col - 1] == 'X')) {
            move(row, col - 1);
        }
        if ((exitFound == false) && (puzzle[row - 1][col] == ' ' || puzzle[row - 1][col] == 'X')) {

            move(row - 1, col);
        }

        if (exitFound == true) {
            puzzle[row][col] = '.';
            //Thread.sleep(50);

        }
    }

}
}

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

1 Ответ

1 голос
/ 04 мая 2019

Это очень похоже на то, что вы сделали в предыдущем вопросе, который вы разместили .Используйте GridPanel и заполните его JLabel s:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Maze { // see java naming conventions https://www.geeksforgeeks.org/java-naming-conventions/

    static char[][] puzzle = { { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
            { '#', ' ', ' ', ' ', '#', ' ', '#', '#', '#', '#', ' ', 'X', '#' },
            { '#', '#', ' ', '#', '#', ' ', '#', ' ', ' ', '#', ' ', '#', '#' },
            { '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', ' ', '#' },
            { '#', ' ', '#', ' ', ' ', '#', '#', '#', '#', ' ', '#', '#', '#' },
            { '#', '#', '#', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#' },
            { '#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', '#', '#', '#', '#' },
            { '#', '#', ' ', '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', '#', '#' },
            { '#', ' ', '#', ' ', ' ', ' ', '#', '#', ' ', ' ', ' ', ' ', '#' },
            { '#', ' ', '#', '#', ' ', '#', '#', ' ', '#', ' ', '#', ' ', '#' },
            { '#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', ' ', '#', '#', '#' },
            { '#', ' ', '#', '#', '#', ' ', '#', ' ', '#', ' ', ' ', '#', '#' },
            { '#', ' ', ' ', ' ', ' ', ' ', '#', ' ', '#', ' ', ' ', ' ', '#' },
            { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }, };

    public static void main(String[] args) throws InterruptedException {
        Maze maze = new Maze();
        maze.initializeWindow();
    }

    private void initializeWindow() {
        JFrame mainFrame = new JFrame("Maze Solver");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setLayout(new GridLayout(puzzle.length, puzzle[0].length));// avoid null layouts
        //mainFrame.setSize(1920, 1080); //use preferred size and let layout manager set the size
        mainFrame.setLocationRelativeTo(null);

        for (int row = 0; row < puzzle.length; row++) {
            for (int col = 0; col < puzzle[0].length; col++) {
                JLabel label = makeLabel(puzzle[row][col]);
                mainFrame.add(label);
            }
        }
        mainFrame.pack();
        mainFrame.setVisible(true);
    }

    private JLabel makeLabel(char c) {

        JLabel label= new JLabel();
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setPreferredSize(new Dimension(40, 40));
        switch(c) {
            case '#':
                label.setBackground(Color.BLUE);
                break;
            default:
                label.setBackground(Color.WHITE);
                break;

        }
        label.setOpaque(true);
        label.setBorder(BorderFactory.createLineBorder(Color.WHITE, 1));
        return label;
    }
}

Код, несущественный для ответа, был удален, чтобы сделать его mcve .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...