LoginSignup
2
2

More than 3 years have passed since last update.

C言語の復習がてら、ゲームに応用してみる Part2

Last updated at Posted at 2019-07-03

はじめに

本記事はPart1の続きなので、まだPart1を見ていない人はそちらを先に見てほしい。

美しきコードは幸せを運んでくる。

では、さっそくやっていこう。

いきなりだが、コードを書くうえで最も大事なことは何かわかるだろうか?
素早くコードが書けることか?コードを短くまとめられることか?いや違う。
それはおそらく「見やすいコードが書ける。」ということである。
いくら早くても、短くても、見にくければあとから改良するときや見直したときに、まぁ大変なことになる。
コードを見た瞬間にあなたの創作意欲は地の底に落ち、今すぐ家に帰り、暖かいお風呂に入り、おいしいご飯を食べ、清潔なベッドで快眠を取って明日にしてしまいたくなるだろう。
こんなことにならないように、常にわかりやすくコードを書くことを心に刻んでおいてほしい。
特に「コメント」は大事だ。以下のコードを見てほしい。

main.cpp
#include "DxLib.h"

/*DxLibはWinmainで始まる。*/
//正常終了 -> 0が返ってくる。
//エラー時 -> 1が返ってくる。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //Dxライブラリの初期化
    if (DxLib_Init() == -1)
    {
        return -1;//エラー
    }

    //Escキーが押されていない間(==0 のとき)、無限ループする。
    while (CheckHitKey(KEY_INPUT_ESCAPE) == 0) {

    }

    DxLib_End();//Dxライブラリーの終了

    return 0; //プログラムの正常終了
}

どうだろう?
Part1でもお見せしたコードだが格段に見やすくなったのではないだろうか?
コードが読めなくとも読むことができる。

ただ、コメントがいらない場合もあるということは肝に銘じておいてほしい。
「DxLib_Init() が Dxライブラリの初期化であるということは明白である」から 「//Dxライブラリの初期化」というコメントはいらないという判断をするならばその一行はいらなくなり、コードは全体で短くなる。コードは短いことに越したことはないので、いるかいらないかは常に考えるべきである。

優しさ一塩、printf

続いてCプログラマーならだれでも最初に挨拶をするprintfだ。とりあえず気軽に「Hello World!」しておこう。
さて、おそらく今まで黒い画面と戦ってきた人ならわかると思うが、今までprintfを使って計算結果を表示することや文字を出すのによく使っていたものだと思う。しかし、今回は視点を変えてみよう。

printf("Hello Too Error World!!!")

何かものを作るうえでコードを書けば書くほどエラーが出る。というのはつきものである。
先ほど書いたmain.cppファイルでもどこかでエラーが出るかもしれない。
では、エラーが出た時になかなかどこでerrorが出てるのかわからないとしよう。
そうしたときに行かせるのがprintfである。
例えば以下のようにエラー対策してみる。

main.cpp

//Dxライブラリの初期化
if (DxLib_Init() == -1)
{
    printf("Dxライブラリの初期化でエラーが発生!WINAPI内を参照してください!");
    return -1;//エラー
}

このように書いておけばDxライブラリ初期化のときにエラーが発生した場所をエラーメッセージからすぐに理解することができるだろう。

また、どこでエラーが起きたかわからないときに力技で解決することができる。

main.cpp
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    printf("ここまで行きました:通過点1");
    if (DxLib_Init() == -1)
    {
        printf("ここまで行きました:通過点2");
        return -1;
    }

    printf("ここまで行きました:通過点3");
    while (CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
        printf("ここまで行きました:通過点4");
    }
    printf("ここまで行きました:通過点5");
    DxLib_End();

    return 0;
}

このようにすれば、エラーに

ここまで行きました:通過点1
ここまで行きました:通過点2
error:なんたらかんたら~

と表示され場所の特定をできるだろう。
(もっといい方法があるのだろうが...)

手がつかれた。

とりあえず今回はここまでとしておきたい。
なかなかゲームを作るところに入れなくて申し訳ない。次からしっかりやるので、許してくれ。
次:[工事中]

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2