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.
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).
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.
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.
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.
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