Строковый массив не рисует первую строку Word Search - PullRequest
0 голосов
/ 08 февраля 2020

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

Я попытался добавить строка дополнительных букв, но это неправильный способ сделать это.

Пожалуйста, я не понимаю, что происходит.


    private int casillas;
    private Font font = new Font("Arial", Font.BOLD, 32);
    private String[][] letters = 
    {
            {"Z", "P", "D", "S", "Y", "I", "I", "H", "L", "H", "C", "S", "M", "O", "J", "T", "M", "I", "L", "E"},
            {"L", "A", "S", "T", "I", "N", "D", "E", "X", "T", "T", "O", "L", "A", "K", " C", "F", "E", "O", "N"},
            {"B", "E", "V", "H", "D", "Y", "G", "P", "A", "R", "D", "I", "N", "A", "T", "E", "S", "Z", "R", "D"},
            {"P", "P", "J", "E", "W", "G", "F", "R", "Y", "I", "E", "G", "W", "T", "U", "C", "L", "H", "U", "S"},
            {"J", "Y", "X", "E", "L", "A", "A", "M", "C", "M", "G", "N", "Z", "S", "A", "Q", "H", "P", "C", "W"},
            {"O", "O", "K", "O", "V", "H", "R", "K", "T", "V", "H", "I", "A", "A", "T", "I", "E", "Z", "C", "I"},
            {"F", "B", "Q", "D", "C", "H", "U", "Q", "E", "E", "C", "R", "P", "T", "D", "R", "N", "F", "M", "T"},
            {"S", "S", "K", "M", "G", "T", "X", "Z", "V", "K", "Z", "T", "H", "K", "L", "U", "A", "S", "G", "H"},
            {"M", "I", "B", "A", "W", "G", "L", "D", "R", "F", "Q", "S", "C", "O", "P", "M", "R", "T", "Q", "J"},
            {"V", "Y", "Y", "D", "O", "N", "Z", "U", "O", "G", "M", "B", "Q", "R", "G", "U", "Z", "T", "S", "S"},
            {"E", "C", "A", "L", "P", "E", "R", "T", "N", "S", "L", "U", "L", "D", "Q", "J", "Q", "V", "Y", "M"},
            {"O", "Q", "E", "J", "J", "L", "E", "W", "T", "C", "E", "S", "A", "S", "U", "I", "V", "R", "D", "C"},
            {"J", "W", "M", "K", "P", "R", "V", "Q", "Z", "H", "A", "R", "O", "W", "C", "O", "N", "C", "A", "T"},
            {"Q", "C", "Q", "S", "A", "A", "I", "E", "U", "Z", "D", "S", "G", "O", "U", "S", "N", "Z", "Z", "D"},
            {"Q", "U", "H", "P", "F", "R", "K", "W", "O", "L", "R", "I", "P", "S", "B", "S", "Y", "I", "Q", "E"},
            {"J", "S", "M", "O", "K", "Y", "E", "S", "A", "C", "R", "E", "W", "O", "L", "O", "T", "S", "X", "O"},
            {"C", "O", "O", "N", "L", "N", "F", "F", "Y", "T", "S", "G", "M", "K", "C", "B", "C", "L", "L", "E"},
            {"C", "P", "Q", "Y", "L", "T", "R", "Q", "K", "D", "Y", "Y", "E", "W", "B", "Z", "E", "V", "J", "N"},
            {"M", "E", "S", "T", "H", "R", "R", "V", "N", "W", "S", "B", "V", "B", "Y", "D", "V", "W", "S", "O"},
            {"K", "P", "Z", "N", "S", "M", "I", "V", "V", "L", "W", "F", "B", "U", "T", "V", "M", "T", "M", "C"}};

    public Cuadricula(int casillas) {
        this.casillas = casillas;
    }

    public void paint(Graphics2D g2d) {
        g2d.setFont(font);
        g2d.setColor(Color.WHITE);
        for (int i = 0; i < casillas; i += 32) {
            for (int j = 0; j < casillas; j += 32) {
                g2d.drawRect(i, j, 32, 32);
            }
        }


//Draw the letters in the grid
        ***for (int i = 0; i < letters.length; i ++) {
            for (int j = 0; j < letters.length; j ++) {
                g2d.drawString(letters[j][i], 32 * i, 32 * j);
            }
        }***

    }
}```

1 Ответ

0 голосов
/ 08 февраля 2020

Первая строка обрезана, потому что начало (0,0) - это базовая линия символов.

Это решается (в одну сторону) путем перевода начало координат, чтобы компенсировать высоту символа.

Это демонстрирует - две строки - первая использует не перевод в (0,0), который не отображается, а вторая снова (0,0) после перевода "восхождения" "используемого шрифта:

g.setFont(new Font("TimesRoman", Font.PLAIN, 32)); 
g.drawString("Hello",0,0);
FontMetrics fm = g.getFontMetrics();
g.translate(0, fm.getAscent());
g.drawString("There",0,0);

В вашем коде вам необходимо сделать это перед циклом.

Это дополнительно демонстрирует использование увеличивающегося смещения перевода для y:

String[] msgs = { "A", "B","C","D","E","F","G","H" };
int cnt = 0;
for (String s : msgs) {
    g.translate(0, (cnt * 2));
    cnt++;
    // moving x here for demo purposes - y is always 0 but translate moves it down
    g.drawString(s,(20*cnt),0);
}

и

enter image description here

...