PythonでGuess the Number Game を生成してみた

### この記事の目的は、"Guess the Number Game"、プログラムがランダムに数字を選び、プレイヤーがランダムに数字を当てるゲームをどのようにPythonで生成するか紹介するのが主旨だ。

## まずは、初期設定をする。
![Screenshot 2024-06-12 at 14.43.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/c21edaa2-95e1-2d67-72ca-6998579fd5f6.png)

まずは、randomモジュールからrandint関数を使い、
指定された範囲内のランダムな整数を生成することができる。
次に、artというモジュールから、clear関数をimportする。

ランダムに数字を選ぶのは、ユーザーにとって至難の技であるため、
今回私は、レベルを5つ設けた。

Supereasyレベル: ユーザーが50回数字を失敗するまで、ゲームオーバーにならない。
Easyレベル: ユーザーが20回数字を失敗するまで、ゲームオーバーにならない。
Mediumレベル: ユーザが10回数字を失敗するまで、ゲームオーバーにならない。
Hardレベル: ユーザーが7回数字を失敗するまで、ゲームオーバーにならない。
Superhardレベル: ユーザーが5回数字を失敗するまで、ゲームオーバーにならない。

## ユーザーの推測と実際の数値を比較し、その結果を出力する
![Screenshot 2024-06-12 at 14.53.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/4da74d5d-0d6d-5417-48c8-91c64f850c48.png)

まず、"check answer"という関数を定義。この関数は、guess（ユーザーが推測した値）, answer（プログラムが実際に生成した答え）を比較する。
そして、guessが、answerよりも高い場合は、"Too High"とprint
また、　guessがanswerよりも低い場合は、"Too Low"とprint
ユーザが、実際の数値を的中した場合、"You got it! The answer was 実際の数値"とprint

## 5つのレベルの中から、ユーザーにレベルを選択させる
![Screenshot 2024-06-12 at 14.57.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/5accb9f4-8883-531c-7287-7ed8b9677b6f.png)
![Screenshot 2024-06-12 at 14.59.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/a86b9e65-20d9-8973-4c9f-96191e99a71a.png)

まず、"set_difficulity"という関数を定義。そして、ユーザーに5つのレベルを選択させる。
そして、"game" という関数を定義させ、logoをprintする。

## ユーザーに1から1000の数字を選択させる
![Screenshot 2024-06-12 at 15.01.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/a28f0461-6cf8-7821-2c33-74a3453c7f0c.png)

まず、プログラムは、"Welcome to the Number Guessing Game", "I'm thinking of a number between 1000"と表示される。その後、プログラムが、ランダムに1から1000の範囲内の数値を選び、ユーザーはその数値を自分が選んだ5つのレベルの中から残されたライフの中で、的中しないといけない。

![Screenshot 2024-06-12 at 15.04.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/02f77122-4bf1-f648-bcba-95682010037c.png)

##### 1. まず、ユーザーの推測を格納するための変数"guess"を0に初期化する。
guess = 0

##### 2. "guess"が"answer"と異なる限り、以下のプロックを繰り返します。
while guess != answer:

##### 3. ユーザーに残りの試行回数を表示
turns = check_answer(guess, answer, turns)

##### 4. ユーザーに数値を入力させ、その入力を整数に変換して"guess"に格納
guess = int(input("Make a guess:"))

##### 5. 試行回数の追跡と減少
turns = check_answer(guess, answer, turns)
check_answer関数を呼び出して、ユーザーの推測をチェックし、残りの試行回数を更新します。この関数は、ユーザーの推測が正しいかどうかを判断し、間違っていれば試行回数を1減らします。

##### 6. 試行回数が0になった場合の処理
if turns == 0:
  print("You've run out of guesses, you lose.")
  print(f"The correct number is {answer}")
  return
試行回数が0になった場合、ユーザーにゲームオーバーを知らせ、正しい答えを表示して関数を終了。

##### 7. 再度推測を促す
elif guess != answer:
  print("Guess again.")
ユーザーの推測が正しくない場合、再度推測を促すメッセージを表示

##### 8. ゲーム開始
game()
game関数が定義され、それを呼び出してゲームを開始することができる。

これだけではわからないと思うので、実際にSuperhard Levelを遊んでいるところを添付しておく。
![Screenshot 2024-06-12 at 15.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/447bd5bf-a218-bd70-bb7f-172b0063e38e.png)

まず、私は以下の写真のように、275と予測した。しかし、パソコンが、"Too high"と回答した。これで、私の残りのライフ数が、5から４へと減った。
![Screenshot 2024-06-12 at 15.18.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/4a642f2f-7462-94b4-93d3-ffaec8adb25e.png)

173 と予測したが、またもや”Too High"と回答した。これで、私の残りのライフ数が、4から3へと減った。
![Screenshot 2024-06-12 at 15.19.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/5edbc6e3-5898-dbac-c24f-0f514ed9d802.png)

77と予測したが、ここでは"Too Low"と回答した。これで、私の残りのライフ数が、3から2へと減った。137と予測したが、ここでは”Too High"と回答した。これで、私の残りのライフ数が、2から1へと減った。106とも予測したが、正解(The correct number) が126であったため、私は、ゲームオーバーになってしまった。
![Screenshot 2024-06-12 at 15.23.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/23a9cf65-a177-9c83-fb2b-f56ad7994325.png)

引用元：
https://github.com/dericsadrs/100-Days-of-Code-Complete-Python-Pro-BootCamp/tree/master/Day%2012

皆さんも時間がある時に、このプログラムコードを参考にして、Guess the Number Game を遊んでみたらいかがでしょうか。