Numer0n avec des objets fabriqués avec Python

Ceci est mon deuxième message sur Qiita. Je vous remercie.

Cette fois, nous avons implémenté ce jeu "Numer0n", qui dominait autrefois le monde, en Python.

1 Qu'est-ce que Numer0n?

Cité de Wikipedia:

Chaque joueur utilise 3 cartes sur 10 avec des nombres de 0 à 9 pour créer un nombre à 3 chiffres. Puisqu'il n'y a pas de duplication de cartes, vous ne pouvez pas créer un numéro qui utilise deux ou plusieurs des mêmes nombres tels que "550" et "377". Le premier joueur devine le numéro de l'adversaire et appelle. L'autre partie compare le numéro appelé avec son propre numéro et annonce dans quelle mesure le numéro appelé correspond. Si les nombres et les chiffres correspondent, ce sera "EAT", et si les nombres correspondent mais que les chiffres ne correspondent pas, ce sera "BITE". Par exemple, si le numéro de l'autre correspondant est "765" et que le numéro appelé est "746", "7" des trois chiffres est EAT car les positions des chiffres correspondent et "6" est le numéro lui-même. BITE car il correspond mais la position du chiffre est différente. Puisqu'il y a un EAT et un BITE, il devient "1EAT-1 BITE". Ceci est répété par la première attaque et la deuxième attaque, et le joueur qui frappe complètement le numéro de l'adversaire en premier (s'il est à 3 chiffres, laissez l'adversaire annoncer 3EAT) gagne.

Cette fois, nous avons implémenté un programme qui vous permet de spécifier le nombre de chiffres (même pour ceux qui ne se contentent pas de 3 chiffres).

2 Programme de base

Numer0n_Basic.py


#Numer0n_Basic
import random

#Le nombre à faire l'objet est décidé
proper = 0
while proper == 0:
    print("Digit?")
    #Déterminez le nombre de chiffres
    D = int(input())
    N = []
    #Le nombre de chiffres doit être compris entre 1 et 10 chiffres
    if 1 <= D <= 10:
        while len(N) < D:
            n = random.randint(0,9)
            if n in N:
                pass
            else:
                N.append(n)
        proper += 1
    else:
        print("Improper.")

#Le jeu de devinettes a commencé
count = 1
eat = 0
bite = 0

while eat < D:
    print("Call " + str(count) )
    call = input()
    #Prendre une décision lorsque l'appel est correct
    if len(call) == D and len(set(call)) == len(call):
        eat = 0
        bite = 0
        for i in range(D):
            for j in range(D):
                if str(N[i]) == call[j]:
                    if i == j:
                        eat += 1
                    else:
                        bite += 1
        if eat == D:
            print(str(D) + " EAT")
            #Un effet spécial ne sera ajouté que lorsqu'un appel est effectué.
            if count == 1:
                print("ONE CALL")
            else:
                print("Numer0n in " + str(count) + " Calls")
        else:
            print(str(eat) + " EAT " + str(bite) + " BITE")
            count += 1
    #Correspondance en cas de Miss Call
    else:
        print("Again!")

En changeant le nombre de chiffres «D», vous pouvez défier le jeu de deviner des nombres de 5 chiffres ou plus en plus des 3 chiffres et 4 chiffres qui apparaissaient dans la famille d'origine. Puisqu'il s'agit essentiellement d'un jeu que vous n'attaquez que, vous ajoutez un élément d'attaque de score en affichant le nombre d'appels tels que "combien de fois vous avez été touché". Visez UN APPEL!

Dans ce programme, le nombre original «N» est de type «int» et le numéro entré «call» est de type string, et dans la partie comparaison, «N» est converti en type string et le jugement est effectué. Je vais. La raison pour laquelle je fais une chose aussi gênante est à cause du ** "item" ** que je vais implémenter plus tard.

3 éléments

Ce qui distingue Numer0n de Hit and Blow, c'est la présence de ** items **.

Dans Numer0n, il existe divers objets qui peuvent vous aider à attaquer et à vous défendre. Cette fois, nous allons implémenter trois d'entre eux, des éléments d'attaque.

3.1 HIGH & LOW

Vous pouvez connaître "HIGH (5-9)" ou "LOW (0-4)" pour tous les chiffres de l'autre correspondant. L'autre partie doit déclarer dans l'ordre à partir du chiffre de gauche (exemple: si "809", "HIGH (8), LOW (0), HIGH (9)"). Vous pouvez restreindre les chiffres dans une certaine mesure dans les premières étapes, et cela peut être utile pour fixer les chiffres dans les étapes finales. (Wikipédia)

Un élément puissant qui peut réduire tous les chiffres. Pour 3 chiffres, vous pouvez d'abord utiliser HIGH & LOW pour réduire les candidats de 720 à 100 au pire, et, espérons-le, 60.

Si vous implémentez cet élément en Python, il ressemblera à ceci.

high_and_low.py


