見出し画像

【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年前でした。
時間が流れるのは早いですね :-<

最後に

本日はここまでとなります。

条件分岐を学ぶにはちょうど良かった気がします。
応用としてターミナル以外の画面上で動かしてみてもいいかもしれません。

最後まで読んで頂きありがとうございました!
スキ・フォロー・コメントお待ちしております。

この記事が気に入ったらサポートをしてみませんか?