【 PCゲーム制作入門 No.05 】

関数(かんすう)を学ぼう

map配列の下は、こちら↓
pygame.mixer.init(44100); # BGM初期設定

これは、pygameライブラリ内にある「関数」を実行しています。

実は、最初に使った print("Hello, world") も「関数」で、最初からPython言語にある「関数」を実行していました。

「関数」の内部では様々な処理が行われていますが、使う側は、「その結果どうなるか」を知っていればOKです。
因みに、pygame.mixer.init は、ざっくり言うと「曲を初期化する処理」です。


尚、pygame.mixer.init や print の部分が「関数名」で、
その後の、44100 や "Hello, world" のことを、「引数(ひきすう)」と言います。

<引数について>
・もし、「関数」に「引数」が無い場合は、print() という記述になります。

・「引数」が複数ある場合は、 ,(カンマ)で区切ります。
 例えば、文字列1つと数値2つが必要な「関数」の場合、
  関数名("文字列", 数値1, 数値2)
 という感じです。

・「引数」には、数値(44100等)の場合と文字列(Hello, world等)の場合がありますが、
 数値の時は、そのまま記入し、文字列の時は、"(ダブルクォーテーション)で括るというルールがあります。


次に進みます。 ↓で、「新しい関数を定義(=関数を作る)」しています。
# 曲をループ再生する
#IN : ファイル名
def BGM_Play(fname):     # wav,mp3,ogg
    pygame.mixer.music.load(fname);     # 音楽ファイルの読み込み
    pygame.mixer.music.play(-1);             # 音楽の再生回数(-1=ループ)

# 曲を終了する
def BGM_Stop():
    pygame.mixer.music.stop();               # 再生の終了

Pythonで「関数」を作るには、def 〜(): を使う、という決まりがありまして、
実際に「関数」を作っているのが、この部分→ def BGM_Play(fname):
この行で、「関数名」と「引数が1つ必要」であることを定義しています。

その後の2行が、この関数内で行っている処理です。
プログラム内のコメントにもありますが、音楽ファイルを読み込んで、それを再生させる処理ですね。

<どこまでが関数の範囲か?>
Pythonでは、関数名の直ぐ下の行に、「スペースで間を空けてから」、処理を記述していきます。
なので、改行後、「スペースで間を空け続ければ」、それが関数の範囲となります。

例えば、↓の様に記述した場合、関数内の処理は、2行分ですが、
def Test():
    n = 0;
    print(n);

↓の様に記述してしまうと、Test関数実行時に、1行分しか処理されません。
def Test():
    n = 0;
print(n);

※注意点:Pythonでは「Tabを使わないこと」。
 他の言語では、Tabで間を空けるのが一般的ですが、何故かPythonでTabを使うとエラーになってしまいます。
 なので、私の場合は、Tabの代わりに、スペースを4つ入れています。
 (エディターによっては、Tabを押した時にスペースを4つ挿入するように設定できます)

今回も読んでるだけじゃ身に付かないので、実際に試してみましょう!
テキストエディターで新規のファイルを作り、↓を入力してみてください。
def Test(n):
    n = n + 1;
    print(n);

Test(5);

raw_input();

その後、例えば test.py というファイル名で保存します。(拡張子は必ず .py で)
そのファイルを実行すると、Pythonのウインドウに 6 と表示され、入力待ち状態になります。
Enterキーを押すとウインドウが閉じます。

では、1行ずつ説明していきましょう。

・1行目で、Testという関数と引数 n を定義しています。
・2行目で、引数 n に、1を足す処理です。
・3行目が、n の値を表示する処理です。
・4行目は改行のみ。(改行しなくてもOKですが、見やすくする為に改行してます)
・5行目は、スペースで空けてないので、「Test関数の定義」を終わらせつつ、Test関数の引数に 5 を入れて実行しています。
・6行目も改行のみ。
・7行目の関数は、入力待ちをする関数です。

プログラムの流れは上から下に進みますので、
まず、1行目〜3行目でTest関数が定義され(Pythonが認識してくれる)、
次に5行目、6行目という順番で実行されました。

Test関数に渡した引数は 5 なので、関数内で 5+1 が行われ、6 を表示した、という感じです。
(次のページで、数値の演算方法を紹介します)

以上が関数の「定義方法」と「実行方法」です。
これも、いろいろ試して、理解を深めてください。

関数のラッピングについて

関数の豆知識ということで、「ラッピング」という手法をご紹介します。
今回の曲の関数も、「ラッピング」する為の関数です。
この2つの関数定義ですね↓
# 曲をループ再生する
#IN : ファイル名
def BGM_Play(fname):     # wav,mp3,ogg
    pygame.mixer.music.load(fname);     # 音楽ファイルの読み込み
    pygame.mixer.music.play(-1);             # 音楽の再生回数(-1=ループ)

# 曲を終了する
def BGM_Stop():
    pygame.mixer.music.stop();               # 再生の終了

これを定義することによって、以降、BGM_Play("ファイル名") とするだけで曲を再生でき、
BGM_Stop() とするだけで、曲を停止できます。
この方が、pygame専用の関数を実行するよりも楽ですよね。
これが、「ラッピング(又はラップ)」と呼ばれる手法です。

「ラッピング」にはもう一つメリットがあって、例えば、「曲を再生させる」というだけでも、
使うライブラリや言語、OSによって、記述の仕方が全く異なります。
これを全部覚えるのは大変ですし、時間と脳内メモリの無駄ですよね。

なので、「自分なりの関数名でラッピングし、細かい処理を気にせずプログラミングできるようにする」
これが重要です。


次のページへ



[ StudioGIW TOPページ ]