当前位置:网站首页>Programme de jeu de cartes - confrontation homme - machine

Programme de jeu de cartes - confrontation homme - machine

2022-07-06 13:47:00 Programmation Lin Daiyu

Écrire un programme de jeu de cartes,Le joueur est un homme - machine.,Chacun son tour.12Une carte.,La règle est qu'une seule carte peut être jouée à la fois,Les dés déterminent qui joue en premier..Un grand nombre de points tient un petit nombre de points..Ne jouez pas aux cartes si vous ne pouvez pas contrôler l'autre partie,Laissez l'autre jouer..La partie qui termine la carte gagne..La taille du poids est spécifiée comme suit:(Du grand au petit):13,12,11,10,9,8,7,6,5,4,3,2,1.Coloration:Carré,Des carottes.,Pique,Fleur de prune.

L'organigramme général est le suivant::

Le diagramme de rotation est le suivant::

Les variables globales sont les suivantes::

jk=[]       #Un jeu de cartes.

cp=[]       #Carte dans la main de l'ordinateur

ps=[]       #Une carte entre les mains d'un homme

dt=[]       #Cartes déjà jouées sur la table

n=random.randint(0,1)  #Qui joue?,0:Carte informatique,1:Les gens jouent aux cartes.

m=0         #Mode de licence,0Première sortie,1:Suivez les cartes.

Le module de fonction est défini comme suit::

Nom de la fonction

Description de la fonction

Paramètres

Valeur de retour

Autres Notes

createjk()

Produire une paire de cartes à jouer et mélanger , Placer les cartes générées dans la Liste jkMoyenne

Aucune

Aucune

dest()

Fonction de licence, De chaque côté 12Une carte., Envoyer à la liste cp( Locomotive )Etps( Côté humain )Moyenne.

Aucune

Aucune

psplay()

La fonction de l'homme qui joue une carte une fois

Aucune

Aucune

cpplay()

La fonction de l'ordinateur qui fait une carte une fois

Aucune

Aucune

play()

Fonction globale de la carte , Et gagner ou perdre

Aucune

Aucune

Fonction principale

Appelez les fonctions ci - dessus pour compléter le jeu

Aucune

Aucune

Code(Python): 

Code avant amélioration :

import random 
# Les variables globales ne peuvent pas être trop définies , Si nécessaire , Sinon, c'est dur à entretenir 
jk=[]  # Un jeu de cartes.
cp=[]  #Carte dans la main de l'ordinateur
ps=[]  #Une carte entre les mains d'un homme
dt=[]  # Cartes déjà jouées sur la table 
n=random.randint(0,1)  #Qui joue?,0:Carte informatique  1:Les gens jouent aux cartes.
m=0  #Mode de licence,0Première sortie,1Suivez les cartes.
def createjk():  # Produire une paire de cartes à jouer et mélanger 
    color=['Coeur rouge','Carré','Pique','Fleur de prune']
    for c in color:   # Produire une paire de cartes ,Avec un double cycle, Chaque décor produit 1-13Nombre de
        for j in range(1,14):
            jk.append((c,j))  # Ajouter la carte résultante à la liste 
    for i in range(10000):  #Mélanger les cartes
        x1=random.randint(0,51) #Produire0-51Total52Nombre aléatoire
        x2=random.randint(0,51)
        while (x1==x2):  #Juge d'abordx1Etx2égal ou non, Si elle est égale, donnez - la. x2 Assigner une autre valeur , Jusqu'à ce qu'ils ne soient pas égaux 
            x2=random.randint(0,51)
        jk[x1],jk[x2]=jk[x2],jk[x1]  #Oui.x1Etx2Echange,C'est - à - dire mélanger les cartes
