こんにちは!tenjiprogrammingです。
以前Javaでのヌメロンの作り方を紹介しましたが、今回はpythonでヌメロンを作る方法を解説します。
短いコードで実装できるので初心者にもおすすめです!
ヌメロンのルール
ヌメロンは、数字を使った数学パズルゲームの一つです。
Javaでヌメロンを作ろう– エンジニアの森
10個の数字を使って3桁の数を作り、相手の答えを当てるゲームです。
数字と桁が一致した場合は“eat”、数字だけが一致した場合は“bite”となります。
あまりピンとこない方はこちらの記事で具体例を出しながらルールを説明しているので参考にしてみてください。
コード紹介
ではpythonでヌメロンを実祖するコードを紹介します。まずは完成したコード全体を見てみましょう!
import random
def generate_number():
""" 3桁の異なる数字を持つ数を生成する """
numbers = list(range(10))
random.shuffle(numbers)
return ''.join(map(str, numbers[:3]))
def evaluate_guess(guess, secret_number):
""" 推測と秘密の数を比較して、eat数とbite数を返す """
eats = sum(guess[i] == secret_number[i] for i in range(3))
bites = sum((c in secret_number) and (secret_number[i] != c) for i, c in enumerate(guess))
return eats, bites
def numeron_game():
secret_number = generate_number()
attempts = 0
while True:
guess = input("3桁の数字を入力してください(各桁は異なる数字): ")
if len(guess) != 3 or not guess.isdigit() or len(set(guess)) != len(guess):
print("無効な入力です。もう一度試してください。")
continue
attempts += 1
eats, bites = evaluate_guess(guess, secret_number)
if eats == 3:
print(f"正解です!{attempts}回の試行で当てました。")
break
else:
print(f"{eats} eat, {bites} bite")
print(f"秘密の数は {secret_number} でした。")
# ゲームを開始する
numeron_game()
コードはこれだけです!これらのコードを少しずつみていきましょう。
ステップ1: ランダムな数字の生成
import random
# ランダムな3桁の数字を生成する関数
def generate_number():
numbers = list(range(10))
random.shuffle(numbers)
return ''.join(map(str, numbers[:3]))
最初のステップは答えの数字となる3桁の数字を生成することです。
Pythonの randomモジュールを使用することでこれを実装します。
この関数では、0から9までのリストを作成し、random.shuffleメソッドでランダムに並び替えます。
次に、最初の3つの数字を選んで文字列に変換します。
この方法により、各桁が異なる3桁の数を生成できます。
ステップ2: ユーザーの予想が合ってるかの判定
ユーザーが入力した推測を評価するために、eatとbiteの数を計算する関数を定義します。
def evaluate_guess(guess, secret_number):
eats = sum(guess[i] == secret_number[i] for i in range(3))
bites = sum((c in secret_number) and (secret_number[i] != c) for i, c in enumerate(guess))
return eats, bites
eatはユーザーが予想した数字が同じ場所にある数を示しています。
例えば、正解が123でユーザーの予想が427だった場合、2の位置が同じ(真ん中にある)ためこの場合は1eatです。
biteはユーザが予想した数字が場所は違うが、正解にも使われていることを示します。
例えば、正解が123で、ユーザの予想が312だった場合、使われている数字は全て同じなので3biteになります。
またこの場合は、数字の位置は正解と全て異なるので0eatです。
この関数は、推測された各数字が秘密の数のどの位置にあるかをチェックし、eatとbiteをカウントします。
ステップ3: ゲームのメインループ
ゲームのメインループでは、正解(3 eat)を出すまでユーザが予想を繰り返します。
def numeron_game():
secret_number = generate_number()
attempts = 0
while True:
guess = input("3桁の数字を入力してください(各桁は異なる数字): ")
if len(guess) != 3 or not guess.isdigit() or len(set(guess)) != len(guess):
print("無効な入力です。もう一度試してください。")
continue
attempts += 1
eats, bites = evaluate_guess(guess, secret_number)
if hits == 3:
print(f"正解です!{attempts}回の試行で当てました。")
break
else:
print(f"{eats} eat, {bites} bite")
print(f"秘密の数は {secret_number} でした。")
# ゲームを開始する
numeron_game()
このループでは、ユーザーから3桁の数字を受け取り、その予想が正しいかどうかを判定します。
予想が正しければゲームが終了し、そうでなければeatとbiteの数を表示します。
また、何回目の試行で正解に辿り着いたのかも表示するようにしています。
そして最後にnumeron_game()で関数を実行しゲームを開始します。
まとめ
以上がpythonでヌメロンを実装する方法です。
コードの全体量も少なく内容もそこまで難しいわけではないのでぜひ挑戦してみてください。
自分なりの機能を追加してみるとプログラミングの学習にもなると思います。
分からない点などございましたらコメント、もしくはお問い合わせからよろしくお願いします。
おまけ
今回はシンプルなヌメロンの作り方を紹介しましたが、pygameというライブラリを使用することでよりゲームっぽいデザインのヌメロンを作ることも出来ます。
pygameを用いて実装したヌメロンのアプリはこのような見た目になっています。
こちらのコードについてはNoteの方で紹介&解説をしています。興味を持たれた方は是非そちらもご覧ください!(Noteではヌメロン以外にもPythonでのシューティングゲームの作り方の記事なども公開しています!)
コメント