Vai al contenuto
PLC Forum


Scopa D'assi - Algoritmi


walterword

Messaggi consigliati

ciao a tutti

Da poco tempo ho scoperto con grande interesse il gioco della scopa d'assi

quello che meno gradisco sono gli ambienti di gioco , bettole o osterie frequentate da qualche cialtroni - ubriaconi laugh.gif scherzo...

Ma veniamo a noi

Ho trovato tempo fa e scaricato un gioco che si rifa alla scopa d'assi .

Interessante ma non compelto e con qualche regola che non ha senso di esistere.

Ora , a parte l'ambiente di sviluppo , il linguaggio , la grafica e quant'altro , vorrei cercare di capire e mettere degli algoritmi che mi permettano di valutare i giochi fatti , gli ipotetici da fare ect .

Presuppongo che il gioco debba essere da 4 persone , di cui solo una deve essere scelta dall'essere umano .I due accersari ma anche il proprio socio saranno gestiti dal pc .

Ho provato a vedere le cose in questa maniera e gestire delle matrici o array relative alle carte che ognuno ha in mano , un array delle carte sul tavolo e una

sequenza a switch-case che mi permette di sapere a quale mano siamo , cioe quante carte rimangono in mano ad ognuno , oltreche a sapere chi e' di mazzo ect.

i tre giocatori gestiti dal pc possono memorizzare le carte giocate dagli avversari e adl socio , mentre il giocatore umano NO , altrimenti sarebbe una cagata .

Sarebbe come presentarsi all'osteria col block notes e la penna e scrivere le carte giocate , rimanenti ect , si rischia di essere presi a calci in cu*o dai vari pensionati e non .Lo ritengo un gioco dove conta sicuramente la fortuna , ma soprattutto l'abilita' nel scegliere le varie giocate , oltre che ad essere un buon esercizio per la mente e la memoria .

Sarebbe bello poter scrivere un motore che processi le varie giocate o probabilita di gioco .I dati da processare sarebbe bello scriverle in un file di excel preparato al caso dove mettere i valori delle varie giocate e lasciare che il motore faccia il resto.Questo perche sarebbe inpensabile scrivere codice C che tenga in considerazione tutte le possibili giocate ect .Diventerebbe una cosa pesante e noiosa.

Tra le idee potrei creare una array da 1 a 40 e stabilire che nella prima decina ci siano i semi di quadri , nella seconda di fiori ect .

Con random distrbuire le carte ed assegnare in maniera progressiva il mazziere.

Sarei lieto se qualcuno , interessato ed appassionato al gioco , mi dia la propria opinione o idea su come creare un modello matematico del gioco

ciao

walter

Link al commento
Condividi su altri siti


Solo una cosa non capisco, se i tre giocatori gestiti dal pc giocano secondo la memoria delle carte precedentemente uscite, mentre tu solo (non potendole annotare) ne perdi la memoria ammenochè non te le ricordi, i tre sono molto avvantagiati no?

E' come quando giochi col pc a scacchi, non credo che esso sia programmato per potere fare mosse false... ergo batterlo risulta molto difficile...

Link al commento
Condividi su altri siti

esatto , bravo

I due avversari dovrebbero essere bravi ma anche il mio socio

Il giocatore umano invece deve giocare senza annotare come dal vivo

Idee?

Link al commento
Condividi su altri siti

Ciao Walterword,

Penso che sia impostante creare una struttura dati per per tener traccia delle carte, quindi ipoteticamente un buffere o meglio un stack che contenga le iniziali 40 carte, e con l'azione di mescolarle è necessario. Poi, ciascun giocatore virtuale può avere un altro buffer posizionale dove segna le carte giocate (una specie di blocco notes virtuale). Anche il tuo socio virtuale può averlo, tanto spetta a te se decidere implementare il buffer e se usarlo (poi essendo un giocatore un oggetto, puoi instanziarlo quante volte vuoi, quindi fatto 1 giocatore li hai fatti tutti e tre e devi solo dirgli chi è il compagno di gioco smile.gif).

poi (giochi la scopa dassi o lo scopone scentifico? per intenderci a 3 o 9 carte smile.gif) ad ogni modo serve uno spazio (buffer) per le carte di mano.