def dest():   #Fonction de licence,destributeDistribution
    for i in range(12):  #Bien que52Une carte., Mais seulement envoyé 24Zhang.
        x=jk.pop()  #pop()La méthode est utilisée pour supprimer un élément de la liste(Par défaut au dernier élément),Et renvoie la valeur de cet élément
        y=jk.pop()  # Notez qu'il faut d'abord enlever ,Retour en arrière
        if len(cp)==0:  # Licence d'ordinateur 
            cp.append(x)
        else:  # Insertion de l'ordre de conservation ,Insérer une liste, Et dans l'ordre approprié 
            k=len(cp)-1  #Longueur moins1 Est l'indice du dernier élément de la liste 
            while(k>=0 and cp[k][1]>x[1]):  #cp[k][1]Etx[1]Dans[1] On ne peut pas économiser , Parce qu'il y a deux autres éléments dans chaque Tuple de la Liste ,No0 L'élément est le décor ,No1 Les éléments sont des chiffres sur la carte 
                k=k-1
            cp.insert(k+1,x)  #Cycle de sortie,C'est - à - dire:k<0Oucp[k][1]<=x[1],Sik<0,C'est - à - dire:-1,DescriptionxC'est le plus petit, Et l'insérer dans cp[0]Division;Sicp[k][1]<=x[1],Parce quek=k-1, Ensuite, ajoutez 
        if len(ps)==0:  # Les cartes pour les gens , Même algorithme que pour la licence d'ordinateur 
            ps.append(y)  
        else:
            k=len(ps)-1
            while(k>=0 and ps[k][1]>y[1]):
                k=k-1
            ps.insert(k+1,y)
