ITPGとゲームPGの違い



IT系のプログラムの書き方とゲームのプログラムの書き方には、
違いがある。それをメモしていく。



・わかりやすさを求めるIT、速さを求めるゲーム
IT系ではあまり2次元配列やダブルポインタを使わず、純粋なC言語の配列にて
コーディングされることが多い。
たとえば、医療系の器具を作った時、もしバグったりしたら命にかかわる。
だから、絶対にミスを犯さないために構造をわかりやすくする必要がある。

逆に、ゲーム系は、なんでも一行に書ききる傾向がある。
1命令に1クロックかかるとすると、どうにもステップ数を気にする傾向があるからだ。
これは画像描写の関係で、すみやかに表示したい、メモリを使いたくないためである。
そのため、コード解析が難しく、複雑になりがち。
2次元配列やダブルポインタ、時には3DCGを表現するためにトリプルポインタも使ったりするのだから
市販に出ているゲームでさえ潜在バグがあることも少なくない。

■IT系のソート例
#include< stdio.h > #include< conio.h > #include< stdlib.h > #include< string.h > #include< time.h > void main(){ /* 宣言 */ int a[10]; /* ソート用配列 */ int i; /* 汎用カウンタ */ int l; /* 汎用カウンタ */ int work; /* 退避用変数 */ srand((int)time(NULL)); /* 初期化 */ for(i = 0; i < 10; i++) { a[i]=rand()%10; } i = 0; l = 0; work = 0; /* ソート */ for(i = 0; i < 10; i++) { for(l = 0 ; l < i; l++) { if(a[i] > a[l]) { work = a[i]; a[i] = a[l]; a[l] = work; } } } for(i = 0; i < 10; i++) { printf("%d\n",a[i]); } _getch(); } ■ゲーム系のソート例
#include< stdio.h > #include< conio.h > void main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; //ソート用配列 for( int *b=a , nLoopCnt = 0; nLoopCnt < 10; nLoopCnt++ , b++){ //ソート for( int *c=a ,nLoopCnt2 = 0; nLoopCnt2 < nLoopCnt; nLoopCnt2++,c++){ if(*b > *c){ *b ^= *c; *c ^= *b; *b ^= *c; } } } for(int *b = a,nLoopCnt = 0; nLoopCnt < 10; nLoopCnt++,b++){ printf("%d\n",*b); } _getch(); }

配列よりわかりにくいポインタを使う理由は、速さである。
ポインタを直接移動し、そのアドレスに直接値を入れるのと、
配列の先頭アドレスから何番目かの位置に値を入れるのでは、速さが違う。
後者では、『配列から何番目』(a[i])というのがすでに計算を必要とするため、
結果的に大プログラムでは速度が違ってくる。
ケータイゲームなどでその違いがはっきりしてくるだろう。



戻る