ループについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

ループについて

#1

投稿記事 by » 15年前

初心者です。助けてください。
ステージを終えた際に再びハイスコア以外を初期化し、メインメニュー(難易度選択画面)に無限ループさせたいのですが、そのプログラムはmain.cppにfor文、while文等で記述するのでしょうか?

またステージ中にESCを押してポーズメニューを開いた場合、同様の処理(メインメニューに戻る、リトライ等)もmain.cppに記述するのでしょうか?

Re:ループについて

#2

投稿記事 by » 15年前

多少自分で改善したのですが何故か綺麗にループ出来ないままです。
敵の出現のエクセルデータ及びボスキャラの出現が出来ないままです。
自分が加えた部分はリトライor戻る選択部分と選択の上下移動。
ini部分のコピーペースト、初期パワーと残機数ぐらいです。

main.cpp

#define GLOBAL_INSTANCE
#include "../include/GV.h"

//ループで必ず行う3大処理
int ProcessLoop(){

}
int GetHitKeyStateAll_2(int KeyStateBuf[/url]){

}
void char_disp(int White,int y){
DrawString( 150 , y , "・" , White );
DrawString( 170 , 100 , "ステージをリトライ" , White );
DrawString( 170 , 120 , "戻る" , White );
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
int Key[256];
int White , y=100;
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
White = GetColor( 255 , 255 , 255 ) ; //色の取得
int back_knd[DANMAKU_MAX]={
0,1,0,1,1,
};
int boss_hp[DANMAKU_MAX]={

変更していないので略します

fps_wait(); enter_func_tm("待機した時間",1);
if(CheckStateKey(KEY_INPUT_ESCAPE)==1){//エスケープが入力されたらブレイク
while(ProcessMessage()==0 && ClearDrawScreen()==0 &&GetHitKeyStateAll_2(Key)==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存       ↑ESCが押されていない

char_disp(White,y); // 文字を描画
if( Key[KEY_INPUT_DOWN]==1 || Key[KEY_INPUT_UP]==1 ){

}

if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y+=20;
if(y==140) // y座標が260なら(選択が一番下なら)
y=100; // 選択座標を一番上に
}
if( Key[KEY_INPUT_UP]==1 ||( Key[KEY_INPUT_UP]%5==0 && Key[KEY_INPUT_UP]>30)){
y-=20;
if(y==80)
y=120;
}
if(y == 100 && Key[KEY_INPUT_Z] ==1){
StopSoundMem(area.bgm.handle) ;
area.bgm.flag=1;
stage_count=1;
memset(&ch,0,sizeof(ch_t));
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
memset(lazer,0,sizeof(lazer_t)*LAZER_MAX);
memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
memset(shot,0,sizeof(shot_t)*SHOT_MAX);
memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
memset(&bom,0,sizeof(bom_t));
memset(&bright_set,0,sizeof(bright_set_t));
memset(&dn,0,sizeof(dn_t));
memset(&boss,0,sizeof(boss_t));
memset(child,0,sizeof(child_t)*CHILD_MAX);
memset(&stage_title,0,sizeof(stage_title_t));
memset(item,0,sizeof(item_t)*ITEM_MAX);
memset(&area,0,sizeof(area_t));//(48)
memset(option_bb,0,sizeof(option_bb_t)*2);//(49)

ch.x=FMX/2;
ch.y=FMY*3/4;
ch.power=0;//初期パワー(41)
ch.num=3;//初期残機数(41)

stage_title.appear_cnt=stage_title_count[stage];

/*弾幕それぞれの設定。後々きちんと設定しましょう。*/
// boss.appear_count[0]=1700;//中ボスが出現する時刻(42)
boss.appear_count[0]=1650;//中ボスが出現する時刻(42)(47)
boss.appear_count[1]=2850;//最後ボスが出現する時刻(44)(47)

boss.danmaku_num[0]=1;//中ボスが何個目までの弾幕を出すか
boss.danmaku_num[1]=4;//最後に出るボスが何個目までの弾幕を出すか(47)

for(int i=0;i<DANMAKU_MAX;i++){//弾幕それぞれのHP(47)
boss.set_hp=boss_hp;
}
boss.hp_max=boss.set_hp[0];
for(int i=0;i<DANMAKU_MAX;i++)//弾幕それぞれの背景の種類
boss.back_knd=back_knd;
/*ここまで*/
if(area.bgm.flag==1){
area.bgm.flag=0;//音楽再生フラグを初期化(48)
area.bgm.knd[0]=0;//通常BGMをどういうタイミングで再生するか、取り決めはmusic.cpp(48)
area.bgm.knd[1]=0;//ボスBGMをどういうタイミングで再生するか、取り決めはmusic.cpp(48)
area.bgm.loop_pos[0]=26672;//通常BGMのループ位置(48)
area.bgm.loop_pos[1]=27010;//ボスBGMのループ位置(48)
}
option_bb[0].img=img_cshot[2];//オプションボンボンの画像代入(49)
option_bb[1].img=img_cshot[2];

bright_set.brt=255;//初期輝度は最大
break;
}
if(y == 120 && Key[KEY_INPUT_Z]==1){
break;

ScreenFlip();//裏画面反映
}
}
ScreenFlip();//裏画面反映
count++;
}
DxLib_End();//DXライブラリ終了処理
return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る