Topic: Foto carte da gioco  (Letto 239 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline DRN

  • python unicellularis
  • *
  • Post: 5
  • Punti reputazione: 0
    • Mostra profilo
Foto carte da gioco
« il: Novembre 30, 2020, 21:46 »
Ciao a tutti, non so se scrivo nella sezione giusta ma sto cercando foto di carte da gioco per sviluppare un gioco. Grazie   :)

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #1 il: Dicembre 01, 2020, 07:59 »
 :D Riferisci al 7-1/2? ... ma dai! Una googlata e ne trovi milioni, comunque, guarda qui, c'è l'insieme delle carte napoletane, attento ad eventuali diritti di copyright.

Ti dirò, intrigato da Tuo post sul setteemezzo, ho preso un mazzo me le sono scansionate e serializzate tutte quante, quando ho tempo (quindi raramente) mi guardo la "cosa", finalizzo a fare un esercizio d'apprendimento sulle wx realizzando un "tavolo" da gioco grafico.
Al momento, ho abbozzato un prototipo di "mano" per una giocata, trovato un set di regole del gioco su wikipedia e sto esplorando alcuni metodi grafici di wx ... se non hai "fretta" (io sono mooolto flemmatico), se ne può anche parlare e vedere assieme (N.B. : io uso molto le classi)

Ciao

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #2 il: Dicembre 01, 2020, 12:44 »
cioè... sprite raster di carte da gioco... ma sono tornati gli anni '80?

Provate con questi: https://en.wikipedia.org/wiki/Playing_cards_in_Unicode
(che vi permettono di fare un gioco puramente testuale... se avete una shell unicode!)

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #3 il: Dicembre 01, 2020, 13:06 »
cioè... sprite raster di carte da gioco... ma sono tornati gli anni '80?
Beh? Magari tornassi indietro di 40 anni!!! ... e poi, vuoi mettere con le "Napoletane"?

Scherzo naturalmente, ;) personalmente, 'na guardata la darò dato che, comunque, mi faccio prima dei prototipi "testuali" dei processi e, perché no, potrei anche includere quelle carte "da ramino" (anche se non mi piacciono), magari potrei approfittarne per vedermi le curses ... Comunque, non è la realizzazione del "gioco" in se che interessa me, più mettermi sulla sua "rappresentazione".

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #4 il: Dicembre 01, 2020, 14:39 »
beh... implementare un mazzo di carte è un esercizio classico... siccome un mazzo è in sostanza una struttura che deve mantenere uno stato interno, è fatto apposta per esercitarsi con le classi e l'OOP. Si può scendere parecchio nel dettaglio con l'implementazione, e si possono affrontare (e forse risolvere!) diversi problemi di design.
Ovviamente ci sono già un sacco di implementazioni pronte, da cui si può prendere spunto guardando il codice sorgente: basta googlare per "python card deck library" e si trova di tutto.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #5 il: Dicembre 01, 2020, 17:18 »
Ovviamente ci sono già un sacco di implementazioni pronte, da cui si può prendere spunto guardando il codice sorgente: basta googlare per "python card deck library" e si trova di tutto.

Devo dire che son rimasto sorpreso dalla ricerca, ho trovato diverse librerie python per le generiche carte "da ramino" (non so neanche come si chiamano) ed una per carte "francesi" ... non me lo sarei mai immaginato per una cosa che ritengo essenzialmente banale, alla fine il "necessaire" sono un paio di liste ed un paio di chiamate a random, una cosa così :
class Mazzo:
    semi = ['Denari', 'Coppe', 'Spade', 'Mazze']
    def __init__(self):
        self.mazzo = []
        for s in range(len(self.semi)):
            carte = [x for x in range(1, 11)]
            self.mazzo.append(carte)
   
    def estrai(self):
        ha_carte = False
        while not ha_carte:
            seme = randint(0, 3)
            ha_carte = self.mazzo[seme]
        estrai = randint(0, len(self.mazzo[seme])-1)
        carta = self.mazzo[seme].pop(estrai)
        return seme, self.semi[seme], carta


Ben diversa cosa sarebbe la definizione di una "partita" ... va da se che un po' del codice di quanto trovato debbo andarmelo a vedere, chissà quante altre cose "non immagino".

Grazie per la dritta :)

[Edit] P.S. - si, lo so che in caso di esaurimento del mazzo va in loop infinito, è solo un prototipo base di test, il controllo preventivo di tutti i semi l'ho rimandato ;)
« Ultima modifica: Dicembre 01, 2020, 17:23 da nuzzopippo »

Offline DRN

  • python unicellularis
  • *
  • Post: 5
  • Punti reputazione: 0
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #6 il: Dicembre 05, 2020, 19:21 »
Io ho fatto questo fino ad ora ma sono agli inizi e ho risolto con qualche ciclo, if e funzione, non saprei come altro fare. Qualche consiglio? A me sembra un po troppo lungo e non è ancora finito.


#mancano: 7½ emblée (con 2 carte)
#         buio
#         7½ con 5 figure
#         valori della matta
#         sostituzione carta se esce il 4

from random import *
import time

def estrazionecartamazziere(listamazzo2,numcarta2,n):
   
    o=0.0
    if n==7.5:
        while True:
            if o<7.5:
                numcarta2,listamazzo2=movimentocarte(listamazzo2)
                n=valorecarta(numcarta2)       
                o+=n
            elif o>7.5:
                return o,listamazzo2
           
    n=valorecarta(numcarta2)
    o=0.0
    o+=n
    while True:
        if o<=5:
            numcarta2,listamazzo2=movimentocarte(listamazzo2)
            n=valorecarta(numcarta2)       
            o+=n
        elif o>5 and o<=7.5:
            return o,listamazzo2
        elif o>7.5:
            return o,listamazzo2
       