def psplay(): #Les gens jouent aux cartes.
    global m  # Assurez - vous d'affirmer qu'il s'agit d'une variable globale ,SinonmEtn Sont considérés comme des variables locales  
    global n
    print("*****************************************")
    print(" Cartes jouées :")
    print(dt)  # Sortie des cartes sur le Bureau 
    print(" Les cartes dans vos mains :")
    L=len(ps)
    s=''
    for i in range(L): # La boucle ajoute les cartes entre les mains de l'homme sDans la chaîne
        s+='%d:%s%d,'%(i+1,ps[i][0],ps[i][1]) # En fait, il peut aussi produire directement ps, Mais il n'y a pas d'étiquette. 
    s+='0:Non.'
    print(s)  #Oui.sProduits
    while(True):
        k=int(input('Sortez, s'il vous plaît.'))
        if k==0:  #Si vous entrez0, Je ne peux pas me permettre ,Ordrem=0,Première sortie,Et sortir du cycle
            m=0
            break
        elif (k>0 and k<=L) and (m==0 or (m==1 and ps[k-1][1]>dt[-1][1])):
        #Sinon,Sik Entrée dans une plage raisonnable , Et c'est la première fois qu'une carte est jouée ou qu'une carte est jouée et k La carte correspondante est plus grande que la dernière carte correspondante sur le Bureau ,Faites ce qui suit
        #Attention!,Il faut jugermValeur de, Parce que pour décider s'il faut jouer avec ou pour la première fois , Pour la première fois , Plus de “ Plus grande que la dernière carte sur le Bureau ”
            dt.append(ps[k-1])  # Si les conditions sont remplies, la licence est délivrée. , Ajoutez cette carte à votre liste de bureau 
            del(ps[k-1])  # Et retirer cette carte de la main de l'homme 
            m=1  #Et changerm=Valeur de, Faire de l'étape suivante un suiveur 
            break
def cpplay():
    global m
    global n
    k=0
    if m==0:  #JugementmValeur de, Pour la première fois 
        print("Sortie de l'ordinateur")  # Prévenez la personne 
        print(cp[0])  # Et la première carte dans la main de l'ordinateur , C'est - à - dire la sortie minimale de la carte , Prévenez la personne 
        dt.append(cp[0])  # Ajoutez la carte que vous avez jouée à la liste de bureau 
        del(cp[0])  # Et retirer cette carte de l'ordinateur 
        m=1  #Et changerm=Valeur de, Faire de l'étape suivante un suiveur 
    else:  # Si c'est une carte 
        k=0  #Ordrek=0, Commencez par la première carte et cherchez une carte plus grande que celle sur le Bureau. 
        while(k<len(cp) and dt[-1][1]>=cp[k][1]):  #C'est sûr.k Dans la gamme et à la recherche de cartes plus grandes que la dernière carte sur le Bureau 
            k+=1
        if k==len(cp):  # Déterminer si la condition de sortie du cycle est qu'aucune carte admissible n'a été trouvée 
            print(" L'ordinateur ne peut pas se permettre ")
            m=0
        else:   # La condition pour juger de la boucle de sortie est que les cartes qualifiées sont trouvées 
            print(" L'ordinateur est sorti ")
            print(cp[k])
            dt.append(cp[k])
            m=1
def play():  #Commence à jouer.
    global m
    global n
    n=random.randint(0,1)  # Décider qui sort en premier 
    m=0  #Première sortie
    while(True):
        if n==0:  #Sin==0, L'ordinateur sort en premier 
            cpplay()
            if len(cp)==0:  # Si l'ordinateur a fini de jouer ,La longueur est0, Description l'ordinateur termine la carte en premier , C'est - à - dire que l'ordinateur gagne 
                print("L'ordinateur a gagné.")
                break
        else:  #Sinonn==1,Les gens jouent aux cartes.
            psplay()
            if len(ps)==0:  # Si l'ordinateur a fini de jouer ,La longueur est0, Description l'ordinateur termine la carte en premier , C'est - à - dire que l'ordinateur gagne 
                print("L'homme a gagné.")
                break
        n=(n+1)%2  # Chaque fois que les cartes sont sorties ,Oui.n Remplacer la valeur de , Jouer contre l'autre 
    # Si la boucle est sortie , Ça veut dire qu'une partie a gagné , Pour jouer aux cartes 、Ordinateur、Les gens、 Toutes les cartes sur le Bureau sont vides 
    jk.clear()  # Videz chaque liste de programmes après chaque jeu , Pour éviter d'affecter le prochain jeu 
    cp.clear()
    ps.clear()
    dt.clear()
#Procédure principale
c='y'  #Initialisationc, Commencez la première manche en entrant dans le cycle suivant 
while c=='y':
    createjk()  # Produire et mélanger des cartes 
    dest()    #Les licences
    play()    #Commence à jouer.
    c=input(' Un autre tour ?(y/n)')   
print("Fin du jeu,Au revoir.!")

Résultats des opérations: 

 Code amélioré: 

import random
jk=[]       #Un jeu de cartes.
cp=[]       #Carte dans la main de l'ordinateur
ps=[]       #Une carte entre les mains d'un homme
dt=[]       #Cartes déjà jouées sur la table
n=0         #Qui joue?,0:Carte informatique,1:Les gens jouent aux cartes.
m=0         #Mode de licence,0Première sortie,1:Suivez les cartes.
def showjk(x):  #Afficher la listex Toutes les cartes de poker 
    s=''
    for i in x:
        s+=i[0]+str(i[1])+' '
    return s
def createjk(): # Produire une paire de cartes à jouer , Et mélanger les cartes 
    color=['','','','']
    for c in color:     #Générer une paire de cartes à jouer
        for j in range(1,14):
            jk.append((c,j))
    
    for i in range(10000):      #Mélanger les cartes
        x1=random.randint(0,51)  # Deux cartes au hasard 
        x2=random.randint(0,51)
        while(x1==x2):      # Si les deux cartes sont les mêmes ,Puis extraire à nouveau, Jusqu'à ce que ces deux cartes soient différentes 
            x2=random.randint(0,51)
        jk[x1],jk[x2]=jk[x2],jk[x1]     # En échange de ces deux cartes 
        
def dest():       #Fonction de licence,destribution Distribution, C'est - à - dire que la licence signifie 
    for i in range(12):
        x=jk.pop()      # Dessinez une carte pour la variable x, Les cartes qui seront distribuées à la machine ——ListecpMoyenne
        y=jk.pop()      # Dessinez une carte pour la variable y, Les cartes qui seront distribuées à la machine ——ListepsMoyenne
        # Voici l'insertion de l'ordre de conservation , Insérez chaque carte dans l'ordre du plus petit au plus grand 
        if len(cp)==0:  #Si la listecpC'est vide.,Insérer directement
            cp.append(x)
        else:
            k=len(cp)-1  #Trouver la listecp Position maximale de l'indice pour 
            while(k>=0 and cp[k][1]>x[1]):#  Rechercher de l'arrière vers l'avant , Le premier point trouvé est inférieur à x Indice du nombre de points ,Si ce n'est pas le caskLa valeur de-1
                k=k-1
            cp.insert(k+1, x)   #Oui.xInsérer dansk+1Cette position
            #Voici commenty Une carte insérée dans la main d'un homme , L'algorithme est le même que ci - dessus 
        if len(ps)==0:
            ps.append(y)
        else:
            k=len(ps)-1
            while(k>=0 and ps[k][1]>y[1]):
                k=k-1
            ps.insert(k+1, y) 
def psplay(): # Un homme joue une carte 
    global m
    global n
    print()
    print('Bureau:'+showjk(dt))
    print(' Les cartes dans vos mains :')
    L=len(ps)
    s=''
    for i in range(L):
        s=s+'%d:%s%d, '%(i+1,ps[i][0],ps[i][1]) # Montrer toutes les cartes dans la main de l'homme , Chaque carte est précédée d'un numéro de série 
    s+='0:Non.'   
    print(s)            #Afficher le menu
    while(True):        # Ce cycle contrôle la délivrance des licences et garantit la légalité de la délivrance des licences 
        k=int(input(' S'il vous plaît, faites vos cartes '))  #Recevoir l'entrée de l'utilisateur
        if k==0:        # Indique que l'utilisateur n'émet pas de cartes 
            m=0         #m=0 Est pour le prochain cycle , Laissez l'ordinateur inférieur jouer la première fois 
            break
        # La phrase suivante détermine si la carte jouée est légale ,0<k<=L Contrôle de l'entrée de l'utilisateur k Doit être dans une plage facultative 
        #Sim==0 Les cartes peuvent être jouées à volonté ,Sim==1 La carte doit être plus grande que la dernière carte sur le Bureau 
        elif (0<k<=L) and (m==0 or (m==1 and ps[k-1][1]>dt[-1][1])): 
            dt.append(ps[k-1])  # Ajouter une carte légalement jouée à la liste des cartes jouées dtMoyenne
            del(ps[k-1])        #Inps Supprimer les cartes jouées 
            m=1                 # Préparation des instructions pour le prochain cycle , Laissez l'ordinateur suivre les cartes 
            break
def cpplay():   # L'ordinateur joue une carte 
    global m
    global n
    k=0
    if m==0:    #Première sortie, Les cartes peuvent être jouées à volonté , La plus petite carte de la main moyenne 
        # Les cartes jouées sont affichées ci - dessous. , Parce que c'est la première fois , C'est la plus petite carte     
        print('Sortie de l'ordinateur:'+showjk([cp[0]]))      
        dt.append(cp[0])# Ajouter les cartes jouées à la liste des cartes jouées dtMoyenne
        del(cp[0])      #Decp La liste sera jouée et supprimée 
        m=1             # Réglez la façon dont les joueurs de la prochaine ronde jouent aux cartes comme suit 
    else:               # Cette branche est m==1Situation, L'ordinateur doit suivre les cartes 
        k=0
        # La boucle suivante est la plus petite carte trouvée dans la main de l'ordinateur qui est plus grande que la carte de la ronde précédente 
        while(k<len(cp) and dt[-1][1]>=cp[k][1]): #kDe0 Commencez à regarder en arrière 
            k+=1
        if k==len(cp):  # S'il est hors de portée, il n'y a pas de carte plus grande que celle jouée au dernier tour. 
            print(' L'ordinateur ne peut pas se permettre ')
            m=0
        else:
            print(' L'ordinateur est sorti '+showjk([cp[k]]))
            #print(cp[k])        # Jouer les cartes trouvées 
            dt.append(cp[k])    # Ajouter à la liste des cartes jouées dtMoyenne   
            del(cp[k])          #DecpSupprimer la Liste
            m=1                 #ParamètresmDe1, Laissez le prochain tour appuyer sur “Suivez les cartes.” La façon dont les cartes sont jouées 

def play():
    global n
    global m
    n=random.randint(0, 1)  #nAvec0À1 Un nombre aléatoire entre les valeurs attribuées , Décider au hasard qui sort en premier 
    m=0
    print('***************************')
    print('             Le jeu commence')                     # Définir la méthode d'émission initiale comme suit: “Première sortie”
    if n==0:
        print(' La première carte de l'ordinateur de jeu ')
    else:
        print(' Les gens d'abord ')
    while(True):
        if n==0:            #Carte informatique
            cpplay()        # L'ordinateur joue une carte 
            if len(cp)==0:  # Si la main de l'ordinateur est 0, Alors l'ordinateur gagne 
                print('L'ordinateur a gagné.!!!')
                break
        else:
            psplay()        #En ce momentn==1, L'homme joue une carte 
            if len(ps)==0:  # Si la carte entre les mains d'un homme est 0, Alors l'homme gagne 
                print('L'homme a gagné.!!!')
                break
        n=(n+1)%2           #FlipnValeur de,C'est vrai.1 Après le retournement 0, La valeur originale était 0 Après le retournement 1
    jk.clear()
    cp.clear()
    ps.clear()
    dt.clear()
#Procédure principale
c='y'
while c=='y':        
    createjk()
    dest()
    play()
    c=input(' Un autre tour ?(y/n)')
print('Fin du jeu,Au revoir.!') 

C'est un programme intéressant , Les gens et les ordinateurs jouent à tour de rôle , Le premier sorti gagne. , Mais c'est plus simple , C'est juste que les deux parties jouent des cartes plus petites , Il n'y a pas beaucoup de règles dans les jeux de cartes que nous jouons habituellement, comme la lutte contre les propriétaires fonciers. .Et,Dans le programme ci - dessus, Les ordinateurs ne savent pas jouer aux cartes. “Tactique”, Tout ce qu'il sait, c'est qu'il y a des cartes plus grandes dans sa main et qu'elles sortent tout le temps .

Mais tout le monde doit connaître la fameuse confrontation homme - machine ——2017Année5Mois,In Wuzhen weiqi Summit of China Allez., C'est le meilleur champion du monde de go Kojie.- Oui.,Par3Que0Le score total de. L'alpha weiqi est reconnu dans le monde du weiqi comme ayant dépassé le niveau le plus élevé de weiqi professionnel humain ,InGoRatings Dans le classement mondial de go professionnel publié sur le site , Son score était supérieur à celui du joueur d'échecs Ke Jie .

Alpha go(AlphaGo) Versions précédentes , Combinant les partitions de millions d'experts en go humain , Et l'apprentissage intensif pour l'auto - formation .AlphaGoZero Sur cette base, la capacité de .La plus grande différence est, Il n'a plus besoin de données humaines. .C'est - à - dire, Il n'a pas été en contact avec le manuel d'échecs humain au début . L'équipe de R & D l'a laissé jouer aux échecs à volonté. , Et jouer à l'auto - jeu . Selon le chef de l'équipe Alpha go David· Silva (Dave Sliver)Introduction,AlphaGoZero Utiliser de nouvelles méthodes d'apprentissage intensif , Se transformer en professeur . Au début, le système ne savait même pas ce qu'était un go , En commençant par un seul réseau neuronal , .De puissants algorithmes de recherche via les réseaux neuronaux , Il y a eu un jeu d'Ego . Avec l'augmentation de l'auto - jeu , Ajustement progressif du réseau neuronal , Améliorer la capacité de prévoir les prochaines étapes ,Gagner le match. Et encore plus , Au fur et à mesure que l'entraînement s'approfondit , L'équipe Alpha go a découvert ,AlphaGoZero Et a découvert les règles du jeu indépendamment , Et sortir de la nouvelle stratégie , Apporte de nouvelles idées à l'ancien jeu de go .

Plus que ça,6Mois1Jour, Premier étudiant virtuel Original en Chine “Hua Zhibing” A fait ses débuts officiels à Pékin et a étudié au laboratoire d'ingénierie du savoir du Département d'informatique et de technologie de l'Université Tsinghua , Et successivement par un 《Les garçons》Et le réseau rouge.Contrairement à l'homme numérique virtuel moyen, Huazhibing a une capacité d'apprentissage continue ,Peut progressivement“Grandir”,Sans cesse.“Apprendre” Schéma implicite dans les données ,Y compris le texte、La vision、Images,Vidéo, etc., C'est comme si les humains pouvaient apprendre des modèles de comportement à partir de ce qu'ils ont vécu. .Avec le temps, Nouvelles capacités apprises par huazhibing pour de nouveaux scénarios , Intégrer organiquement dans son propre modèle , Pour devenir plus intelligent .

La contre - mesure homme - machine en tant qu'avant - garde de la recherche sur l'intelligence artificielle , Est devenu un point chaud de la recherche dans le domaine de l'intelligence au pays et à l'étranger , À l'avenir, la demande de professionnels de l'intelligence artificielle augmentera progressivement dans l'industrie. , Les étudiants intéressés peuvent en savoir plus sur la confrontation homme - ordinateur ou l'intelligence artificielle. !

原网站

版权声明
本文为[Programmation Lin Daiyu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060917046291.html