Java - Criando um mapa de blocos 2D em um painel usando retângulos Graphics2D?

Estou tentando simular uma batalha em um programa realmente básico, mas como é a primeira vez que estou com um grande programa em Java, não tenho noção de como proceder. Eu estava pensando em ter um grande painel de 600 por 600 e usar o Graphics2D para desenhar o terreno como retângulos de 20x20 ... Infelizmente, mesmo com vários tutoriais, não tenho idéia do que fazer.

Tenho 10 tipos diferentes de terreno para percorrer e 5 perfis de paisagem diferentes. Basicamente, o que eu quero que o programa faça é quando seleciono um determinado perfil em uma caixa de combinação, ele pinta a paisagem e os dois lados opostos na batalha (embora ainda não cheguei lá)

Honestamente, não fiz muito progresso no programa. Devo usar apenas Graphics2D e retângulos para algo assim, ou devo mudar para OpenGL ou algo semelhante? Embora com minha experiência atual em Java, acho que não chegaria muito longe sem ajuda. De qualquer forma, aqui está o que tenho até agora:

public class Map extends JPanel {
    int n = 1;
    int x; int y;
    int Area = 750;
    public Color City = new Color(214,217,223);
    public Color Desert = new Color(255,204,102);
    public Color DirtRoad = new Color(153,102,0);
    public Color Forest = new Color(0,102,0);
    public Color Hills = new Color(51,153,0);
    public Color Lake = new Color(0,153,153);
    public Color Mountains = new Color(102,102,255);
    public Color Ocean = new Color(0,0,153);
    public Color PavedRoad = new Color(51,51,0);
    public Color Plains = new Color(102,153,0);
    public Rectangle blocks[];
    public Map(){
        blocks = new Rectangle[750];
        if (n == 1) {
            setBackground(City);
            n = 2;
        } else if (n == 2) {
            setBackground(Desert);
            n = 3;
        } else if (n == 3) {
            setBackground(DirtRoad);
            n = 4;
        } else if (n == 4) {
            setBackground(Forest);
            n = 5;
        } else if (n == 5) {
            setBackground(Hills);
            n = 6;
        } else if (n == 6) {
            setBackground(Lake);
            n = 7;
        } else if (n == 7) {
            setBackground(Mountains);
            n = 8;
        } else if (n == 8) {
            setBackground(Ocean);
            n = 9;
        } else if (n == 9) {
            setBackground(PavedRoad);
            n = 10;
        } else if (n == 10) {
            setBackground(Plains);
            n = 1;
        } else {
        }
        for (int i = 1; i <= Area; i++) {
            blocks[i] = new Rectangle(x, y, 20, 20);
        }
    }

Cheguei tão longe com vários tutoriais do YouTube, então meu código é um pouco irregular. Tudo o que tenho no código do formulário principal é um evento de disparo checkBox. (A GUI é pré-projetada no editor Netbeans.)