Newsgroup: it.comp.programmare
Titolo: GIOCO DEL TRIS

Raga vorrei fare il gioco del Tris in Visual Basic ma sono un po' incasinato
nel trovare un algoritmo giusto. Il gioco del tris e' quello in cui per
vincere bisogna allineare o tre X o tre O in orrizontale o verticale o in
diagonale. Chi avesse delle idee e' pregato di comunicarmele altrimenti il
mio cervello va in fumo :)). Ciaoo

 ha scritto nel messaggio
news:ckGv8.58149$m41.1...@twister2.libero.it...



Allora io all'epoca per programmare il giocatore-computer ho fatto così:
1) se non ci sono segni nella griglia, quindi il comp. fa la prima mossa
posso renderlo 'stupido' è fargli fare una mossa a caso->semplice RND
2) se sulla griglia ci sono dei segni, quindi il computer fa la mossa
successiva all'utente o comunque il gioco è già cominciato faccio cosi:
   considerando che ogni segno dell'utente ha come valore 1, e quelli
   del computer 0, faccio la somma dei valori delle righe, delle colonne
   e delle possibili diagonali, se trovo un valore a 2 vuol dire che
l'utente
   ha la possibilità di fare tris, quindi lo impedisco facendo mettere il
segno
   del computer sulla stessa riga o colonna o diagonale.
   Se invece non trovo valori a 2, significa che l'utente non ha la
possibilità
   di fare tris in nessun modo, allora posso far scegliere al computer ho
una
   cella a caso tra quelle libere (altro RND), ma sarebbe una scelta
stupida,
   oppure gli faccio cercare quali sono le sue possibilità di fare tris o di
   mettere almeno due segni consecutivi.
3) il gioco prosegue nello stesso modo fino alla fine.
A dire il vero prima di far bloccare dal computer i possibili tris
dell'utente
cerco se può farne lui, altrimenti procedo come ho descritto sopra.
Principalmente il computer gioca sulla 'difensiva', ma a dire il verò così
è più facile pareggiare che batterlo, o perdere.
Spero di esserti stato d'aiuto o soprattutto chiaro.
Saluti,
Pusky

 ha scritto nel messaggio
news:ckGv8.58149$m41.1...@twister2.libero.it...

Ti consiglio di cercare informazioni sull'algoritmo min-max. E' un algoritmo
usato (insieme alle sue tante varianti) in intelligenza artificiale nella
teoria dei giochi.
Ciao, Davide.

 wrote in message
ckGv8.58149$m41.1...@twister2.libero.it...

Il grande gioco del filetto!
Ho fatto due anni fà questi gioco proprio per VisualBasic. Ora non ho il
codice a portata di mano, però posso dirti che ero in grado di fare tre
livelli di difficoltà. Il livello più semplice consisteva di mettere una X o
una O a caso... , il livello intermedio chiudeva tutti le possibilità che il
giocatore potesse fare tris e a sua volta ne approfittava nel caso avesse
già due su tre segni piazzati sulla riga, il livello difficile faceva anche
i trucchetti e si proteggeva nel caso che fosse l'utente a farli.. in
pratica per vincere bisognava fare soltanto un "trucco" che io non ho
istruito appositamente per poi poter vincere contro di lui. A livello
difficile, gli utenti che giocavano al "Filetto" prendevano certe batoste
contro il PC!
Questo tipo di approccio, comunque, non si può considerare come intelligenza
artificiale, perchè il computer non apprende mai, si limita a calcolare
tutte (o quasi :-) le possibili combinazioni e utilizzare la migliore tra
esse.

 artificiale nella teoria dei giochi.
una dispensa sul min-max si puo` trovare su
 
http://ioi.dsi.unimi.it
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 un po' incasinato nel trovare un algoritmo giusto.
Siccome il gioco ha un numero di possibilita' finito e basso, puoi stupire
te stesso e i tuoi amici, facendo un programma che impara dagli errori, fino
a diventare praticamente imbattibile
In pratica ogni posizione dell Tris puo' essere rappresentata da una stringa
di 9 caratteri (3 caselle per riga, ovvero 9 caselle).
Diciamo che ogni carattere possa contenere 1 se e' presente una pedina del
giocatore A, 2 se e' presente una pedina del giocatore B, e 0 se e' una
mossa da evitare perche' porta alla sconfitta.
Ad ogni mossa il tuo programma deve scegliere la prima casella vuota. A
questo punto crei la stringa di cui parlavamo (ponendo uno 0 al posto della
mossa che vuoi fare) e controlli se questa stringa esiste nell'array delle
mosse da evitare. Se esiste passi alla casella libera successiva.
Se non esiste, fai la mossa ma tieni memorizzato la stringa che hai appena
creato, con lo zero al posto della tua attuale posizione.
Se alla mossa successiva perdi, aggiungi questa stringa all'array delle
mosse da evitare, altrimenti vai avanti con la partita.
Esiste un'altra possibilita', ovvero che non esista nessuna mossa valida
(considerando le caselle occupate, e quelle che portano alla sconfitta). In
questo caso, inserisci nell'elenco delle mosse da evitare la stringa che
rappresenta la tua mossa precedente.
In questo modo, dopo un numero adeguato di partite, il tuo programma
risultera' imbattibile. Martin Gardner 30 anni fa aveva ipotizzato un simile
"computer" per giocare a Tris, fatto semplicemente con scatole di fiammiferi
che potevano contenere o no fiammiferi per sapere se la mossa successiva era
perdente o giocabile.
Ciao
*Roby*

 risultera' imbattibile.
Se si vuole creare un programma imbattibile nel gioco del tris perche'
aspettare un certo numero di partite quando e' possibile renderlo
imbattibile dalla prima partita?
Ciao, Davide.

 wrote in message
news:ckGv8.58149$m41.1...@twister2.libero.it...

Come hanno detto Antonio & Davide, un modo e' quello di usare
l'algoritmo min-max. Se vuoi un esempio di codice gia' scritto (da me ti
do il link), ma e' scritto in C++ sotto Linux con le librerie QT. Non
dovrebbe essere difficile convertitlo, dato che non faccio uso di
ereditarieta'. Il link e':
ftp://ftp.infomedia.it/pub/DEV./Listati/Dev86/linux-minmax-2.zip
Trovi anche una breve spiegazione .txt ed un diagramma delle classi .pdf
Facci sapere!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Non ti sembra fantastica l'idea che un computer possa imparare dai suoi
errori? ... č questo che si vuol fare...

 errori?
Certo l'idea mi piace molto ma non vedo il motivo di usarla nel gioco del
tris.
In piu', se vogliamo fare dell'apprendimento automatico, facciamolo per bene
utilizzando le reti neurali....ma questo e' un altro discorso.
Ciao, Davide.