概要
コードルールは、ルールに従い変数や関数の名前を命名することです。
コードルールを守ると、変数や関数の名前だけで意義が
分かりやすくなり、プログラムしやすくなります。
ルールの種類にはハンガリアン記法などがありますが、
オリジナルルールを作りプログラムするのがやりやすいと思います。
重要性
ゲーム会社に応募する際に自分のゲームとそのソースも送ります。
ソースがある程度の体裁が守られていると評価があがります。
ゲーム以上にソースを重要視する会社もあるので、綺麗に書きましょう。
今回は簡単なコードルール例を示しながら説明します。
クラス絡みは次回♪。
[2回]
変数
char_far
enemy_bmp;
int main()
{
Draw( enemy_bmp );
return 0;
}
変数自体の名前に、型名・宣言場所の情報を付与してみます。(一部省略)
char_far
g_bmpEnemy ;
Draw( g_bmpEnemy );
このルールは、
・グローバル変数は先頭に
g_
・次に宣言する型名を小文字
bmp
・次に変数の名前の先頭の文字を大文字にして型名との区切りをつける。
Enemy
こうすることによって変数名を見ただけで、
どこに宣言されたどの型の変数かを見分けることができます。
ポインタ変数
型名に関しては変数名だけで分かりそうであれば書かなくてもいいですが、
ポインタ変数の場合は明示しておいたほうがいいです。
int* pEnemyX;
ポインタ変数はpやlpなどを付けます。(どっちかは好みです)
関数
関数の名前については、私が1年の時に大西先生がおっしゃっていました。
動詞+名詞+() で構成するといいですね。
DrawEnemy(),UpdateShot(),ActionObject(),FindEnemy(),PlaySound()
Windowsの関数もこのように命名されているものが多いです。
関数の引数
void DrawEnemy(int _x,int _y,int _type)
{
int ret=_x+_y;
if( ret<50 ) return; // 左上にマップを描画しているため、敵の描画命令を呼ぶ必要がない。
Draw(BmpArray[_type],_x,_y);
}
この関数は指定した座標に敵の種類typeを描画する関数で、
左上にマップを描画するので左上には描画しないようにしています。
関数の引数に「_」(アンダーバー)をつけています。
関数内で変数(ret)を宣言すると引数との見分けがつきにくくなるので、
それを改善するためにアンダーバーをつけて、普通の変数との差を見やすくしています。
定数
#define SCENE_FPS 60 // ダメ
const int SCENE_FPS=60; // ◎ クラス内などで宣言したりします
enum BoxType
{
B_NORMAL, // 普通の箱0
B_FLY, // 一段上がる箱1
B_START, // スタート箱2
B_GOAL, // ゴール箱3
B_MAX, // 箱の種類の数4
};
定数はすべて大文字で命名することによって周りの関数や変数との差別化を図っています。
定数を#defineでやっていた方もいたと思うのですが、enum やstatic const を使用していきましょう。
enumは種類を表す時、static constは種類のない定数を表す時に使用します。この点に関しては定数についてという記事を書きます。
#defineはただの置き換えなので、意図しない置き換えが発生したり、デバッグ時に確認ができないなどのデメリットがあります。
各割り当てられた定数はコメントの一番右に記述しています。
補足
コードルールは人さまざまです。例えば、
int Load( const char* c_filename );
int Load( const char* _cFileName );
int Load( const char* _FileName );
int Load( const char* _lpFileName );
int Load( const char* c_pFileName );
引数ひとつにとっても、いろいろな書き方があります。
まとめ
自分なりのルールを決めてそれにしたがってプログラムしていくことが大事ということです。
byリーダ和田
PR
COMMENT
No Title
定数の説明文、”enumは種類を表す時、stati constは種類のない定数..."において、"static"と思われる箇所が"stati"となっております。ご確認ください。
No Title
報告して頂いた箇所を修正しました。
ご指摘ありがとうございます。