ora viene il bello, ossia l'algoritmo. Per gli scacchi ce ne sono e purtroppo sono anche molto difficili da comprendere, io ho abbandonato sad.gif. Però la tecnica è più o meno la stessa, si basa sul backtracing, ossia:

-i giocatori dalle carte che hanno in mano e dalla memoria delle carte che hanno visto giocare provano virtualmente a fare giocate. Praticamente creano un albero di giocate e dopo di che prelevano la situazione migliore. Questo si ripete fino all'ultima giocata.

-a mio avviso non è semplice usare array come base dati, io preferire un struttura dinamica. Le giocate di ciascun giocatore sono relativamente semplici anche se noiose da implementare:

in pratica devi costruire un albero di ricerca. Ad ogni nodo corrisponde una quterna di carte. Ciscun nodo ha un punteggio positivo per vincita e negativo per perdita. L'algoritmo, dopo aver generato le possibili giocate (e visto che sono tante, almeno nella prima mano, si potrebbe gestire il grado di proffondità di ricerca quindi l'abilità del giocatore) preleverà la gicata che da maggio punteggio (questo è il sistema più semplice ma non il migliore ...). Ovviamente i turni di gioco, devono essere rispettati, quindi il primo giocatore, non avvendo nessuna carta sul tavolo è costretto a smazzarsi un bel po di ipotesi, i sucessivi sempre meno. Per iniziare, si potrebbe creare l'albero di ricerca relativo solo alla partita, quindi ciscun giocatore eseguirà le ipotesi solo in base alle carte che ha in mano, quelle giocate dai giocatori ne turni prima e di quelle sul tavolo.

ciao

Modificato: da Federico Milan
Link al commento
Condividi su altri siti

ciao federico

il gioco , come dal titolo , e' scopa d'assi biggrin.gif

Il fatto di gestire il turno di gioco o la sequenza (mazziere ect) si puo fare con 2 interi .Il discorso dell'algoritmo e' abbastanza pesante .

Immagina , sia alla terza carta giocata , quindi potrei usare uno switch e gestire una macchina a stati finiti , ma cosa succede .

1-chi e' di mazzo?

2-che carte sono state prese dai rispettivi giocatori

3-quanti assi sono stati giocati (un intero)

4-che carte ci sono in mano ? sono buco di 2 ? o 3 ? oppure non ho 7

oppure ho un 7 solo ? quanti assi ho ?

a chi faccio in mano un 2 o 3 bello o 7 bello

Cosa mi manca per la primiera ?

Posso concedere una scopa in cambio di salvare la napoli oppure un giro disastroso?

Il compagno che carte ha giocato che posso rispondere senza dare le scope?

Se il giocatore prima di me gioca un 7 , io ne ho uno solo e brutto , cosa faccio ?

Aspetto che mi porta il 7 bello ? Se ho l'asse lo taglio? Oppure faccio una scopa

oppure lo doppio oppure metto come esca un 2 o un 3 sperando che lo faccia il mio socio.Ci sono tante giocate e abbastanza dinamiche , ossia dipendenti non solo dalle regole fisse ma dall'evolversi del gioco

Quindi non e' facile trovare un algoritmo .Implementare della matematica o delle strutture dati lo si puo fare , e' materia conosciuta e reale , ma trovare il sistema o modello matematico del gioco e' tutt'altra cosa , la cosa piu difficile

Altri suggerimenti ....

ciao

walter

Link al commento
Condividi su altri siti

No Walterword,

non andiamo a scomodare le reti neuronali, il tuo problema, per quanto complesso sia è risolvibile con il backtracing. Provo a postare una idea ... cercando di ricordarmi le regole:

1 - Carte

2 - Napoli

3 - Ori

4 - anche il 7 bello ? non me lo ricordavo smile.gif ...

Ciscun giocatore vistuale deve avere il proprio blocco notes. quindi, ciscun giocatore, sapendo le carte che ha in mano e conoscendo le carte già uscite può realizzare un algoritmo di backtracing. Ossia:

ipotizionamo di essere alla 2 mano. Il turno, è noto perchè dipende dalla sequenza con qui si sono istanziati i giocatori.

Il primo gicatore deve:

controllare le carte che ha in mano. Quindi eliminare tutte le carte già usctite. A questo punto inizia l'algoritmo.