#HIGH and LOW
N = [int(input()) for _ in range(3)]
HL = ""
for i in range(len(N)):
    if N[i] <= 4:
        HL += 'L '
    else:
        HL += 'H '
print(HL)

La saisie d'un nombre pour chaque chiffre renvoie le nombre HIGH / LOW.

contribution 5 2 9

production H L H

C'est facile car il suffit de comparer la taille avec 4.

3.2 SLASH

Vous pouvez demander le "numéro de barre oblique", qui est le nombre maximum utilisé par l'autre partie moins le nombre minimum. Par exemple, s'il est "634", le nombre maximum est "6" - le nombre minimum est "3" = le numéro de barre oblique est "3". Si le numéro de barre oblique est "9", il y a seulement une possibilité que le nombre maximum soit "9" et le nombre minimum est "0", donc l'utilisation de 0 et 9 est confirmée. Aussi, s'il vaut "2", on comprend forcément qu'il est composé de trois types consécutifs de nombres tels que "012" et "123". Selon la façon dont vous l'utilisez, vous pouvez voir beaucoup de gens et vous pouvez l'utiliser comme un moyen de dissuasion pour "utiliser 9 et 0" ou "utiliser des nombres consécutifs" simplement en le maintenant sans l'utiliser. Il a été nommé parce qu'il peut «jeter» les modèles d'utilisation possibles des nombres. (Wikipédia)

C'est également un élément qui vous permet de réduire le nombre de l'autre partie à la fois. Il est plus difficile à utiliser que HIGH & LOW, mais si vous l'utilisez dans cette situation, vous pouvez déterminer le nombre que vous utilisez à la fois. En particulier, comme vous pouvez le voir dans la partie citée, l'effet est remarquable pour des arrangements spécifiques tels que "combinaison de 9 et 0".

Si vous implémentez cet élément en Python, il ressemblera à ceci.

slash.py


#SLASH
N = [int(input()) for _ in range(3)]
SN = max(N) - min(N)
print(SN)

Si vous entrez un nombre pour chaque chiffre, le numéro de barre oblique de ce nombre est renvoyé.

contribution 5 2 9

production 7

Ce n'est pas si grave non plus. la fonction max est la meilleure! À propos, le nombre de barre oblique de 7 est réduit aux motifs de «7,0 et le nombre entre», «8,1 et le nombre entre» et «9,2 et le nombre entre». En fonction du résultat de l'appel jusqu'à présent, vous pouvez éliminer la possibilité d'ici.

3.3 TARGET

Vous pouvez spécifier l'un des 10 numéros différents à demander à l'autre personne. Si le numéro est inclus dans la combinaison de l'autre partie, on sait également de quel chiffre il se trouve. En particulier, si vous spécifiez "un nombre dans l'état BITE que vous pouvez voir qu'il est inclus mais vous ne savez pas de quel chiffre il s'agit", vous pouvez savoir exactement où se trouve le chiffre. Au contraire, si le nombre que vous avez demandé n'est pas inclus, vous pouvez affiner en utilisant d'autres nombres. (Wikipédia)

Cet objet est utilisé du milieu à la fin du jeu. Il est efficace pour réduire la possibilité qu'il reste peu de choses.

Si vous implémentez cet élément en Python, il ressemblera à ceci.

target.py


#TARGET
N = [int(input()) for _ in range(3)]
TN = int(input())
judge = 0
for i in range(len(N)):
    if N[i] == TN:
        print("Place " + str(i+1))
        judge = 1
if judge == 0:
    print("Nothing.")

