画像を一定時間表示するプログラムが作れません・・・
Posted: 2013年8月20日(火) 09:56
プログラミング超初心者なのですが、いろいろなサイトを参考にしたのですが分からなかったので質問します。
簡単にいうと、質問に対して、Zを押したらAの画像を1秒表示、Xを押したらBの画像を1秒表示するというプログラムを作成したいのです。
しかし、以下のようなプログラムを実行すると、
Zを押す→一秒待つ→Aの画像→次の質問
というようになってしまいます。
これを
Zを押す→Aの画像→一秒待つ→次の質問
というように動かすためにはどうすればよいのでしょうか?
何分初めて本格的なプログラムを組んでいるので、見づらいところもあるかもしれません。申し訳ありません。
#include "DxLib.h"
//プロトタイプ宣言
int sitsumon(int);
int hentou(int,int);
//キー入力に関する処理
int Key[256];
//キーの入力状態を更新する
int gpUpdateKey() {
char tmpKey[256]; //現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); //全てのキーの入力状態を得る
for( int i=0 ; i<256 ; i++ ){
if( tmpKey != 0 ){ //i番のキーコードに対応するキーが押されたら
Key++; //加算
} else { //押されていなければ
Key = 0; //0にする
}
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
DxLib_Init();
//宣言
int i;
int seigo;
//画像処理
int Handle[5];
Handle[0] = LoadGraph( "Z.png" );
Handle[1] = LoadGraph( "X.png" );
Handle[2] = LoadGraph( "A.png" );
Handle[3] = LoadGraph( "B.png" );
DrawGraph ( 0, 380, Handle[0], TRUE );
DrawGraph ( 540, 380, Handle[1], TRUE );
//質問についての処理
for ( i=1 ; i<=2 ; i++ ){
sitsumon(i);
//入力処理
int A;
while( gpUpdateKey()==0 )
{
if( Key[ KEY_INPUT_Z ]==1 ){
A = 1;
break;
}
if( Key[ KEY_INPUT_X ]==1 ){
A = 2;
break;
}
//windoes依存のメッセージ処理を行う
if ( ProcessMessage() == -1 ) break;
}
//回答を判断
hentou = hentou(i,A);
if ( hentou == 1 ){
DrawGraph( 0, 0, Handle[2], FALSE );
} else {
DrawGraph( 0, 0, Handle[3], FALSE );
}
Sleep( 1000 );
}
//Escキーが入力されたら終了
while( 1 ){
ProcessMessage();
if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ){
break;
}
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
//質問の表示
int sitsumon(int i)
{
//画像格納
int Gazou[2];
Gazou[ 1] = LoadGraph( "sitsumon01.png" );
Gazou[ 2] = LoadGraph( "sitsumon02.png" );
//画像描画
DrawGraph ( 192, 50, Gazou, TRUE );
return 0;
}
//入力された答えを判断
int hentou(int i, int A)
{
int kotae=0;
//質問1
if ( i==1 ){
if ( A == 1 ){
kotae = 1;
}
}
//質問2
if ( i==2 ){
if ( A == 2 ){
kotae = 1;
}
}
return kotae;
}
簡単にいうと、質問に対して、Zを押したらAの画像を1秒表示、Xを押したらBの画像を1秒表示するというプログラムを作成したいのです。
しかし、以下のようなプログラムを実行すると、
Zを押す→一秒待つ→Aの画像→次の質問
というようになってしまいます。
これを
Zを押す→Aの画像→一秒待つ→次の質問
というように動かすためにはどうすればよいのでしょうか?
何分初めて本格的なプログラムを組んでいるので、見づらいところもあるかもしれません。申し訳ありません。
#include "DxLib.h"
//プロトタイプ宣言
int sitsumon(int);
int hentou(int,int);
//キー入力に関する処理
int Key[256];
//キーの入力状態を更新する
int gpUpdateKey() {
char tmpKey[256]; //現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); //全てのキーの入力状態を得る
for( int i=0 ; i<256 ; i++ ){
if( tmpKey != 0 ){ //i番のキーコードに対応するキーが押されたら
Key++; //加算
} else { //押されていなければ
Key = 0; //0にする
}
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
DxLib_Init();
//宣言
int i;
int seigo;
//画像処理
int Handle[5];
Handle[0] = LoadGraph( "Z.png" );
Handle[1] = LoadGraph( "X.png" );
Handle[2] = LoadGraph( "A.png" );
Handle[3] = LoadGraph( "B.png" );
DrawGraph ( 0, 380, Handle[0], TRUE );
DrawGraph ( 540, 380, Handle[1], TRUE );
//質問についての処理
for ( i=1 ; i<=2 ; i++ ){
sitsumon(i);
//入力処理
int A;
while( gpUpdateKey()==0 )
{
if( Key[ KEY_INPUT_Z ]==1 ){
A = 1;
break;
}
if( Key[ KEY_INPUT_X ]==1 ){
A = 2;
break;
}
//windoes依存のメッセージ処理を行う
if ( ProcessMessage() == -1 ) break;
}
//回答を判断
hentou = hentou(i,A);
if ( hentou == 1 ){
DrawGraph( 0, 0, Handle[2], FALSE );
} else {
DrawGraph( 0, 0, Handle[3], FALSE );
}
Sleep( 1000 );
}
//Escキーが入力されたら終了
while( 1 ){
ProcessMessage();
if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ){
break;
}
}
DxLib_End(); //DXライブラリ終了処理
return 0;
}
//質問の表示
int sitsumon(int i)
{
//画像格納
int Gazou[2];
Gazou[ 1] = LoadGraph( "sitsumon01.png" );
Gazou[ 2] = LoadGraph( "sitsumon02.png" );
//画像描画
DrawGraph ( 192, 50, Gazou, TRUE );
return 0;
}
//入力された答えを判断
int hentou(int i, int A)
{
int kotae=0;
//質問1
if ( i==1 ){
if ( A == 1 ){
kotae = 1;
}
}
//質問2
if ( i==2 ){
if ( A == 2 ){
kotae = 1;
}
}
return kotae;
}