【pythonではじめるゲームプログラミング 第4回】これまでの復習
今回の記事はICONのpython勉強会の資料として書かれました。
担当は ふれうと です
- はじめに
- 前回の記事
- Step 4-1 FizzBuzzの合計
- Step 4-2 クヌースの矢印表記
- Step 4-3 九九の表
- Step 4-4 コマンドプロンプトで動くゲーム
- 備考(変数について)
- 終わりに
はじめに
今回は学んできた順次、分岐、反復の3つの基本処理を、演習を通して復習しましょう。
最後のステップでは、コマンドプロンプトで動くゲームを実際に作ってみます。
次回以降の記事では「リスト(配列)」や「関数(メソッド)」を学ぶ予定です。今回の記事を通して、それらを学ぶための基礎を固めましょう。
前回の記事
Step 4-1 FizzBuzzの合計
以下のAtCoderの問題を解いてみましょう。
前回のFizzBuzz問題の応用ですね。
もし、AtCoderが何かわからなければ、以下のページを参考にしてください。
AtCoderの導入記事
参考解答
解いてみましたか?
以下に参考解答を載せます。
クリックして開いてください。
参考解答
N = int(input())
a = 1
ans = 0
while a <= N:
if a % 5 != 0 and a % 3 != 0:
ans += a
a += 1
print(ans)
Step 4-2 クヌースの矢印表記
クヌースの矢印表記というものがあります。
NとMを入力したら、
N↑↑M
の値を出力できるようなプログラムを考えましょう
以下にその仕様を述べます。
//////////////////////////////
ファイル名は「knuth.py」
コマンドプロンプトから数値N、Mを入力する。
N↑↑Mを計算し、出力する
//////////////////////////////
それでは、実装してみましょう。
実装できたら、予想通りの挙動をするか確認してみましょう。
コマンドプロンプトで実行し、NやMに適当な値を入れてみましょう。
(ちなみに、NやMに大きい値を入れると、計算した結果がとてつもなく大きな数になります。その場合、表示にとても時間がかかることがありますので注意してください。もし、いつまで経っても表示されないようであれば、慌てず騒がず、Ctrl + C で強制終了。)
実行は
cd Desktop/ICONPythonLesson
python knuth.py
です。
参考解答
クリックして参考解答を開いてください。
見慣れない命令について解説すると、参考解答(knuth.py)
N = int(input("N = "))
M = int(input("M = "))
ans = N
i = 1
while M > i:
ans = N ** ans
i += 1
print("\n{}↑↑{} = {}".format(N, M, ans))
input("N = ")
...こうすることで、入力の際に文字を表示できます。ここでは何を入力しているのか分かりやすくするために使っています。\n
...改行文字です。文字列の中にこれがあると、そこで改行されます。今回のプログラムでは視認性向上のために使っています。無くても問題ありません。.format()
...直前の文字列の{}
に値を代入します。
Step 4-3 九九の表
続いては、コマンドプロンプト上で九九の表を表示するプログラムを作ってみましょう。
九九の表と言っても、任意の N × N の表を出力するようにしたいですね。
(インドでは20×20まで覚えるらしいですよ[要出典])
九九の表を表示することで二重ループを使う練習をするのが目的です。
以下にその仕様を述べます。
//////////////////////////////
ファイル名は「kuku.py」
コマンドプロンプトから数値Nを入力する。
N × N の表を出力する。
(可能であれば、)列が崩れないような表示をする。
//////////////////////////////
それでは、実装してみましょう。
改行しないprint命令
ここで、改行しないprint命令を使いたいかもしれないので、その使い方を以下に示します。
print("文字列", end = "")
print()
にend = ""
と入れればOKです。,
をお忘れなく。
具体例を示すと、以下のようなプログラムの場合
print("1", end = "") print("2") print("3", end = "") print("4", end = "") print("5")
次のように出力されます。
12 345
改行しないprint命令の説明は以上です。
参考解答
クリックして参考解答を開いてください。
参考解答(kuku.py)
N = int(input("N = "))
i = 1
while i <= N:
j = 1
while j <= N:
tmp = i * j
print("{} ".format(tmp), end = "")
j += 1
print("\n")
i += 1
tmp
とは英語「temporary」の略から来ており、一時的に保持したい値の変数名に用いられます。
クリックして参考解答を開いてください。
つまり、3行目では、変数 N = 9 なら 81 の長さの「2」、N = 20 なら 400 の長さの「3」となります。 そして、10~14行目で、桁数のズレを空白で埋めています。 変数参考解答(列を揃える場合)
N = int(input("N = "))
maxlength = len(str(N ** 2))
i = 1
while i <= N:
j = 1
while j <= N:
tmp = i * j
tmplength = len(str(i * j))
while tmplength < maxlength:
print(" ", end = "")
tmplength += 1
print("{} ".format(tmp), end = "")
j += 1
print("\n")
i += 1
len(文字列)
では、文字列の長さを変数に代入します。maxlength
に N * N の長さを入力しています。tmplength
に i × j の桁数を代入し、12~14行目で、tmplength
とmaxlength
の値が等しくなるまで空白を出力します。
Step 4-4 コマンドプロンプトで動くゲーム
では、ここまで学んだことを総動員して、コマンドプロンプトで動くゲームを作ってみましょう。
イメージとしては、ドラクエかポケモンのバトルといった感じです。
以下にその仕様を述べますが、無視して自由に作ってくれても構いません。
//////////////////////////////
ファイル名は「dramon.py」
コマンドプロンプト上で敵の名前、敵の体力、自分の名前、自分の体力、自分の取れる行動、ターン数を表示する。
自分の取れる行動は
- 攻撃
- パワーアップ
- 回復
とする。
コマンドプロンプトから数値N(1~3)を入力するとその行動をする。
敵は毎ターン攻撃する
自分と敵の行動をコマンドプロンプト上に出力する。
数値計算は
攻撃...攻撃力分だけ体力を減らす
パワーアップ...攻撃力を二倍にする
回復最大体力分の半分を回復する。最大体力より多くは回復しない
敵の体力が0を下回った場合、「You Win」と出力。
自分の体力が0を下回った場合、「You Lose」と出力。
(参考変数名)変数の値は自由です。
敵の体力...enemy_HP
敵の最大体力...enemy_MAXHP
敵の攻撃力...enemy_ATK
自分の体力...my_HP
自分の体力...my_MAXHP
自分の攻撃力...my_ATK
ターン数...turn_count
その他、必要な変数を適宜追加してください。
//////////////////////////////
それでは、実装してみましょう。
※参考解答は次回の記事で載せるつもりです。
正解があるわけではないので、自由にゲームプログラミングを楽しんでください。
備考(変数について)
制御変数について
while文やfor文などで、ループ回数を決めるための変数があります。
Step4-1の参考解答ではa
、Step4-2ではi
、Step4-3ではi
とj
がそれにあたります。
これらは「制御変数」と呼ばれます。
制御変数には他であまり使われない、i
やj
を用いることが多いです。
最近ではi
やj
ではなく、もう少し何を指すのかわかりやすい変数名にすることが推奨されることもあります。
命名規則について
変数名の話題が出たのでもう一点、「変数の命名規則」について説明します。
各言語において、変数名の付け方には規則があります。
今までは、自由に変数名を設定してきたと思いますが、これからは命名規則に則った変数名をつけるようにすると良いかもしれません。
また、大規模なプログラム作成や複数人でのプログラム作成の際には、さらに詳細な命名規則を事前に設定するのも良いかと思われます。
さらに包括的な「コーディング規約」というものも存在します。
終わりに
今回は、順次、分岐、反復の三つの基本処理の復習をしました。
そして、Step 4-4では実際にゲームプログラミングも行いました。
ゲーム制作の第一歩を踏み出しましたね!
ゲームプログラミングや競技プログラミングで、さらに自分のプログラミング力を磨いて、作りたいものを作れるようになってください。
第五回はコチラ!
競技プログラミングに関する記事はコチラ!