すごく丁寧な解説ありがとうございます。
27行目のKEY_INPUT_RETURNをKEY_INPUT_Zに変えました。
名前を入力すると、27行目のKEY_INPUT_RETURNが続けて認識されるみたいなのですが
そうならないようにするにはどうしたらよいのですか?
コード:
#include "DxLib.h"
#include "Keyboard.h"
void yesno(int *x);
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen( DX_SCREEN_BACK );
char pn[21];
strcpy( pn , "aaaa" ) ;//とりあえずの名前
int state;
enum { STATE_NAME_INPUT,STATE_NAME_KAKUNIN,STATE_NEXT };
state=STATE_NAME_INPUT;
int x=185;
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){//ここから繰り返し
Keyboard_Update();
switch(state) {
case STATE_NAME_INPUT: //名前の入力処理
KeyInputString( 0 , 0 , 20 , pn , TRUE ) ;//名前を入力
state=STATE_NAME_KAKUNIN;
break;
case STATE_NAME_KAKUNIN://名前の確認
DrawFormatString( 0 , 15 ,GetColor( 255 , 255 , 255 ), "名前は%sでよろしいですか?" , pn ) ;
yesno(&x);// yes/noを選択してもらう
if(Keyboard_Get( KEY_INPUT_Z) ==1){
if(x==185){
state=STATE_NEXT;
}
if(x==235){
state=STATE_NAME_INPUT;
}
}
break;
case STATE_NEXT: //その後の処理
DrawString( 0 , 30 , "あなたの名前は" , GetColor( 255 , 255 , 255 ) ) ;
DrawFormatString( 0 , 45 , GetColor( 255 , 255 , 255 ),"%sです。",pn ) ;
break;
}
}
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
void yesno(int *x){
DrawString( 200 ,300 , "YES" , GetColor( 255 , 255 , 255 ) ) ;
DrawString( 250 ,300 , "NO" , GetColor( 255 , 255 , 255 ) ) ;
DrawString( *x ,300 , "→" , GetColor( 255 , 255 , 255 ) ) ;
if( Keyboard_Get( KEY_INPUT_RIGHT) ==1 ){ // 右キーが押されていたら
if(*x==185){
*x=235;
}
else{
*x=185;
}
}
if( Keyboard_Get( KEY_INPUT_LEFT) ==1 ){
if(*x==185){
*x=235;
}
else{
*x=185;
}
}
}