龍神録プログラミングの館10章 ゲームの初期化について
Posted: 2013年2月08日(金) 00:43
龍神録プログラミングの館をいろいろと勉強しながら10章まで進めてきました。
10章のゲームの初期化を行っている関数について分からない部分があるためご質問致します。
上記関数の中の
memset(&ch,0,sizeof(ch_t));
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
部分の処理がいまいちよく分かりません。
自分なりにmemset内の処理を調べてみたところ&chが示す領域を0でch_tバイト分埋めるらしいので
memset(&ch,0,sizeof(ch_t));に関しては
↓
typedef struct{
int flag;=0 //フラグ
int cnt=0; //カウンタ
int power=0; //パワー
int point=0; //ポイント
int score=0; //スコア
int num=0; //残機数
int mutekicnt=0; //無敵状態とカウント
int shot_mode=0; //ショットモード
int money=0; //お金
int img=0; //画像
int slow=0; //スローかどうか
double x=0,y=0; //座標
}ch_t;
というようにch_tのint型の変数とdouble型の変数に0を格納して初期化する。
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);に関しては
↓
typedef struct{
int flag=0; //フラグ
int cnt=0; //カウンタ
int pattern=0; //移動パターン
int muki=0; //向き
int knd=0; //敵の種類
int hp=0; //敵のHP
int hp_max=0; //HP最大値
int item_n[6]=0; //落とすアイテム
int img=0; //画像
double x=0; //x座標
double y=0; //y座標
double vx=0; //速度x成分
double vy=0; //速度y成分
double sp=0; //スピード
double ang=0; //角度
int bltime; //弾幕開始時間
int blknd=0; //弾幕の種類
int blknd2=0; //弾の種類
int col=0; //色
int state=0; //状態
int wtime;=0 //待機時間
int wait=0; //停滞時間
}enemy_t;
同じようにintとdouble型の変数に0を格納して初期化する。これが*ENEMY_MAX分だけある。
というような処理が行われているのではと考えているのですがこれで正しいでしょうか。
あと一つmemsetの第一引数がchでは&がついてポインタ型になっておりenemyには&がついていないの
ですがこちらに関しましてどのような違いがあるのでしょうか。どなたかご教授の程お願い致します。
10章のゲームの初期化を行っている関数について分からない部分があるためご質問致します。
void ini(){
stage_count=1;
memset(&ch,0,sizeof(ch_t));//自機データの初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}
上記関数の中の
memset(&ch,0,sizeof(ch_t));
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
部分の処理がいまいちよく分かりません。
自分なりにmemset内の処理を調べてみたところ&chが示す領域を0でch_tバイト分埋めるらしいので
memset(&ch,0,sizeof(ch_t));に関しては
↓
typedef struct{
int flag;=0 //フラグ
int cnt=0; //カウンタ
int power=0; //パワー
int point=0; //ポイント
int score=0; //スコア
int num=0; //残機数
int mutekicnt=0; //無敵状態とカウント
int shot_mode=0; //ショットモード
int money=0; //お金
int img=0; //画像
int slow=0; //スローかどうか
double x=0,y=0; //座標
}ch_t;
というようにch_tのint型の変数とdouble型の変数に0を格納して初期化する。
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);に関しては
↓
typedef struct{
int flag=0; //フラグ
int cnt=0; //カウンタ
int pattern=0; //移動パターン
int muki=0; //向き
int knd=0; //敵の種類
int hp=0; //敵のHP
int hp_max=0; //HP最大値
int item_n[6]=0; //落とすアイテム
int img=0; //画像
double x=0; //x座標
double y=0; //y座標
double vx=0; //速度x成分
double vy=0; //速度y成分
double sp=0; //スピード
double ang=0; //角度
int bltime; //弾幕開始時間
int blknd=0; //弾幕の種類
int blknd2=0; //弾の種類
int col=0; //色
int state=0; //状態
int wtime;=0 //待機時間
int wait=0; //停滞時間
}enemy_t;
同じようにintとdouble型の変数に0を格納して初期化する。これが*ENEMY_MAX分だけある。
というような処理が行われているのではと考えているのですがこれで正しいでしょうか。
あと一つmemsetの第一引数がchでは&がついてポインタ型になっておりenemyには&がついていないの
ですがこちらに関しましてどのような違いがあるのでしょうか。どなたかご教授の程お願い致します。