Sicuramente usare Random diversi era un errore.
Ottieni dei numeri pseudocasuali solo utilizzando lo stesso generatore, quindi lo stesso Random.

Non ho avuto tempo di guardare il resto del codice.