ipotizioamo che il giocatore abbia 5 ori, 3 spade, fante di coppe. L'algoitmo iniza posizionando la carta che garantisce la minor perdita. esempio fante di coppe.

ora il back tracing crea un albero d ricerca provando tutte le combinazioni che gli altri giocatori potrebbero fare. A ciascun possbile esito si assegna un punteggio che va da -1 a 1. Dove -1 significa perdita catastrosa e 1 ottimo guadagno. questa ricarca la si fa anche con le altre e carte, ossia il 5 ori e il tre di spade.

Qui inizia la logica di scelta, ossia avendo creato tre alberi di ricerca contenenti i valori di sucesso o insucesso, si può realizzare un banale schema, ossia se il primo albero ha come probabilità maggiori di un punteggio maggiore si sceglierà di giocare la prima carta, altrimenti la seconda o la terza. Non so se mi son spiegato ?

L'implementazione non è difficilissima ma un po machinosa. Per esempio:

Io utilizzerei una lista per contenere le carte non appartenenti al giocatore virtuale, una lista per le carte già gicate e una lista per le tre carte in mano.

Ora sapendo quli carte sono ancora in gioco l'agoritmo creerà un albero binario o una lista di risultati con tutte le possibili combinazioni. Al limite con le prime 100 combinazioni (più combinazioni testi, più intelligente diventa il giocatore.). La parte diffcile è dare un punteggio, per esempio il massimo punteggio credo che sia tre re e un asso con un punteggio di 11+4+4+4 (correggimi se sbaglio perchè la scopa d'assi son anni che non la gioco smile.gif) quindi associamo 1.0 a questo punteggio e dgradando fino andare all -1.0 per la perdita del 7 bello 0 0.95 per la perdita del 2 ori o del 3 ori.... ora la scelta di quale carta da giocare è semplice smile.gif ...

Link al commento
Condividi su altri siti

ciao fede

dalle parti di lodi anche il re bello e' un punto , ma dalle mie (milano) no .

Si ho capito quello che mi dici smile.gif pero non riesco a concretizzare nulla

Non so io farei un file di excel dove , numerando le carte da 1 a 40 stabilisco che

la prima decina siano i quadri , la seconda i fiori , la terza i cuori e l'ultima

i picche .

Il due di picche sara il 42 , poi per l avisualizzazione non mi interessa , basta caricare l'enumeratore ed indicizzare la bitmap opportuna

Dopo di che creo una lista di carte in mano per ognuno ed una lista di carte giocate da ognuno , nonche una lista di carte prese da ognuno .

Potrei cosi , in basa alla mia limitata esperienza , giocare per tutti e memorizzare

il valore decimale o binario delle carte prese , piuttosto che quelle da giocare o altro , sempr ein base al ruolo (se mazziere o no ) e alla carte in mano .

Vorrei iniziare a preparare qualcosa , in modo tale che man mano che mi vengano in mente astuzie o giocate (folli , di bleff o altro ) possa implementarle in qualsiasi momento .Resterebbe poi come implementare il motore del gioco che interpreti tutti i valori creati dal file di excel , qualcosa del genere

Non so se mi sono spiegato fede ...

Link al commento
Condividi su altri siti

Ciao Walter,

io mi ricordavo che programmavi in C# o C++ smile.gif ...

io penso che la cosa migliore per iniziare a concretizzare sia evitare la grafica e concentrarsi solo sull'aspetto "gestionale" del gioco. Credo che se programmi ad oggetti, la cosa migliore sia creare un oggettoo una interfaccia CARTA (da valutare), il quale verrà esteso per creare le 42 carte da gioco.

esempio provo a buttar giu qulacosa in pseudo codice

class CARTA

{

private IMAGE img = NULL; //Eventuale immagine della carta

private String TIPO; // "Coppe", "Ori", ...

private String punti; // "1","2","3", "Fante", "Cavallo","Re",...

public CARTA(IMAGE img, String TIPO, String punti)

{

this.TIPO = TIPO;

this.img = img;

this.punti = punti;

}

IMAGE getImage() {return img;}

String getTipo(){ return TIPO}

String getPunti(){return punti}

}

qui abbiamo quindi una classe CARTA, che ha tutte le informazioni per il gioco.

