DAY14は今までで習った機能を活用してハイローゲームをプログラミングする。
ハイローゲームとは、どちらの数値が高いかを応えて正解するごとにスコアアップするゲーム。
A: お金配りおじさん
B: きゃりーぱみゅぱみゅ
どっちのフォロワーが多い?
A!
みたいな感じ。
今回は1問応えたらBがAになって、Bに新しい質問が出てくる仕様にする。
2問目
A; きゃりーぱみゅぱみゅ
B: HIKAKIN
どっちのフォロワーが多い?
みたいなね。
素材はgame_data.pyというものが別にあり、
data = [
{
'name': 'Instagram',
'follower_count': 346,
'description': 'Social media platform',
'country': 'United States'
},...
こんな感じで必要な情報がたくさんある。
それでは毎回のごとくゲームの流れを確認。
- 最初にAとB2つ分の比較するデータをリストからランダムに取得する。
- AとB、どちらのが大きいかを聞き、応えてもらう。
- AとBのフォロワー数を比較し、答えと大きいほうがあっていたら
ゲームスコアを+1し、正解!スコア:1という出力をする。
間違いなら不正解で最終スコア:1を出力してゲームストップ。 - 正解ならBをAに移動して、Bに新しいデータを取得して、再度続ける。
こんな感じ。
import game_data as datas
from random import choice
まずはゲーム素材とランダムをインポート。
def clear():
command = 'clear'
if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls
command = 'cls'
os.system(command)
def get_data():
return choice(datas.data)
次の質問に行く時は表示をクリアするのでクリアの機能も。
そしてランダムにデータを取得する機能も。
def game():
game_score = 0
compare1 = get_data()
ゲームそのものもファンクションに。
初期状態として、スコアと1番最初のデータだけは取得しておく。
(2回目以降はBがAになるのでwhileに入れる)
game_continue = True
while game_continue:
print(f"A: {compare1['name']}, {compare1['description']}, from {compare1['country']}, {compare1['follower_count']}")
compare2 = get_data()
while compare1 == compare2:
compare2 = get_data()
print(f"B: {compare2['name']}, {compare2['description']}, from {compare2['country']}, {compare2['follower_count']}")
answer = input("どちらのほうがフォロワー数多いでしょう? 'A' or 'B': ").upper()
続けて、ゲームが続くまで
Bのデータも取得し、AとBを表示してinputで答えてもらう。
途中にあるwhile compare1 == compare2のくだりは、
もし両方とも同じデータを取得した場合はドローになってしまうので
同じデータになった場合は違うデータになるまで取得しなおす、という動作にしています。
def compare(compare1, compare2):
if compare1 < compare2:
return "B"
else:
return "A"
game()のなかではなく上に追記します。
AとBを比較してどちらが正解かを吐き出すファンクション。
clear()
if answer == compare(compare1["follower_count"], compare2["follower_count"]):
game_score += 1
compare1 = compare2
print(f"正解! スコア:{game_score}")
else:
print(f"不正解… 最終スコア: {game_score}")
if input("Do you wanna play again? y / n : ") == "n":
game_continue = False
else:
clear()
game_score = 0
compare1 = get_data()
答えを入力したら、先程のファンクションを使って
正解とプレイヤーの答えを比較。
同じであればスコアを1増やして
BをAに移動せさせ、続けます。
違っていればゲームオーバー。
追加機能としてもう一回やる?選択肢をいれています。
clear()を入れてコンソールをスッキリして続けています。
game()
最後に起動しておしまい。
全てのコードはこちら。
import art
import game_data as datas
from random import choice
import os
def clear():
command = 'clear'
if os.name in ('nt', 'dos'):
command = 'cls'
os.system(command)
def get_data():
return choice(datas.data)
def compare(compare1, compare2):
if compare1 < compare2:
return "B"
else:
return "A"
def game():
game_score = 0
compare1 = get_data()
game_continue = True
while game_continue:
print(f"A: {compare1['name']}, {compare1['description']}, from {compare1['country']}, {compare1['follower_count']}")
compare2 = get_data()
while compare1 == compare2:
compare2 = get_data()
print(f"B: {compare2['name']}, {compare2['description']}, from {compare2['country']}, {compare2['follower_count']}")
answer = input("どちらのほうがフォロワー数多いでしょう? 'A' or 'B': ").upper()
clear()
if answer == compare(compare1["follower_count"], compare2["follower_count"]):
game_score += 1
compare1 = compare2
print(art.logo)
print(f"正解! スコア:{game_score}")
else:
print(f"不正解… 最終スコア: {game_score}")
if input("もう一回やりますか? y / n : ") == "n":
game_continue = False
else:
clear()
game_score = 0
print(art.logo)
compare1 = get_data()
game()
今回はお手本のコードでなく、自分で1からかけたコードを公開しています。
しっかり動いている!
成長しているなあとちょっと感じました。笑