Java: ¿Cómo crear un mapa de mosaico 2D en un panel usando Rectángulos Graphics2D?

Estoy tratando de simular una batalla en un programa realmente básico, pero dado que esta es mi primera vez con un gran programa en Java, no tengo ni idea de cómo proceder. Estaba pensando que tendría un gran panel de 600 por 600 y usaría Graphics2D para dibujar el terreno como rectángulos de 20x20 ... Desafortunadamente, incluso con varios tutoriales, no tengo idea de qué hacer.

Tengo 10 tipos diferentes de terreno para recorrer y 5 perfiles de paisaje diferentes. Básicamente, lo que quiero que haga el programa es cuando selecciono un determinado perfil en un cuadro combinado, pinta el paisaje y los dos lados opuestos en la batalla (aunque todavía no estoy allí)

Sinceramente, no he progresado mucho en el programa. ¿Debería usar solo Graphics2D y rectángulos para algo como esto, o debería cambiar a OpenGL o algo similar? Aunque con mi experiencia actual en Java, no creo que llegue muy lejos sin ayuda. De todos modos, esto es lo que tengo hasta ahora:

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);
        }
    }

Llegué hasta aquí con varios tutoriales de Youtube, por lo que mi código es un poco errático. Todo lo que tengo en el código del formulario principal es un evento de activación de CheckBox. (La GUI está prediseñada en el editor de Netbeans).

Respuestas a la pregunta(4)

Su respuesta a la pregunta