【 PCゲーム制作入門 魔法のC言語偏 No.08 】

独自の新しい魔法(関数)を作ろう

前回のアニメーションを、もっと簡単に作成する方法があります。

現状は、最初に書いた「ファイアの魔法」の例のように、毎回長い呪文を詠唱していますよね。
例えば、私が書いたプログラムでは、口を動かす処理以外は、同じ呪文が書かれています↓
// 一枚目の絵 DrawTriangle(320-200,400, 320+200,400, 320, 600, GetColor(0, 122, 102), TRUE); // 身体 DrawCircle(320, 240, 200, GetColor(255, 216, 101), TRUE); // 顔 DrawOval(320, 140, 200, 100, GetColor(153, 102, 0), TRUE); // 髪の毛 DrawCircle(320-70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawCircle(320+70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawBox(320-40, 360, 320+40+1, 360+10, GetColor(224, 51, 51), TRUE); // 口(閉じてる) // 何か押すまで停止 WaitKey(); // 画面クリア DrawBox(0, 0, 640, 480, GetColor(0, 0, 0), TRUE); // ClearDrawScreen(); // ←この関数でも画面をクリアできる // 二枚目の絵 DrawTriangle(320-200,400, 320+200,400, 320, 600, GetColor(0, 122, 102), TRUE); // 身体 DrawCircle(320, 240, 200, GetColor(255, 216, 101), TRUE); // 顔 DrawOval(320, 140, 200, 100, GetColor(153, 102, 0), TRUE); // 髪の毛 DrawCircle(320-70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawCircle(320+70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawBox(320-40, 360, 320+40+1, 360+10+30, GetColor(224, 51, 51), TRUE); // 口(開ける) // 何か押すまで停止 WaitKey(); // 画面クリア DrawBox(0, 0, 640, 480, GetColor(0, 0, 0), TRUE); // 三枚目の絵 DrawTriangle(320-200,400, 320+200,400, 320, 600, GetColor(0, 122, 102), TRUE); // 身体 DrawCircle(320, 240, 200, GetColor(255, 216, 101), TRUE); // 顔 DrawOval(320, 140, 200, 100, GetColor(153, 102, 0), TRUE); // 髪の毛 DrawCircle(320-70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawCircle(320+70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawBox(320-40, 360, 320+40+1, 360+10, GetColor(224, 51, 51), TRUE); // 口(閉じてる) // 何か押すまで停止 WaitKey();

仮に、この「同じ呪文」の5行を、「Kao」という魔法名(関数名)で実行できるとしましょう。
すると、↓のようになります。
// 一枚目の絵 Kao(); // 顔(口以外)を描画 DrawBox(320-40, 360, 320+40+1, 360+10, GetColor(224, 51, 51), TRUE); // 口(閉じてる) // 何か押すまで停止 WaitKey(); // 画面クリア ClearDrawScreen(); // 二枚目の絵 Kao(); // 顔(口以外)を描画 DrawBox(320-40, 360, 320+40+1, 360+10+30, GetColor(224, 51, 51), TRUE); // 口(開ける) // 何か押すまで停止 WaitKey(); // 画面クリア ClearDrawScreen(); // 二枚目の絵 Kao(); // 顔(口以外)を描画 DrawBox(320-40, 360, 320+40+1, 360+10, GetColor(224, 51, 51), TRUE); // 口(閉じてる) // 何か押すまで停止 WaitKey();

だいぶ短くなりました。

もちろん、これをコピー&ペーストしても、実行することはできません。
まだ「Kaoの魔法」を作ってないから当然ですね。

では、「Kaoの魔法」を作ってみましょう。

C言語での魔法(関数)の作り方はこちら↓
// 顔を描く関数 void Kao() { // 顔を描く処理 DrawTriangle(320-200,400, 320+200,400, 320, 600, GetColor(0, 122, 102), TRUE); // 身体 DrawCircle(320, 240, 200, GetColor(255, 216, 101), TRUE); // 顔 DrawOval(320, 140, 200, 100, GetColor(153, 102, 0), TRUE); // 髪の毛 DrawCircle(320-70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 DrawCircle(320+70, 300, 10, GetColor(20, 10, 0), TRUE); // 目 }

簡単ですね。 書式は、

void 魔法名() { 魔法内の処理 }

です。
最初の void(ヴォイド) は、まだ気にしなくて大丈夫です。

この新魔法を、Windowsのメイン関数 WinMain よりも前に書いてください。
順番としては↓な感じです。(関数の中身は省略してます)
#include "DxLib.h" // 顔を描く関数 void Kao() { // 描画処理 } // メイン関数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ゲーム処理 Kao(); // 顔を描画する return 0; }

以上が、新魔法の作り方と、その使い方です。

これを踏まえて、あなたが作ったアニメーション処理を、簡略化してみてください。
(もし、全てを動かしてしまっていた場合は、動かない部分を作り、関数化してください)

無事に簡略化できたら、次に進みましょう。

次のページへ



[ StudioGIW TOPページ ]