Attualmente sto lavorando a un gioco di auto-mover per i tic tac toe. Mi sono imbattuto in un algoritmo decente che consente al computer di costruire facilmente e rivendicare punti vittoria. Il problema però è che quando l'avversario è pericolosamente vicino alla vittoria, il computer continua a costruire verso la propria vittoria invece di bloccare gli avversari, è possibile in qualche modo ottimizzare il seguente algoritmo per contrastarlo?
L'algoritmo funziona come segue:
-
Inizializza un array intero 3x3
-
Esegue il ciclo su tutte le possibili combinazioni sulla scheda (0 | 0, 1 | 1, 0 | 2 ... e.tc).
-
Se la combinazione è una vittoria immediata, fermati e restituisci questa posizione.
-
Altrimenti avvia un ciclo (che esegue il loop di 1000, 10000 o 100000 volte, a seconda della difficoltà)
- Continua a muoverti da entrambe le parti in modo casuale fino a raggiungere la vittoria. Se la vittoria è dal computer, incrementa il contatore dei punti.
-
- Seleziona la posizione della scheda con il punteggio più alto
Questo algoritmo funziona bene e può costruire verso la vittoria (esempio:
·|x|o ·|x|o ·|x|o
·|·|· x|·|o x|x|o
·|·|· ·|·|· ·|·|o
Tuttavia quando si trova di fronte a una scacchiera come questa
·|x|o
o|x|·
·|·|·
La mossa ottimale dovrebbe essere quella di spezzare la catena di x, ma il computer si costruisce verso l'innalzamento della propria catena, ovvero spostandosi a 1 | 2 (la scacchiera è 3x3, gli indici partono da zero. Quindi quella sarebbe la terza colonna della seconda riga) .
C'è un modo per ottimizzare questo algoritmo in modo tale che questa debolezza scompaia?