クリアー表示の仕方
Posted: 2009年3月05日(木) 11:31
度々すみません、どうしてもわからないことがあります。
全部敵を捕まえたらゲームがストップして、ゲームクリアーの表示のやり方を教えていただけないでしょうか?
全部敵を捕まえたらゲームがストップして、ゲームクリアーの表示のやり方を教えていただけないでしょうか?
#include "DxLib.h"
#define MAX_ENEMY 6
(略)
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
int ch_image[16],enemy_image[16],
i,j;
int catch_enemy;
ch_t ch;//自キャラ
enemy_t enemy[12];//敵キャラ
catch_enemy = 0; //捕まえた敵の数の初期化
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
/*代入(初期化)*/
ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;
for(i=0;i<6;++i)
{
while(1)
{
enemy.x=GetRand(20-1);
enemy.y=GetRand(15-1);
if(hantei[enemy.y][enemy.x]==0)
{
enemy.x*=32;
enemy.y*=32;
break;
}
}
enemy.walking_flag=0;
enemy.muki=GetRand(3);
enemy.exist=0;
enemy.bright_operation=255;
}
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , ch_image ) ;//画像を分割してimage配列に保存(自キャラ)
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , enemy_image );//敵キャラ
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
/*白い壁を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[i][j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
chara_walk(&ch,enemy,6);
ch.img=ch_image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
for(i=0;i<6;++i)
{
if(enemy[i].exist==0)//敵が存在していたら
{
enemy_walk(&enemy[i]);
enemy[i].img=enemy_image[(enemy[i].x%32+enemy[i].y%32)/8 + enemy[i].muki*4];
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
}
else//当たったらフェードアウト
{
if(enemy[i].bright_operation!=0)
{
SetDrawBlendMode(DX_BLENDMODE_ALPHA,enemy[i].bright_operation--);
DrawGraph( enemy[i].x , enemy[i].y , enemy[i].img , TRUE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
if(enemy[i].bright_operation == 254) //もし敵を捕まえたら
catch_enemy++;
}
}
}
if(catch_enemy >= MAX_ENEMY) //すべての敵を捕まえたら
printfDx("GAME SET");
ScreenFlip();
}
DxLib_End();
return 0;
}(略)
while( )
{
switch (func_state){
case 0:
/*---------------------------------------------------------------
ゲームの処理
先ほどのサンプルのほとんどがここに来ます。
>>if(catch_enemy >= MAX_ENEMY) //すべての敵を捕まえたら
>> printfDx("GAME SET");
この条件を、case 0にジャンプするようにします。
---------------------------------------------------------------*/
break;
case 1:
/*全敵捕獲後の処理*/
break;
default:
/*func_stateが0, 1以外になってしまった時の例外処理*/
}
}
こんな感じでいいでしょう。while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])
{
}
のしたにつけるものではないですよ。