Za pomocą tego kodu otrzymuję planszę na zdjęciu. czy ktoś może mi pomóc dowiedzieć się, dlaczego tak się dzieje i jak to naprawić. Próbowałem wywołać super.paintComponent, ale nic się nie zmienia. Gdybym tylko potrzebował tablicy, prawdopodobnie bym ją zostawił, ale zaimplementowałem wyszukiwanie i wyszukiwanie kontynuowało w niewłaściwej pozycji, ponieważ tablica nie pasuje do tablicy, czego nie rozumiem, ponieważ tablica definiuje tablicę. Ten problem przekracza moje możliwości i bardzo cenię pomoc.

 protected int[][] board = {
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
            { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
            { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

    };

@Override
public void paintComponent(Graphics g) {
   Graphics2D g2 = (Graphics2D)g;

   for (int row = 0; row < board.length; row++) {
        for (int col = 0; col < board[0].length ; col++) {
            Color color;
            switch (board[row][col]) {
            case 0:
                color = new Color(149, 153, 146);
                break;
            default:
                color = new Color(38, 252, 0);

            }
            g2.setColor(color);
            g2.fillRect(row * pixelSize, col * pixelSize, pixelSize, pixelSize);

        }
    }

}

board

1
Linda Scoon 20 listopad 2019, 15:51
1
Najprawdopodobniej gdzieś zamieniłeś row na column, spróbuj zagrać z nimi i zobacz, jak zmienia się wynik. Domyślam się, że w grafice lewy dolny róg ma indeks 0,0, a dla tablicy w Javie lewy górny róg
 – 
Amongalen
20 listopad 2019, 16:15
2
W fillRect(x, y, width, height) współrzędna x (pozioma) powinna używać wartości col, a y (pionowa) współrzędna wartości row . Po prostu zrób g2.fillRect(col * pixelSize, row * pixelSize, pixelSize, pixelSize); .
 – 
Arnaud
20 listopad 2019, 16:26
Dziękuję Ci. to prosta rzecz, która zawsze sprawia mi najwięcej kłopotów
 – 
Linda Scoon
20 listopad 2019, 17:34

1 odpowiedź

Zmień to:

g2.fillRect(row * pixelSize, col * pixelSize, pixelSize, pixelSize);

Do tego:

g2.fillRect(col * pixelSize, row * pixelSize, pixelSize, pixelSize);

Współrzędna X występuje przed Y.

X jest definiowany przez kolumnę. Y jest zdefiniowane przez wiersz.

2
LowKeyEnergy 20 listopad 2019, 16:43