possimo immaginare di avere uno stack. se con un cilo for lo riempiamo casulamente di carte, o per inizialre lo riampiamo manualmente solo per vedere come va

Stack.put(new CARTA(Null,"Ori", "Asso");

Stack.put(new CARTA(Null,"Coppe","Re");

... e via dicendo. così abbiamo già il mazzo pronto. con listruzione pop() possiamo distribuire le carte ai vari giocatori.

i giocatori avranno una loro classe, e qui bisogna pensarci un po' ma per provare si può ipotizare qualcosa di simile

class GIOCATORE

{

private CARTA[] carteinmano = new CARTA[3]; // 3 carte in mano al massimo

private CARTA[] cartegiauscite = new CARTA[42]; // questo potrebbe essere statico o esterno ... da valutare per ottimizzare la memoria visto che sarebbe doplicato per tutti i giocatori ...

private string nomegiocatore;

pivtete string nomecollegadigioco;

public GOCATORE(stirn nomegiocatore, string nomecollegadigioco)

{

this.nomegiocatore = nomegiocatore;

this.nomecollegadigioco = nomecollegadigioco;

}

plublic OttieniCartaDaMaziere(CARTA carta)

{

// prendiamo la carta e la mettiamo nell'array delle carteinmano.

}

// implementazione metodi per il gioco ...

}

penso che questa potrebbe essere una strada, dove usando oggetti, puoi sperimentare una giocata manuale tra te e un giocatore vistuale, vedendo come meglio strutturare il giocatore. poi essendo un oggetto il giocatore, crearne altri due diventa automatico.

La logica di gioco, ora diventa un po complessa da scrivere qui anche perhcè richiede un bel po' di tempop per strutturarla, però ...

Ma io strutturerei così. immaginiamo la prima mano.

gicatore ha "2 coppe","2 ori","re bastoni".

il gicatore deve crearsi una lista di soluzioni con le varie disposizioni dele rimanenti 42-3 carte. esermpio

listagiocateteorica.pop("2 coppe", "3 ori", " 4 ori","5 ori")

listagiocateteorica.pop("2 coppe", "3 ori", " 4 ori","6 ori") e via così, vista così diventa mostruosamente grande, ma è l'idea poi l'ottimizzazione la si trova ...

a questo punto lista giochi deve avere un metodo che restituisca la carta giocata che da il miglio punteggio teorico previsto ....

ciao

Link al commento
Condividi su altri siti

ciao fede

mi fa piacere che il discorso si di tuo interesse

Io non intendo occuparmi assolutamente di quello che e' la grafica , quello viene alla fine .

L'oggetto carta ...... be l'oggetto carta secondo me non ha importanza , piuttosto

l'oggetto mazzo , composto da 40 carte , da 1 a 40 .Enumerazione mazzo di carte .

Lista dinamica o array per carte in tavolo , carte giocate da ogni giocatore , carte in mano .E fin qui mi puo star bene un po qualsiasi cosa .

Sono tutte , comunque , interpretazioni di interfaccia esterne .

La cosa che piu mi rompe , ossia della quale non riesco minimante a capire da dove incominciare e' trovare un qualcosa che mi tolga il lavoraccio descritto nei post precedenti , ossia di dover scrivere codice solo ed esclusivamente per apprezzare e fare delle scelte in base ad altre scelte gia fatte o scelte random (posso scegliere di rischiare dando una scopa in cambio di una carta che possa

contare per la napoli , piuttosto che starmene tranquillo cercando i punti di mazzo senza rischiare .Fin qui piu o meno ci sono arrivato ma come ti dicevo sopra , quando le situazioni si fanno tante da analizzare , per fare una cosa fatta bene , bisognerebbe analizzarle tutte o quasi con degli IF o SWITCH-CASE .

Per ricerche o composizioni o refresh delle carte o altro ok per cicli FOR o WHILE-DO .Ma nella piu semplice delle ipotesi , dovrei scrivere un putiferio di IF all'interno di SWITCH per analizzare le varie scelte in base a quanto gia svolto .

Dico bene ? ......

Vorrei trovare un sistema o medello matematico che mi permetta di scrivere le varie scelte o giocate in maniera diversa

Ti faccio un esempio Fede :

Anni fa avevo adottato un sistema per programmare dei plc , che dovevano eseguire delle sequenze e siccome erano prototipi dovevo continuamente e velocemente cambiare sequenze , bit e condizioni di salto da uno step al successivo o ad un altro step .Avevo creato un file di excel dove avevo delle colonne;ogni colonna rappresentava un motore o un qualcosa che doveva essere azionato .Questo epr ogni riga che raprpesentava uno step .Semrpe per ogni riga c'erano delle colonne all'interno del quale scrivevo dei tempi di ritardo oppure delle condizioni che mi facevano passare allo step successivo .

Tutte queste opzioni , celle quindi , che riempivo con degli 1 o degli zero o un intero in secondi o altro , venivano calcolate in celle finali , una per o piu di una per ogni riga , quindi per ogni step .

Creavo cosi un array di dword o word che rappresentavano tutto il mio sistema .Nel plc avevo scritto , UNA VOLTA SOLA , il motore che tramite puntatori andava a puntare alla cella che doveva puntare , estrapolava i tempi , e le maschere da copiare sui comandi dei motori , valvole o quant'altro

Il sistema di calcolo si basava che , siccome alla fine ottenevo delle word o dword , calcolavo il valore tramite script vba o barra delle formule di excel , cosi:

totale: cella1 * valore*2^0 + cella2 * valore*2^1 + cella3 * valore*2^2 .

Non ho scoperto nulla che non avesse gia fatto il sig . Bool o Bode o Furier .

Ma inventato un sistema che alla fine mi ha permesso di fare diverse messe in servizio lavorando solo ed esclusivamente sul foglio di excel , ed in base alle esigenza decidevo si scrivere 1 o 0 se volevo il motore 1 acceso acceso piuttosto che no , di scegliere le varianti che mi davano la possibilita' di andare allo step successivo ect , questo per tutti i motori ed attuatori della macchina .Dovevo solo copiare da excel la colonna dei valori finali ed importarla tramite sorgente awl nel db che veniva inizializzato , puntato , gestito e smascherato facendo tutto il resto

Questo ho potuto farlo perche il sistema me lo permetteva o comunque dopo aver analizzato le probabili circostanze a fondo , sono arrivato e raggiunto un compromesso di stabilita' .Quando dovevo fare delle modifiche aprivo il file di excel , mettevo 1 e 0 dove mi servivano , copiavo e scaricavo e tutto funzionava regolarmente , con lo stupore di tutti gli scienziati programamtori compresi che prima di capirla mi hanno detto di tutti i colori .

Io ho la testa ed il chiodo fisso , per la scopa d'assi , che mi batte sempre su questo esempio che avevo gia sviluppato .

Metti che un giorno non so cosa fare , vado all'osteria , vedo i 4 giocare , memorizzo il gioco , lo scrivo in una nuova riga di excel aggiunta ,copio l'array o la matrice nel programma scritto in C# o VB o quello che e' e lui gira , senza dover entrare , scrivere If , then , capire , ricordare provare e debuggare .

Non so se mi hai capito Fede ?

Concentrati su questo e vedrai che ti prendera' la testa per bene e sicuramente avrai un 'idea geniale che mi aiutera' anzi saremo noi due i fautori di questo game nonche di un metodo di programmazione rivoluzionario

smile.gif

ciao

walter

p.s. le righe contenti i dati da sviluppare e processare sono =40 , ossia 40 giocate possibili e massime per ogni mano , considerando che sono 10 carte per ogni giocatore ed i giocatori sono 4 .Nella prima riga posso mettere un "8" che significa che il primo giocatore ha giocato un fante di quadri .Nella seconda riga posso mettere un 18 o 28 o 38 che sono gli altir 3 fanti rimanenti , se il secondo giocatore li ha oppure una carta doppia o quello che sia .Alla partenza ogni giocatore avra' una word o meglio una lista dinamica contenente le sue carte che si aggiornera automaticamente tramite script e successivamente tramite codice C o C# , in base alla carta giocata .Ci saranno altri dati per tutte le necessita , ma io concentrerei le basi dello sviluppo su questo concetto che ti ho detto sopra .

E via cosi fino a descrivere n giocate .

Anche cosi verra un file excel lungo una vita , ma sempre meglio che un file con

codice .Alla fine il mio concetto e' analizzare questo gioco non con un codice di programmazione con dei dati , raccolti da un file di excel , piu veloce e divertente credo

Modificato: da walterword
Link al commento
Condividi su altri siti

cosi pero dovrei comunque elencare infinite giocate , col rischio di tralasciarne qualcuna con l'indesiderata conseguenza di arrestare il programma nel caso di una giocata non prevista , oppure dover creare una formula che mi calcoli automaticamente le possibili giocate partendo dalla distribuzione casuale .

Questo vorrebbe dire gestire un database con query e tutto ilr esto per ricerche ed aggiornamenti .

dry.gif

Link al commento
Condividi su altri siti

Ciao Walter, se trovo qualcosa i AI ti faccio sapere.

Il problema secondo me è che ci sono troppo combinazioni ed è impensabile un CASE. se riesco dopo ti posto qualcosa ... ciao

Link al commento
Condividi su altri siti

Ciao Walter,

scusa ma non ho trovato tempo, ma ti posto l'idea di base per implementare ciò che hai bisogno, forse con qualche errore di concetto nella programmazione ma l'important eè l'idea ... spero.

Utilizzare un CASE è impossibile per la quantità di dati,quindi unica opzione è utilizzare una struttura lista che memorizzi i vari risultati.

Facciamo il caso inizale. Sempolifichiamo il ragionamento non tenendo conto di tutte le distribuzioni, facciamo finta di giocare tutti contro tutti.

4 giocatori con 3 carte in mano. Il primo giocatore dovrà:

1. Selezionare la prima carta che ha in mano

2. costruire una lista di possibili combinazioni valutando la probabilità di vittori.

3. ripetere il punto 1 con la seconda carta.

Dobbiamo costruire una clase in grado di creare un possibile albero di ricerca. Immaginiamo di avere una lista che contenga tutte le carte meno quelle del giocatore ancora in gioco.

class Giocata

{

Giocata g;

Giocata next;

double punteggio;

CARTA mia, collega, avversario1, avversario2;

Giocata(CARTA mia){this.mia = mia;}

Giocata(CARTA mia,collega, avversaio1, avversario2)

{this.mia = mia; this.collega=collega; this.avversario1=....;

this.puntegio = mia.punti()+collega.punti()+...+...;

}

public push()

{

giocata _g = new Giocata(mia, collega, avversario1, avversario2);

next = _g;

next = next.g; // Boohh ... forse ho abagliato qualcosa... volgio solo fare una lista concatenata ... da verificare ...

}

public creaCombinazioni()

{

Giocata g = new Giocata(mia);

for(int i1=primacarta;i1 <= cartegiocabili; i1++)

for(int i2=primacarta;i2 <= cartegiocabili; i2++)

for(int i3=primacarta;i3 <= cartegiocabili; i3++) Giocata.push(Catagiocabile1), Catagiocabil(i2), Catagiocabil(i3))

}

....

}

in questo modo avremo una lista con tutte le possibili giocate dovremo avere tre liste una per ciascuna carta giocata, dove dovremeo eliminare le giocate in cui i1=i2=i3 per ovvi motivi. Ora per scegliere la carta che dovrebbe garantirci la giocata ottima dovremmo scegliere la combinazione con il punteggio più alto ...

Il punteggio ovviamnete non va calcolato come ho fatto io sommando i punteggio delle carte, ma va fatto verificando le 4 carte e dando un punteggio di vittoria, ossia se inteschiamo il bottino un numero positivo, se lo perdiamo negativo, se ci prendiamo 4 tre il punteggio positivo sarà massimo se perdiamo 4 tre il punteggio negativo sarà in modulo massimo. Anche questo modo di contare è erroneo - anze sbagliatissimo perchè giochiamo a rischio, perchè dovremmo attribuire una probabilità che questo avvenga ... ma per iniziare si può tentare ...

ciao Walter ...

Link al commento
Condividi su altri siti

Ciao,

vorrei far notare questo punto:

- Quando inizi una partita di scacchi, ad esempio, la posizione dei pezzi è nota (comunque, in QUALSIASI fase del gioco la posizione di tutti i pezzi è nota).

- Il numero di mosse possibli ad ogni giocata varia, normalmente potrebbe essere compreso tra 20 e 50, molte di queste giocate però sono assurde (ad es. mi faccio subito mangiare la regina...)

- In queste condizioni, secondo me, è "abbastanza facile" (non ho mai provato...!) generare un albero che percorre tutte le possibili alternative, ad ogni "mossa in avanti" i rami da esplorare si moltiplicano magari per 50, ma molti di questi si esauriranno presto essendo mosse assurde che creano una perdita immediata, rilevabile da un sistema di "punteggi" come dice Federico.

Al contrario, quando inizio una partita di SCOPA, ho 3 carte in mano (note) e 4 sul tavolo (note).

Le altre 33 sono già distribuite tra gli altri concorrenti, o lo saranno nelle mani successive, comunque la loro distribuzione non è nota e si potrà sviluppare in circa

2.39 * 10^28 modi diversi, leggasi 23900000000000000000000000000... circa...

(...cioè 33! / (6^11)....)

Per ognuna di queste combinazioni il giocatore ha SOLO 3 mosse possibili (o magari anche 5/6 mosse possibili, se posso scegliere tra prese diverse): un numero molto basso, ma da applicare a un numero di possibili giocate immenso.

A questo punto, come è possibilie generare un albero che esplori tutte le combinazioni...?

O è necessario lavorare in modo "probabilistico"?

Ciao, Emanuele

Link al commento
Condividi su altri siti

ciao ragazzi

...si interessanti le considerazioni

tengo a precisare che la vera scopa e' :

-10 carte subito a tutti e 4 i giocatori

La ricerca all'interno di un albero puo starmi bene , ma come avevo accennato e riportato da fede , si potrebbero usare delle liste dinamiche che si aggiornano man mano che il gioco viene svolto .

La lista dinamica incrementera' nel caso di carte prese per esempio e dimunuira nel caso di carte in mano .Pero ' c'e' qualcosa che non riesco a mettere a fuoco ...... dry.gif

Link al commento
Condividi su altri siti

Beh!

Questo ti semplifica molto la vita!

Infatti all'inizio del gioco, una volta viste le tue carte, avrai SOLO 30! / (10!)^3 = circa 5551 miliardi di combinazioni per le carte altrui.... tongue.gif

Il che rende la cosa MOLTO PIU' FACILE!!

Ciao, Emanuele

Link al commento
Condividi su altri siti

Si le combinazioni sono molte, ma l'albero di ricerca si deve troncare dpo n mosse. più l'albero è profondo più il giocatore è bravo. Ma per iniziare più che un albero si può optare per una lista da troncare.

Del resto, alcune soluzioni es: che sia un 5 di spade o un 5 di coppe non varia l'esito a meno della prima carta giocata ... quindi la ricerca e l'assegnazione del punteggio di giocata non varia facendo diminuire la ricerca ... è un argomento da valutare smile.gif ... se trovo un po' di tempo provo a vedere qualcosa smile.gif ...

Walter a che punto sei con la programmazione? effettivamente è uno di quei problemi che prende smile.gif ...

ciao

Link al commento
Condividi su altri siti

ciao fede

Con la programmazione praticamente zero , non ho nemmeno creato il progetto .

Ma questo mi preoccupa relativamente , usero VC#.net ed approfondiro ' le directX oppure il GDI + quando avro provato che qualcosa possa stare in piedi .

In effetti non riesco a trovare un'idea

ieri ho fatto un paio di partitine e mi hanno stroncato , avevo carte bruttissime , oh quando non girano non girano mad.gif

Link al commento
Condividi su altri siti

  • 4 years later...
Stefano Tonello

Ciao a tutti!!! Sono passati quasi 5 anni e credo siano tanti per rispolverare questo argomento ma ci provo lo stesso! :smile: ... Qualcuno ha più approfondito gli argomenti trattati nei post precedenti????

Link al commento
Condividi su altri siti

  • 1 month later...
Federico Milan

Sinceramente da parte mia è stato un po' tralasciato, per meri motivi di tempo :), in ogni caso sulla rete esistono esempi a riguardo, magari non direttamente esplici per il gioco della "scopa", ma che danno una idea sul da farsi.

ciao

Link al commento
Condividi su altri siti

  • 5 years later...

Ciao a tutti, sono capitato qui per caso e non sono un programmatore, ma utilizzo excel. Io gioco quotidianamente a scopone scientifico contro il mio pc....

scopone.jpg

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...