[monitor] Incrocio con pedoni

Ci sono automobili e pedoni che si approcciano a un incrocio. I pedoni hanno la precedenza sulle auto.

Le auto si comportano secondo il seguente schema:

1
2
3
4
5
6
7
8
9
10
11
finche' sulla strada:
 
    Se accede all'incrocio:
        incr.arrivaAuto(); // indica che sta per attraversare
    Se esce dall'incrocio:
        incr.attraversatoAuto(); // indica che ha attraversato
                 
    incr.muovi(c,x,y,dx,dy); // la macchina si muove se ha strada
    x+=dx; y+=dy;
         
incr.libera(x,y); // esce dalla strada

I pedoni si comportano secondo il seguente schema:

1
2
3
4
5
6
7
8
9
10
11
finche' sulla strada:
 
    Se accede all'incrocio:
        incr.arrivaPedone(); // indica che sta per attraversare
    Se esce dall'incrocio:
        incr.attraversatoPedone(); // indica che ha attraversato
                 
    incr.muovi(c,x,y,dx,dy); // il pedone si muove se ha strada
    x+=dx; y+=dy;
         
incr.libera(x,y); // esce dalla strada

Progettare un monitor Incrocio che implementi i seguenti metodi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void muovi(char c, int x, int y, int dx, int dy)
  se la posizione x+dx,y+dy e' occupata attende. Altrimenti scrive c in tale posizione e libera
  la posizione attuale x,y scrivendo uno spazio
 
void libera(int x, int y)
  libera la posizione x,y scrivendo uno spazio
 
char strada(int x, int y)
  ritorna il carattere (auto o spazio) in posizione x,y (serve per stampare le auto)
 
void arrivaAuto()
  Se ci sono pedoni in attesa o in attraversamento attende
 
void attraversatoAuto()
  Indica che ha finito di attraversare l'incrocio
 
void arrivaPedone()
  Se ci sono auto in attraversamento attende, ma ha la precedenza
 
void attraversatoPedone()
  Indica che ha finito di attraversare l'incrocio

In particolare notare che le auto attendono se ci sono pedoni in attesa o attraversamento (dando quindi la precedenza ai pedoni). I pedoni, invece, attendono solo se ci sono auto in attraversamento.

Scaricare qui il codice sorgente.

Visualizza la soluzione