def mazzoeshuffle():
   
    mazzo=list(range(0,40))
    #print(mazzo)
    shuffle(mazzo)
#    print(mazzo)
    return mazzo
       
def movimentocarte(listamazzo):
   
    numcarta=listamazzo.pop()
    uscite=[numcarta]
    listamazzo=uscite+listamazzo
 #   print("il numero della carta è",numcarta)
#    print(listamazzo)
    return numcarta,listamazzo

def valorecarta(cartaestratta):
   
#    print("cartaestratta= ",cartaestratta)
   
    valori=['A','2','3','4','5','6','7','J','Q','K']
    semi=['cuori','quadri','fiori','picche']
    x=cartaestratta%10
    y=cartaestratta//10
    xx=valori[x]
    yy=semi[y]
    print(xx,"di",yy)
    time.sleep(2)
    if xx=='A':
        n=1
    elif xx>=valori[1] and xx<=valori[6]:
        n=int(valori[x])
    elif xx=='J' or xx=='Q' or xx=='K':
        n=0.5
#    print("Valore",n)
    matta.append(cartaestratta)
#    print("matta=",matta)
    return n

print("\nGIOCO DEL 7½")
print("\n")
time.sleep(3)

mazzo=mazzoeshuffle()   #crea il mazzo e lo mischia

matta=[]
while True:
   
    o=0.0
   
#    numcarta=19
   
    numcarta,mazzo=movimentocarte(mazzo)
    n=valorecarta(numcarta)
     
    while True:
        a=input("Vuoi un'altra carta? s/n ")
        if a=="s":
            numcarta,mazzo=movimentocarte(mazzo)
   #         print("num carta",numcarta)
            n+=valorecarta(numcarta)
           
            if n>7.5:
                print("\nHai sballato!\n")
                break
            elif n==7.5:
                print("\nHai fatto 7½!\n")
                numcarta,mazzo=movimentocarte(mazzo)
                o,mazzo=estrazionecartamazziere(mazzo,numcarta,n)
                break
        elif a=="n":
            numcarta,mazzo=movimentocarte(mazzo)
            o,mazzo=estrazionecartamazziere(mazzo,numcarta,n)
            break
        else:
            continue
 #   print("mia carta=",n,"mazziere=",o)
    if o>7.5 and o>=n:
        print("\nIl mazziere ha sballato!\n")
        time.sleep(2)
    elif o<=7.5 and o>=n:
        print("\nHai perso!\n")
        time.sleep(2)
    elif o<n and n<=7.5:
        print("\nHai vinto!\n")
        time.sleep(2)
    elif o==7.5 and n==7.5:
        print("\nIl mazziere ha vinto\(ma c'è da sistemare per l'amblé\)")
   
    if 19 in matta:
        print("E'uscita la matta... mischio il mazzo!\n")
        mazzo=mazzoeshuffle()
        matta=[]
        time.sleep(5)

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:Foto carte da gioco
« Risposta #7 il: Dicembre 06, 2020, 11:09 »
Ciao :)

Il bello della programmazione è che le cose si possono affrontare in mille modi diversi, ovviamente su di un codice in corso di definizione non è bene dare "pareri", anche se, a dire il vero, non mi garbano molto due "while True" annidati.

... Per altro, guardando il Tuo codice mi è venuta in mente una possibile variante che magari potrebbe essere usata, rivoluzionerebbe, però, il codice steso, mi riferisco alla definizione del mazzo, ove magari userei una lista di dizionari, una cosa così :

>>> mazzo = []
>>> semi = ['Coppe', 'Denari', 'Mazze', 'Spade']
>>> nomi = ['Asso', 'due', 'tre', 'quattro', 'cinque',
'sei', 'sette', 'Fante', 'Cavallo', 'Re']
>>> for seme in semi:
    for voce in enumerate(nomi, start=1):
        carta = {}
        carta['seme'] = seme
        carta['nome'] = voce[1]
        if voce[0] in [8, 9, 10]:
            carta['val'] = 0.5
        else:
            carta['val'] = float(voce[0])
        mazzo.append(carta)

>>> print(len(mazzo))
40
>>> print(mazzo)
[{'seme': 'Coppe', 'nome': 'Asso', 'val': 1.0}, {'seme': 'Coppe', 'nome': 'due', 'val': 2.0}, {'seme': 'Coppe', ...

l'utilizzo di un dizionario, magari, permetterebbe di risparmiare un po' di cicli, contenendo la carta stessa il suo valore, limitandosi a riassegnare il valore della "matta" a quello scelto dal giocatore, potrebbe, forse, anche facilitare i processi di rappresentazione, una cosa così :
>>> import random
>>> random.shuffle(mazzo)
>>> print(mazzo[0])
{'seme': 'Mazze', 'nome': 'due', 'val': 2.0}
>>> def dai_carta():
global mazzo
return mazzo.pop(0) if len(mazzo) else None

>>> carta = dai_carta()
>>> carta
{'seme': 'Mazze', 'nome': 'due', 'val': 2.0}
>>> carta = dai_carta()
>>> carta
{'seme': 'Coppe', 'nome': 'Re', 'val': 0.5}
>>> len(mazzo)
38
>>> print('%s di %s, valore = %.1f' % (carta['nome'], carta['seme'], carta['val']))
Re di Coppe, valore = 0.5
>>>

Sarebbe, anche, più semplice, con un dizionario, associare alla "carta" i valori per l'eventuale "immagine", siano essi i caratteri indicati da @RicPol od anche dei riferimenti a file.
... è solo un suggerimento di approccio diversificato che mi è venuto li, tieni presente (e scusa se uso il tipo "Napoletane", con cui ho familiarità) consideralo solo come una possibile via da esplorare ;)