第1回 python応用編 31ゲーム
Pythonにはまだクラスや標準ライブラリー、外部ライブラリーいうものがありますが、これまでの知識でも実際にゲームが作成できます。今回は復習をかねて体感して頂く講座となっております。
今回は31(サーティワン)ゲームというものをpythonを使って実際にプログラミングをしたいと思います。この後に実際に、プログラムの設計、解説、まで行っていきます。ぜひ、皆さんも実際に考えてみてください。
まず、初めにゲームの仕様を決めます。
ルールは
①互いに0から数を数えていき最後に31を数えた方が負けというゲームです。
②ターン制を設け交互に数字を数えていきます。1ターンに数えれる数字は2つ〜4つまでです。例えば私が0.1.2と数えたら、次はコンピューターさんが3.4と数え、これを交互に行い31を言った方が負けといゲームです。
はい、次に処理の流れを大まかに設計に落としていきます。
具体的な流れとしてはまず初期値0の変数があり、互いに0から数字をかずえていきますので数えた数字の数を31まで足していきます。そして、31になった時点で負けですと表示させましょう。
それでは実際にプログラムを確認してみましょう。
まずはルールの説明を表示しましょう。
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
ここで補足説明です。このstrというのはpython入門2で少し触れましたが演算をする場合は、数値の型の場合数値の型との演算、文字の型の場合は文字の型との演算、をするようにしましょうとお伝しました。このstrというのはmin変数(数値の型)を文字型に変更するという意味です。文字型に変更することで、文字の演算、つまり文字の結合ができるようになります。実際にminとmax変数に値を入れてプログラムを実行してみます。♪( ´θ`)ノ
//↓↓↓追加
min=2
max=4
//↑↑↑追加
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
このようによく見てみますと、数値と文字が表現できていることが確認できます。数値を文字として認識して欲しい場合はstr(変数名)と記載しましょう。このように演算の型を合わせることをキャストと呼びます。
次にゲームの終了を明確にしましょう。まずは、いつまで続けるか記載しなければなりません。どちらかが負けるまでゲームを行います。ですので変数の数値が0になるまでループを繰り返します。決着が付いたらゲーム終了と表示させます。
このように書けます。
min=2
max=4
//↓↓↓追加
game=0
//↑↑↑追加
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
//↓↓↓追加
while(game<31):
print("終了")
//↑↑↑追加
次に実際に関数を用いてゲーム処理を行いましょう。分かりやすくするため説明も入れてみます。
まず現在数を表示させましょう。
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
//↓↓↓追加
print(str(game)+”現在の数です”)#現在の数を表示
//↑↑↑追加
print("終了")
次にあなたが数を数えて適切な値をとっていない場合は先頭に戻すようにしましょう。関数を利用して結果がtrueかfalseを返すようにします。結果がfalseだった場合、つまり適切な値をとっていない場合は先頭に戻すとします。
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
print(str(game)+”現在の数です”)#現在の数を表示
//↓↓↓追加
if(getYou()==False):
continue
//↑↑↑追加
print("終了")
次に実際の関数を作りましょう。先ほどの呼んだgetYou関数の中身を作っていきます。
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
print(str(game)+”現在の数です”)#現在の数を表示
if(getYou()==False):
continue
print("終了")
//↓↓↓追加
def getYou():
//↑↑↑追加
ここで関数の外の変数を使用するため、変数の紐付けします。このgame変数はこの関数の外でもつかいますよーと宣言してあげてください。
def getYou():
//↓↓↓追加
global game
//↑↑↑追加
グローバル変数とオート変数がわからない方がいましたら。後ほど解説いたします。globalとは「関数の外でも使いますよー」という意味と思ってください。次に実際にあなたのキーボードからの入力を受け取るようにします。
def getYou():
global game
//↓↓↓追加
your = int(input("あなたはいくつ数えますか?"))
//↑↑↑追加
これはinput関数でキーボードからの入力を受け取ります。そしてint型つまり入力値を整数と変換するキャストさせます。それをyourに入れ込みます。つまりはこのyourにはユーザーが指定した数値が代入されます。
次に、そのyourに入れた値が正しいか確認しなければなりません。適切な値であれば結果をtrueで適切でなければfalseで返すようにします。
def getYou():
global game
your = int(input("あなたはいくつ数えますか?"))
//↓↓↓追加
if(your<min or your >max):
print(“適切な値ではありません”)
return False
game +=your
print("あなたは"+str(your)+”数、数えました")
return True
//↑↑↑追加
ここまでできましたら、while文に戻りましょう。
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
print(str(game)+”現在の数です”)#現在の数を表示
if(getYou()==False):
continue
print("終了")
ここでゲームの結果を確認します。
つまりあなたが数えたことにより31に向かって進んでますので、勝敗がついたかの確認をします。つまり31になっているかの確認です。関数で確認するためのcheckNumber関数を作りましょう。勝敗が付いた場合はbreakでwhile文から抜けるようにします。
if(checkNumber(‘you',game)):
break
次に、関数の中身を書きましょう。
def checkNumber(player,Count):
引数のCountが31以上かの確認をします
if(Count >= 31):
もし引数のplayerあなたなら「あなたの負けですを表示しましょう」
if(player=='you'):
print('31を超えました。あなたの負けです')
違う場合はあなたの勝ちですを表示しましょう。
else:
print('あなたの勝ちです')
勝敗がついたらTrueを返し、呼び出し元がwhile文から抜けるようにします。
return True
勝敗がついていない場合はFalseを返し、while文の処理を繰り返します。
else:
return False
あともう少しです。次はコンピュータさんの関数を作りましょう流れは同じですので少し割愛します。
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
print(str(game)+”現在の数です”)#現在の数を表示
if(getYou()==False):
continue
if(checkNumber(‘you',game)):
break
print("終了")
def getYou():
global game
your = int(input("あなたはいくつ数えますか?"))
if(your<min or your >max):
print(“適切な値ではありません”)
return False
game +=your
print("あなたは"+str(your)+”数、数えました")
return True
def checkNumber(player,Count):
if(Count>= 31):
if(player=='you'):
print('31を超えました。あなたの負けです')
else:
print('あなたの勝ちです')
return True
else:
return False
現在の数を表示します。
print(str(game)+”現在の数です”)#現在の数を表示
コンピュータが数える関数を書きます
getMe()
中身は
def getMe():
global game
コンピューターが取る数を計算します。
mine = (game-min)%(min+max)
計算結果が問題ないか確認します。
if(mine<min):
mine=min
if(mine>max):
mine=max
print("私は"+str(mine)+”つ数えます”)
game+=mine
そして、勝敗がついたかの確認をします。
if(checkNumber('me',game)):
break
//↑↑↑追加
print(‘終了’)
min=2 #数えれる数字のミニマム値
max=4 #数えれる数字のマックス値
game=0
print("交互に0〜"+str(min)+"-"+str(max)+"つの数字を数えていき、最後の31を数えた方が負けです。")
while(game<31):
print(str(game)+”現在の数です”)#現在の数を表示
if(getYou()==False):
continue
if(checkNumber(‘you',game)):
break
print(str(game)+'現在の数です')#現在の数を表示
getMe()
if(checkNumber('me',game)):
break
print("終了")
def getYou():
global game
your = int(input("あなたはいくつ数えますか?"))
if(your<min or your >max):
print(“適切な値ではありません”)
return False
game +=your
print("あなたは"+str(your)+”数、数えました")
return True
def checkNumber(player,Count):
if(Count>= 31):
if(player=='you'):
print('31を超えました。あなたの負けです')
else:
print('あなたの勝ちです')
return True
else:
return False
def getMe():
global game
mine = (game-min)%(min+max)
if(mine<min):
mine=min
if(mine>max):
mine=max
print("私は"+str(mine)+”つ数えます”)
game+=mine
これで実行してみましょう。これで2と入力してみます。そするとすぐにコインピューターさんが計算してくれます。実際に皆さんも体感してみてください。意外とコンピューターさんは強いですよ。٩( ‘ω’ )و
ここで、実はこのゲームには穴がります。よければ皆さんも実際にゲームを行なってみて確認してみてください。そしてそのバグを解決したプログラムを是非作ってみてください。少し難しいですが必ず成長します。はい、今回は応用編ということで、実際に関数を用いてゲームを作成して見ました。次回は基本講座の標準ライブラリーを解説しています。実務で必ず使いますので是非ご覧ください。
以上で、python応用編を終了と致します。ご静聴ありがとうございました。(๑╹ω╹๑ )