このプログラムがどんな処理をしているのか理解できません。
Posted: 2012年1月27日(金) 12:50
私は、C言語を軽くかじった程度初心者です。
このジャンケンゲームなのですが(サンプルプログラミングの館にあるソース)
全体の構造は軽く理解できるのですが
一つ一つの処理がどう行われているのか全然わかりません。
たくさん質問すると答えるのに苦労しますので分割で質問させてもらいます。
①//フラグの初期化
void ini(){
memset(sound_flag,0,sizeof(int)*5);//
}
これは具体的に何をしているのかわかりません。
どんな処理をしているのか教えてくれませんか?
#include "DxLib.h"
int img[3],sound[5];//画像、音楽
int Key[256];//キー
int player,com,state;//プレイやー、コンピュータ、状態
int sound_flag[5],sound_state;//再生フラグ、再生状態
//入力処理
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
//最初の初期化
void first_ini(){
player =-1;
com =-1;
state =-1;
sound_state=0;//未再生
SetFontSize(20);
}
//フラグの初期化
void ini(){
memset(sound_flag,0,sizeof(int)*5);
}
//リセット
void reset(){
//再生フラグがオフなら
if(sound_state==0){
sound_flag[0]=1;//ジャンケン・・
sound_state=1;//再生した状態に変更
}
if(Key[KEY_INPUT_RETURN]==2)//エンターが押されていたら
first_ini();//最初の初期化
}
//ロード
void load(){
img[0]=LoadGraph("dat/0.PNG");
img[1]=LoadGraph("dat/1.PNG");
img[2]=LoadGraph("dat/2.PNG");
sound[0]=LoadSoundMem("dat/ジャンケン.wav");
sound[1]=LoadSoundMem("dat/あいこで.wav");
sound[2]=LoadSoundMem("dat/やったね.wav");
sound[3]=LoadSoundMem("dat/ポコ.wav");
}
//ジャンケン処理
void calc_janken(){
if(player!=com){
if(player == (com+1)%3){
state=1;//負け状態
sound_flag[3]=1;
}
else{
state=2;//勝ち状態
sound_flag[2]=1;
}
}
else{
state=0;//あいこ状態
sound_flag[1]=1;
}
}
//入力処理
void input_janken(){
if(!(state==-1 || state==0))//まだ未入力か、あいこじゃないなら処理しない
return ;
//何か入力があれば
if(Key[KEY_INPUT_0]==2 || Key[KEY_INPUT_1]==2 || Key[KEY_INPUT_2]==2){
if(Key[KEY_INPUT_0]==2)//グーなら
player=0;
if(Key[KEY_INPUT_1]==2)//チョキなら
player=1;
if(Key[KEY_INPUT_2]==2)//パーなら
player=2;
com=GetRand(2);//コンピュータの入力
calc_janken();//ジャンケン処理
}
}
//描画
void graph_janken(){
DrawFormatString( 0, 0,GetColor(255,255,255),"%s","Enterキーでリセット 0:グー 1:チョキ 2:パー");
if(state==-1)
DrawFormatString(150,50,GetColor(255,255,255),"%s","ジャンケン・・・");
else if(state==0)
DrawFormatString(150,50,GetColor(255,255,255),"%s","あいこで・・・・");
else if(state==1)
DrawFormatString(150,50,GetColor(255,255,255),"%s","******ポコ******");
else
DrawFormatString(150,50,GetColor(255,255,255),"%s","***やったね!***");
DrawFormatString(150,130,GetColor(255,255,255),"%s","相手:");
DrawFormatString(150,310,GetColor(255,255,255),"%s","自分:");
if(0<=player && player<=2)
DrawGraph(320,100,img[com],TRUE);
if(0<=com && com<=2)
DrawGraph(320,280,img[player] ,TRUE);
}
//音楽再生
void play_sound(){
for(int i=0;i<5;i++){
if(sound_flag[i]==1){
PlaySoundMem(sound[i],DX_PLAYTYPE_BACK);
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
first_ini();//初期化
load();//画像ロード
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
ini();//フラグの初期化
reset();//リセット
input_janken();//入力させる
graph_janken();//描画
play_sound();//音楽再生
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了
return 0;
}
全体の構造は軽く理解できるのですが
一つ一つの処理がどう行われているのか全然わかりません。
たくさん質問すると答えるのに苦労しますので分割で質問させてもらいます。
①//フラグの初期化
void ini(){
memset(sound_flag,0,sizeof(int)*5);//
}
これは具体的に何をしているのかわかりません。
どんな処理をしているのか教えてくれませんか?