Ancora briscola...

Massimo Masson massimo@mail.studiomasson.it
Mer 21 Set 2005 01:38:18 CEST


Alberto Fornasier wrote:

[...]

> Stanotte, dato che ho dormito poco e male, mi sono fatto un'idea di come
> dovrebbe ragionare il giocatore-pc. Bisognerebbe dotarlo di una memoria
> delle carte giocate (configurabile in estensione, così si regola la
> difficoltà) e fargli prendere decisioni di conseguenza.
> Traduzione: dovrebbe essere in grado, all'ultima mano, di sapere le
> carte che ha in mano l'avversario (ci arrivo pure io che sono
> ultrascarso).

Innanzitutto ti ringrazio per la collaborazione algoritmica! :)
In effetti, allo stato attuale la funzione "empirica" gioca senza 
memoria, valuta solo le carte "in mano".
Tuttavia, se scarichi il .tgz c'è un foglio di calcolo (in formato 
openoffice) dove ho riportato uno schema di probabilità di vincita di 
ogni carta, alla prima mano.

L'idea finale su cui stavo lavorando ("finale" nel senso che poi ho 
smesso di pensarci, perchè dopo le vacanze avevo tutt'altro da fare...) 
sarebbe quella di ricalcolare dinamicamente nel programma quella tabella 
ad ogni mano (questo non è affatto difficile, bastano due o tre metodi 
nuovi ad alcune classi che già ci sono) per poi scegliere la carta con 
il criterio "empirico" attuale, mediato però dalle variazioni di 
probabilità dello storico. In questo modo si aggiungerebbe la "memoria" 
delle carte uscite.

Mi ero fermato sulla questione della scelta una volta calcolato il 
numero di carte contro cui si perde o si vince, se vengono fuori idee 
interessanti le implementiamo!!! :)

L'alternativa a questo metodo sarebbe un "classico" albero di ricerca, 
per cui stabilire la profondità di analisi, come dicevi tu, anche se non 
sono del tutto convinto che sia il metodo migliore in un gioco come 
questo (e temo che non sia nemmeno il più "divertente" da 
implementare!!! ;) )

In ogni caso, si possono facilmente implementare più algoritmi di gioco, 
per poi scegliere quello che si vuole...

> Appena capisco bene come si incastrano i vari pezzi comincio a
> "lavorarci".

Ottimo! Grazie!!! :)

> Bel gioco, veramente! Lo presentiamo al Linux Day?

Non ci avevo pensato, ma non ho nulla in contrario, anzi se siete tutti 
d'accordo si può fare...
In effetti a giugno avevo proposto un talk sullo sviluppo 
platform-independent, e questo ne sarebbe certamente un esempio...

> Si potrebbe trasformarlo in una raccolta di giochi, come PySol è per i
> solitari (magari prendendo a prestito un po' di sorgente).

Se guardi la paginetta internet che ho fatto (o se guardi i sorgenti) 
vedi che in smBrisCola c'è smCarte, che è un componente del modellino ad 
oggetti su cui Briscola è costruito.

L'idea era proprio quella di sviluppare un componente per i giochi di 
carte (generico) su cui poi costruire diversi card-games. La briscola è 
in effetti solo il primo.

Approfitto per una descrizione:
Al primo livello il "framework" definisce alcune classi base: carte, 
giocatore, mazzo, tavolo. Da mazzo derivano mazzo_italiano e 
mazzo_francese (eventualmente con jolly).

Al secondo livello Briscola eredita ed estende tali classi, aggiungendo 
caratteristiche e metodi che simulano proprio la briscola. In più si 
definisce una classe che consente di giocare a terminale (caratteri).

Al terzo livello l'interfaccia grafica comunica con gli oggetti 
Briscola, per implementare il gioco. La gui è costruita con wxGlade.

Tutto questo per confermare che la strada di trasformare in una raccolta 
di giochi è una via delineata dall'inizio... anche se a voler essere 
onesti si dovrebbe far evolvere anche la gui in un sistema a doppio 
livello, per riutilizzare il più possibile. Ma questo dipende molto 
anche dal gioco specifico.

Adesso, comunque, buonanotte a tutti!
Max.py


Maggiori informazioni sulla lista blug