Articolo pubblicato sul n. 7 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel marzo 1982 NB: questo è il mio primo articolo... :-) Othello con il computer di Silvio Cavalcanti e Andrea de Prisco
Tutti sappiamo che i compiti che un elaboratore può svolgere
sono innumerevoli, ed i suoi campi di applicazione,
diversissimi, sono limitati praticamente solo dalla fantasia
e dall'ingegno dei programmatori. Una delle applicazioni più
interessanti
è senza dubbio la simulazione di uno dei
contendenti di un gioco a due persone: i programmi di questo
tipo sono purtroppo tra i pili difficili da stendere, e
mettono a dura prova la perizia di chi ricerca gli algoritmi
e ne cura l'applicazione. Una volta presi dal fascino di
questa programmazione, però, si può rimanere piacevolmente
occupati per mesi nella stesura di versioni sempre più
perfette di uno stesso gioco. Il gioco
L'Othello, a differenza dei più diffusi giochi a due
persone, non è molto antico: è stato messo in commercio una
decina d'anni fa su un brevetto giapponese. In verità, però,
e praticamente identico al Reversi, un gioco molto popolare
nel secolo scorso in Inghilterra, dal quale differisce solo
per la rigida posizione di partenza, che e solo una tra le
molte possibili del Reversi. II gioco si
svolge
su una scacchiera 8 per 8 generalmente verde o comunque di
un colore uniforme diverso dal bianco e dal nero, colori
destinati alle pedine. Queste, contrariamente a quelle della
dama, hanno una faccia bianca ed una nera. Nell'Othello
infatti i pezzi appartengono all'uno o all'altro giocatore a
seconda del colore della faccia superiore, e nel corso del
gioco possono venire ribaltate in modo da cambiare colore e
quindi ruolo; il numero totale di pedine è 64, quanto serve
per ricoprire completamente la scacchiera.
II gioco consiste nel porre in campo, alternativamente, una
pedina col proprio colore rivolto verso l'alto, facendo sì
che questa catturi almeno una pedina avversaria (di colore
opposto). La presa avviene quando la pedina appena posata
chiude, lungo le direzioni uscenti dalla sua casella
(verticali orizzontali e diagonali), una o più pedine
avversarie fra se e una delle pedine del proprio colore che
già si trovavamo sul campo. Ancora più semplicemente: la
pedina deve essere posta sulla scacchiera in modo da
formare, anche su più direzioni, delle file continue di una
o più pedine avversarie terminanti ai due estremi con una o
più pedine proprie, di cui una deve essere quella appena
giocata. Le pedine avversarie cosi racchiuse e quindi
mangiate vengono capovolte, assumendo il colore del
mangiante. La cattura di almeno una pedina avversaria è una
condizione necessaria per poter eseguire la mossa: se il
giocatore che deve muovere non può mangiare nessuna pedina
salta il turno, e continua a farlo finché non gli sia
nuovamente possibile una mossa con cattura.
Come già accennato, in questa articolo porremo soltanto le
basi generali del gioco, e non entreremo nel dettaglio delle
varie strategie possibili, per non limitare la fantasia di
chi volesse eventualmente aderire al nostro invito a
cimentarsi nella scrittura di un proprio programma.
Riteniamo comunque doveroso introdurre alcuni elementari
comportamenti di gioco, senza conoscere i quali non è
possibile competere neanche con giocatori poco esperti. E’
sufficiente giocare pochissime partite per capire che
durante le fasi iniziali è inutile affannarsi alla ricerca
della mossa che faccia conquistare più pedine avversarie,
mentre è molto proficuo cercare di guadagnare le caselle
strategicamente più favorevoli: le posizioni più forti, ad
esempio, sono i quattro angoli della scacchiera, in quanto
una volta conquistati non possono più venire ripresi
dall'avversario. Da essi inoltre si può partire per la
conquista definitiva dei bordi del campo: altre posizioni
molto forti strategicamente. Una pedina sui bordo può venire
catturata esclusivamente dal bordo
o
dall'angolo. Se l'avversario è valido cercherà, a sua volta,
di conquistare angoli e bordi; quindi altro compito di un
buon programma è di opporsi a che ciò avvenga con facilità.
Alla luce di quanta detto si intuisce subito che le caselle
sono più o meno buone a seconda che facciano conquistare
all'avversario posizioni negative o positive. Esempio tipico
di posizione negativa è quello della casella adiacente in
diagonale all'angolo, presa la quale diventa molto difficile
impedire all'avversario di conquistare l'angolo.
Queste poche notizie non sono che un cenno di tutte le
finezze dell'Othello, che come per ogni altro gioco a due
persone si possono apprendere solo per esperienza diretta. L’Othello sugli elaboratori
II gioco, anche se a diversi livelli, può essere programmato
su tutti gli elaboratori, comprese le calcolatrici
programmabili. Per queste ultime però, date le modeste
capacità di memoria e soprattutto le basse velocità di
elaborazione, proponiamo di sviluppare il gioco su di una
scacchiera 6 per 6 anziché 8 per 8; questa limitazione non
toglie nulla alla logica della programmazione ed evita il
protrarsi delle partite oltre limiti ragionevoli, anche se
si perde un po' dell'agonismo della versione originale.
In figura 4a vediamo la rappresentazione della scacchiera standard; le caselle 0, 9, 18, ... , 63 sono di "bordo", ossia servono per far capire al computer se due caselle sono o non so no sulla stessa riga. Tutto questo perché la scacchiera all'interno del calcolatore non e che un lungo vettore (figura 4b). Lo stesso discorso, con ovvie modifiche, va ripetuto per il formato 6 per 6. In entrambi i casi il nostro consiglio è di porre nelle caselle vuote il valore zero e nei bordi il valore 1, contrassegnando poi le caselle proprie col valore -2 e quelle dell'avversario col valore -1. Questa scelta per le pedine non è del tutto a caso: infatti questi valori risultano abbastanza comodi per capovolgere Ie pedine conquistate. La semplice istruzione di assegnazione: contenuto casella = (-3) - contenuto casella
restituisce per l'appunto la pedina capovolta, come è facile
verificare. Basta applicare la formula a tutte le pedine da
voltare ed il gioco è fatto. si presentano tre casi: a) Nella casella c'e un'altra pedina avversaria: allora si prosegue nella stessa direzione. b) Siamo usciti fuori dalla scacchiera o siamo capitati sul bordo, o la casella esaminata è vuota: in questo caso non è possibile mangiare, e allora si cambia direzione (o casella, se tutte e otto le direzioni sono state esaminate). c) E’ presente una pedina propria: è pertanto possibile catturare tutte le pedine avversarie comprese fra la casella analizzata per ultima e quella da cui si è partiti; si prosegue poi la ricerca nelle restanti direzioni per controllare se sia possibile conquistare qualche altra pedina con la stessa mossa. Resta il problema di come effettuare la ricerca nelle otto direzioni. Dando un'occhiata alla scacchiera 8 per 8 (figura 4a), noterete che, considerata una qualunque casella, ad es. la 40, quelle adiacenti ad essa nelle otto direzioni sono contraddistinte dai numeri: 30, 31, 32, 41, 50, 49, 48, 39; ossia 40-10, 40-9, 40-8, 40+1, 40+10, 40+9, 40+8, 40-1. In altre parole, aggiungendo ripetutamente al val ore 40 il valore + 8, ottenendo via via 48, 56, 64, si percorre la direzione sud-est; un discorso analogo, con diverse costanti, vale per le restanti direzioni. Lo schema è riportato in figura 5; per la scacchiera 6 per 6 cambiano le costanti ma non il principio. In entrambi i casi bisognerà stare attenti a non uscire dalla scacchiera durante la ricerca. Il programma di esempio che vi presentiamo, nelle versioni per Apple II e TI-59, esegue questo test per tutte le caselle della scacchiera, e gioca infine la mossa che conquista più pedine. Abbiamo già detto che questa non è sempre la strategia preferibile, ed infatti questo programma non è certo il migliore; anzi, batterlo non è difficile. Non vogliamo però dirvi altro: il nostro scopo non è quello di darvi un programma ma di farvelo fare, dandovi il maggior numero di consigli. Il programma
Per concludere diamo un breve sguardo al nostro programmino.
Bisogna subito dire che sulla 59, nonostante la riduzione
del numero di caselle, il gioco non è molto veloce (dai 3 ai
5 minuti per mossa), e ciò non solo a causa della bassa
velocità di elaborazione ma anche per la complessità del
programma, caratterizzato da numerosissimi salti e
confronti.
Si entra dal punto K se gioca per prima la macchina, dal
punto A altrimenti. Sulla 59 si deve innanzitutto premere E
per inizializzare la scacchiera, poi si preme RST R/S per
far giocare prima lei, altrimenti si imposta la propria
mossa e si preme A. Ricordiamo che la numerazione delle
caselle è differente nel caso 6 per 6 da quello 8 per 8, e
che per passare si gioca nella casella 0. Conclusione Con questo articolo speriamo di aver suscitato il vostro interesse verso I'Othello e I'intelligenza artificiale. Crediamo di aver mostrato chiaramente come, con un po' di pazienza, sia possibile insegnare ad un computer a fare qualcosa di tipicamente umano: giocare. Va anche detto che il programma-giochetto, ben noto specialmente ai piccoli informatici in virtù della sua onnipresenza sui manuali delle programmabili, ha un alto valore didattico sia perché non deve necessariamente essere una banalità, sia perché psicologicamente dà molta soddisfazione giocare contro un proprio programma: se vince la macchina si ha il merito di aver sviluppato un buon algoritmo di gioco, se vince il programmatore si ha la soddisfazione di non essersi lasciati fregare da una scatolina ignorante e presuntuosa ... A questa punto vi lasciamo ai vostri computer: buon lavoro, e non mancate di farci conoscere i risultati. Impaginato originale... Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui |