【Pythonでゲーム作成】ヌメロン作ってみた
こんばんは、アリカです。
本日は数当てゲームのヌメロン(Numer0n)を作ってみたいと思います。
昔テレビでも放送されていましたが、皆さんはヌメロンというゲームはご存知でしょうか。
以下でルールを説明します。
ルールの確認
【前提】
今回は対戦形式ではなく、ソロプレイで実装していきます。
【ルール】
0-9まで数字を使って、3桁の番号を作成します。今回は重複を無しとするため、「522」「333」といった同じ数字を2つ以上使用した番号は作れません。
プレイヤーは番号を推理して回答します。数字と桁が合っていた場合は「EAT」(イート)、数字は合っているが桁は合っていない場合は「BITE」(バイト)となります。
例として番号が「374」、回答した番号が「834」であった場合は、3桁のうち「4」は桁の位置が合致しているためEAT、「3」は数字自体は合っているが桁の位置が違うためBITE。
EATが1つ、BITEが1つなので「1EAT,1BITE」となります。
YouTubeにて、公式ドキュメントを使って基礎文法を解説しています。
体系的に基礎を学びたい方は是非ご活用ください!
作ってみよう
それでは実際に作成していきます。
今回はターミナル上で動くようにします。
全体のコードを先に載せておきます。
import random
num=[0,1,2,3,4,5,6,7,8,9]
ans=random.sample(num,3)
answer=[]
count=1
while True:
while True:
print("ヌメロン"+str(count)+"回目の挑戦!")
a=input("3桁の異なる数字を入力してださい>>\n")
for i in range(3):
answer.append(int(a[i]))
if a[0]==a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
elif a[0]==a[1] or a[0]==a[2] or a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
else:
break
EAT=0
BITE=0
for i in range(3):
if answer[i]==ans[i]:
EAT+=1
elif answer[i] in ans:
BITE+=1
else:
pass
print(str(answer)+" 判定:"+str(EAT)+"EAT,"+str(BITE)+"BITE\n")
answer.clear()
if EAT==3:
print("お疲れ様でした!")
break
else:
count+=1
動作確認
以下で順を追って説明します。
最初に答えとなる3桁の数字をrandom.sample(num,3)で作ります。
import random
num=[0,1,2,3,4,5,6,7,8,9]
ans=random.sample(num,3)
今回はルールで異なる3桁の数字にしたので、random.sampleとしました。
重複ありの場合は、ans=random.choices(num,k=3)とします。
次にwhile True の無限ループで3桁の数字に重複があるとループを抜けられないようにします。
重複禁止のコードは必須ではありませんが、加えて入力した数字が3桁でない場合のコードを書くのもありですね。
while True:
print("ヌメロン"+str(count)+"回目の挑戦!")
a=input("3桁の異なる数字を入力してださい>>\n")
for i in range(3):
answer.append(int(a[i]))
if a[0]==a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
elif a[0]==a[1] or a[0]==a[2] or a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
else:
break
※1.数字の入力に戻る場合はanswer.clear()で答えをクリアする必要があります。
※2.ところどころにある\nは改行のコードです。
無限ループを抜けたら判定に移ります。
EAT=0
BITE=0
for i in range(3):
if answer[i]==ans[i]:
EAT+=1
elif answer[i] in ans:
BITE+=1
else:
pass
print(str(answer)+" 判定:"+str(EAT)+"EAT,"+str(BITE)+"BITE\n")
answer.clear()
条件は
answer[i]==ans[i] 数字と位置が完全一致
answer[i] in ans 答えの中に入力した文字が存在する
pass 何もしない
となります。
最後に無限ループで答えが出るまで抜けられないようにして完成です。
while True:
while True:
print("ヌメロン"+str(count)+"回目の挑戦!")
a=input("3桁の異なる数字を入力してださい>>\n")
for i in range(3):
answer.append(int(a[i]))
if a[0]==a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
elif a[0]==a[1] or a[0]==a[2] or a[1]==a[2]:
print("異なる数字を入力してね\n")
answer.clear()
else:
break
EAT=0
BITE=0
for i in range(3):
if answer[i]==ans[i]:
EAT+=1
elif answer[i] in ans:
BITE+=1
else:
pass
print(str(answer)+" 判定:"+str(EAT)+"EAT,"+str(BITE)+"BITE\n")
answer.clear()
if EAT==3:
print("お疲れ様でした!")
break
else:
count+=1
ちなみにヌメロンがTVでやっていたのは約10年前でした。
時間が流れるのは早いですね :-<
最後に
本日はここまでとなります。
条件分岐を学ぶにはちょうど良かった気がします。
応用としてターミナル以外の画面上で動かしてみてもいいかもしれません。
最後まで読んで頂きありがとうございました!
スキ・フォロー・コメントお待ちしております。
この記事が気に入ったらサポートをしてみませんか?