Entrez un nombre, puis entrez un «TN» (c'est une abréviation pour NUMÉRO CIBLE) parmi 10 types de nombres, et s'il est inclus, sa position (quel nombre à gauche), s'il n'est pas inclus, rien. Retour.

contribution 5 2 9

Objectif numéro 1 2

Sortie 1 Place 2

Objectif numéro 2 7

Sortie 2 Nothing.

Vous pouvez utiliser break, mais ce n'est pas grave car vous n'avez qu'à tourner la boucle 10 fois au maximum.

Numer0n avec 4 articles

Voici le programme Numer0n qui intègre les trois éléments ci-dessus.

Comme règle

Numer0n_Item.py


#Numer0n_Item
import random

#Décidez du nombre qui fera l'objet
proper = 0
while proper == 0:
    print("Digit?")
    #Le nombre de chiffres est décidé
    D = int(input())
    N = []
    #Le nombre de chiffres doit être compris entre 1 et 10 chiffres
    if 1 <= D <= 10:
        while len(N) < D:
            n = random.randint(0,9)
            if n in N:
                pass
            else:
                N.append(n)
        proper += 1
    else:
        print("Improper.")

#Le jeu de devinettes a commencé
count = 1
eat = 0
bite = 0
#Les articles ne peuvent être utilisés qu'une seule fois au total
item = 1
while eat < D:
    print("Call " + str(count) )
    call = input()
    #Prendre une décision lorsque l'appel est correct
    if len(call) == D and len(set(call)) == len(call):
        eat = 0
        bite = 0
        for i in range(D):
            for j in range(D):
                if str(N[i]) == call[j]:
                    if i == j:
                        eat += 1
                    else:
                        bite += 1
        if eat == D:
            print(str(D) + " EAT")
            #Un effet spécial ne sera ajouté que lorsqu'un appel est effectué.
            if count == 1:
                print("ONE CALL")
            else:
                print("Numer0n in " + str(count) + " Calls")
        else:
            print(str(eat) + " EAT " + str(bite) + " BITE")
            count += 1
            
    #HIGH AND LOW
    elif call == "HIGH AND LOW":
        if item == 1:
            HL = ""
            for i in range(len(N)):
                if N[i] <= 4:
                    HL += 'L '
                else:
                    HL += 'H '
            print(HL)
            item = 0
        else:
            print("Already used.")
                
    #SLASH
    elif call == "SLASH":
        if item == 1:
            SN = max(N) - min(N)
            print(SN)
            item = 0
        else:
            print("Already used.")
    
    #TARGET
    elif call == "TARGET":
        if item == 1:
            print("TARGET Number?")
            TN = int(input())
            judge = 0
            for i in range(len(N)):
                if N[i] == TN:
                    print("Place " + str(i+1))
                    judge = 1
            if judge == 0:
                print("Nothing.")
            item = 0
        else:
            print("Already used.")
    #Correspondance en cas de Miss Call
    else:
        print("Again!")

La principale raison pour laquelle j'ai reçu «call» sous forme de chaîne était parce que je voulais déclarer le nom de l'élément afin qu'il puisse être utilisé. Il n'est pas possible de gérer les fluctuations de notation telles que «TARGET» et «Target», «target», mais pardonnez-le.

5 impressions

Il y avait beaucoup de gens qui ont implémenté Numer0n en Python dans l'article Qiita, mais je n'ai pas implémenté l'élément, donc je l'ai essayé moi-même. Je suis content que ça se soit bien passé.

Cela semble intéressant même dans un jeu de personne à personne. Ensuite, il semble que la signification de l'existence de DOUBLE, SHUFFLE et CHANGE, qui n'ont pas été implémentées cette fois, augmentera. Le problème est que cela semble simplement ennuyeux, et ce sera un problème si l'autre partie peut voir la sortie, il semble donc difficile de l'implémenter.

Le jeu que le processeur attaque également semble être difficile avec mes capacités, donc si quelqu'un est intéressé, faites-le.

Nous apprécions les commentaires tels que les impressions de jeu et les améliorations apportées.

Eh bien.

Recommended Posts

Numer0n avec des objets fabriqués avec Python
Grattage au sélénium en Python
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Débogage avec pdb en Python
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
J'ai fait un blackjack avec Python.
Othello fait avec python (comme GUI)
J'ai créé wordcloud avec Python.
Reconnaissance des nombres dans les images avec Python
J'ai fait un jeu de frappe simple avec tkinter de Python
Tester avec des nombres aléatoires en Python
Bases de SNS Python faites avec Flask
GOTO en Python avec Sublime Text 3
Scraping avec Selenium en Python (Basic)
Analyse CSS avec cssutils en Python
Ouvrez UTF-8 avec BOM en Python
J'ai fait une loterie avec Python.
Utiliser rospy avec virtualenv dans Python3
Développement de jeux Othello avec Python
Utiliser Python mis en pyenv avec NeoVim
Heatmap avec dendrogramme en Python + matplotlib
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
Lire des fichiers en parallèle avec Python
Générer un mot de passe pour le manuel avec python
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
J'ai créé un démon avec Python
Démarrez avec Python avec Blender
Travailler avec des images DICOM en Python
Différence de comportement du cadre transparent réalisé avec tkinter dans pyinstaller [Python]
Écrire de la documentation dans Sphinx avec Python Livereload
Obtenez des données supplémentaires vers LDAP avec python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Essayez de vous connecter à qiita avec Python
Test de stress avec Locust écrit en Python
Python3> dans le mot clé> Vrai avec une correspondance partielle?
Contrôle exclusif avec fichier de verrouillage en Python
Surveillance des appareils effectuée par Python On-box de IOS-XE
J'ai fait un programme de gestion de la paie en Python!
Type de téléchargement de partage HTTP réalisé avec Python
Essayez de travailler avec des données binaires en Python
J'ai fait un compteur de caractères avec Python
Dessinez Nozomi Sasaki dans Excel avec python
Conseils pour gérer les binaires en Python
Afficher Python 3 dans le navigateur avec MAMP
Comment utiliser BigQuery en Python
Classe Trump en Python (avec comparaison)
Gérer les "années et mois" en Python
Traiter plusieurs listes avec for en Python
Remplacer non-ASCII par des expressions régulières en Python
Un serveur Web de ligne (avec CGI) en python
Commençons avec TopCoder en Python (version 2020)
Traitez facilement des images en Python avec Pillow