知らない人のために説明すると、ハングマンは伝統的にペンと紙を使ってプレイされる単語推測ゲームです。単語は秘密裏に選ばれ、その単語について知られているのはその単語の文字数だけです。プレイヤーは文字を推測し、それが単語内にあれば、その位置が明らかになります。間違った推測はプレイヤーに不利になります。単語を推測して勝った場合、間違った推測が多すぎるとゲーム オーバーになります。
そう、ゲームの内容はもうわかったので、これを Python でプレイするとどうなるかを見てみましょう。
Word: --- Wrong guesses: Guess a letter > a Word: -a- Wrong guesses: Guess a letter > g Word: -a- Wrong guesses: g Guess a letter > t Word: -at Wrong guesses: g Guess a letter > c Word: cat Well done! You guessed the word with 1 wrong guesses.
このゲームを作るために新しい Python プログラムを開始しましょう。推測する単語と、正しい推測と間違った推測を追跡する方法が必要です。
word = "something" guessed_letters = [] incorrect_letters = []
角括弧は何ですか?それが新しいリストを表す Python です。リストは、複数の値を格納できる変数です。この場合、リストに文字を保存しますが、Python ではそこに何でも入れることができます。
私たちのゲームは基本的に、これまでに推測された単語の部分をプレーヤーに表示し、その後、別の推測を求めるループになります。これを実装するには while ループを使用できます。しかし、ループを終了するにはどのような条件を設定すべきでしょうか?ゲームを終了したい理由は 2 つあります:
最初の条件は、guessed_letters リスト内の文字数が単語内の文字数と同じである場合に満たされます。したがって、ループはそうでないときにも実行する必要があります。 Python では、これは len(guessed_letters) != len(word) として記述できます。 len() 関数は、リストまたは文字列の長さを示します。
2 番目の条件は、errors_letters リスト内の文字数が、許容される推測の最大数を超えている場合に満たされます。したがって、そうでない場合でもループを実行する必要があります。 Python では、これは len(incorrect_letters)
すべてをまとめると、while ループは次のように始まります。
# Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)ループ内で次の 4 つのことを行う必要があります:
- プレイヤーに単語を表示します。
- 間違った推測のリストを表示します。
- プレイヤーから推測してもらいます。
- 推測が正しいか間違っているかを記録します。
順番に取り組んでいきましょう。
単語を表示する
プレイヤーに単語を表示する必要がありますが、ただしプレイヤーが正しく推測した文字のみが表示される必要があります。残りの文字はダッシュ文字に置き換える必要があります。これを行う関数を書いてみましょう。これは 2 つの引数、表示する単語と正しく推測された文字のリストを受け取ります。
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print()for ループを使用して、単語内の各文字をループします。次に、in 演算子を使用して、その文字が文字のリストにあるかどうかを確認します。その場合は印刷させていただきます。そうでない場合は、代わりにダッシュを出力します。 print 呼び出しで end="" 引数を使用して、改行の印刷を停止します。
間違った推測を示す
間違った推測を示す別の関数を書いてみましょう。これは前のものよりもはるかに単純です。これは単一の引数、間違った推測のリストを受け取り、再び for ループを使用してそれぞれを出力します。
def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print()プレイヤーの推測を得る
次の関数はプレーヤーから推測を取得します。プレーヤーが実際に何かを入力していることを確認するために、while ループを使用します。彼らが入力するまで、推測を求め続けます。最終的に、推測は単一の文字である必要があるため、入力された最初の文字のみを返します。
def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0]推測を記録する
プレイヤーからの手紙を受け取ったら、2 つのリストのどちらにそれを追加するかを決定できます。単語の中に文字が含まれていれば、それは正しい推測です。 append() メソッドを使用して、これをguessed_lettersリストに追加できます。単語内にない場合は、error_letters リストに追加する必要があります。 しかし、その文字が以前にすでに推測されているかどうかも確認する必要があります。これは、in 演算子を使用してリストの 1 つであるかどうかを確認することで行います。 (この方法では、各推測は 1 回だけ記録されます。)
if letter in word and letter not in guessed_letters: guessed_letters.append(letter) elif letter not in incorrect_letters: incorrect_letters.append(letter)ゲームを終了する
最後に重要なことを言い忘れましたが、ゲーム ループが終了したときにプレーヤーに適切なメッセージを表示する必要があります。彼らが単語を推測したかどうかに応じて、メッセージは成功または失敗のいずれかを示します。彼らがその単語を正しく推測したかどうかをどうやって知ることができるでしょうか? guessed_letters リスト内の文字の数は、単語と同じ長さになります。
# End of game message. if len(guessed_letters) == len(word): show_word(word, guessed_letters) print(f"Well done! You guessed the word with {len(incorrect_letters)} wrong guesses.") else: print(f"Too many wrong guesses! The word was '{word}'")それでおしまい! Hangman の完全なゲームがあります。ゲームを難しくしたり簡単にしたりするには、許容される間違った推測の数を変更します。
完全なプログラムリスト
def show_word(word, letters): print("Word: ", end="") for letter in word: if letter in letters: print(letter, end="") else: print("-", end="") print() def show_wrong_guesses(guesses): print("Wrong guesses: ", end="") for letter in guesses: print(letter, end="") print() def get_letter(): letter = "" while letter == "": letter = input("Guess a letter > ") return letter[0] word = "something" guessed_letters = [] incorrect_letters = [] # Game loop. MAX_WRONG_GUESSES = 5 while len(guessed_letters) != len(word) and len(incorrect_letters)
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3