for文の繰り返し回数
Posted: 2011年10月22日(土) 00:34
毎回お世話になっております。
一定時間表示された数字を記憶し、それをこたえていくゲームを作っています。
画像の表示時間を調整しようとfor文を用いたのですが、60回くりかえすように記述したはずが、一度しか処理されません。(画像が一瞬だけ表示されて消えます。)
何が原因なのでしょうか?
「seikai」と「matigai」の関数の部分です。
開発環境はDXライブラリ Microsoft Visual C++ 2010です。
ビルドログ
1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug Win32 ------
1> test.cpp
1>c:\users\hajime\desktop\gameprog\test.cpp(135): warning C4789: メモリ コピーのターゲットが小さすぎます
1>c:\users\hajime\desktop\gameprog\test.cpp(136): warning C4789: メモリ コピーのターゲットが小さすぎます
1> GameProg.vcxproj -> C:\Users\hajime\Desktop\GameProg\Debug\GameProg.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
一定時間表示された数字を記憶し、それをこたえていくゲームを作っています。
画像の表示時間を調整しようとfor文を用いたのですが、60回くりかえすように記述したはずが、一度しか処理されません。(画像が一瞬だけ表示されて消えます。)
何が原因なのでしょうか?
「seikai」と「matigai」の関数の部分です。
開発環境はDXライブラリ Microsoft Visual C++ 2010です。
ビルドログ
1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug Win32 ------
1> test.cpp
1>c:\users\hajime\desktop\gameprog\test.cpp(135): warning C4789: メモリ コピーのターゲットが小さすぎます
1>c:\users\hajime\desktop\gameprog\test.cpp(136): warning C4789: メモリ コピーのターゲットが小さすぎます
1> GameProg.vcxproj -> C:\Users\hajime\Desktop\GameProg\Debug\GameProg.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
#include "DxLib.h"
#include "キーボードモジュール.h"
int ketteion;//キー操作音格納変数
int sentakuon[1];//キー操作音格納変数
int i;
int Ready;//レベルごとの開始待機用
int G_Lv[6];//レベル表示の画像
int anntenn;//暗転用画像
int taitoru;//タイトル画面の画像
int a[5] = {250,300,350,400,450};//矢印の座標格納
int houkouKey;//矢印の画像
int gameover;//ゲームオーバーの画像格納変数
int HP;//ライフゲージの画像格納変数(未使用)
int d;//選択番号
int mode;/*現在のゲームモード*/
int furagu[30];//判定用変数
int Lv1[3];//レベルごとの問題の乱数を格納
int LvA;//キーボードからの数値を格納し、成否を判定する
int stage;//ステージの判定変数
int LIFE=3;//残りのHP
int TRUE_A;//正解の画像格納変数
int NO_A;//不正解の画像格納変数
//正解した時の画像処理
void seikai(){int c;
c=0;
for(c=0;c <= 60;c++){//一秒間表示
DrawGraph(0,0,TRUE_A,TRUE);//正解の画像の表示
}
}
void matigai(){int c;
c=0;
for(c=0;c <= 60;c++){//一秒間表示
DrawGraph(0,0,NO_A,TRUE);//不正解の画像の表示
}
}
void taitoru_syokika(){
Ready=LoadGraph("画像/レディ?.png");
taitoru = LoadGraph("画像/無題.png");
houkouKey = LoadGraph("画像/方向キー右.png");
sentakuon[0]=LoadSoundMem("効果音/キー移動音.ogg");
ketteion=LoadSoundMem("効果音/決定音.ogg");
anntenn=LoadGraph("画像/暗転.png");
G_Lv[0]=LoadGraph("画像/レベル0.png");
G_Lv[1]=LoadGraph("画像/レベル1.png");
G_Lv[2]=LoadGraph("画像/レベル2.png");
G_Lv[3]=LoadGraph("画像/レベル3.png");
G_Lv[4]=LoadGraph("画像/レベル4.png");
G_Lv[5]=LoadGraph("画像/レベル5.png");
TRUE_A=LoadGraph("画像/正解.png");
NO_A=LoadGraph("画像/失敗.png");
gameover=LoadGraph("画像/ゲームオーバー.png");
HP=LoadGraph("画像/ライフ.png");
furagu[2]=1;//最初のレベルを1に設定
}
void taitoru_enzan(){ if(Keyboard_Get(KEY_INPUT_DOWN) == 1){ d = (d + 1 ) % 5 ;/*下が押されたら選択番号を下げる*/
PlaySoundMem(sentakuon[0],DX_PLAYTYPE_BACK,TRUE);}
if(Keyboard_Get(KEY_INPUT_UP)== 1 ){ d = (d + 4 ) % 5;//上が押されたら選択番号を上げる
PlaySoundMem(sentakuon[0],DX_PLAYTYPE_BACK,TRUE);}
if(Keyboard_Get(KEY_INPUT_RETURN)==1 && d==0){PlaySoundMem(ketteion,DX_PLAYTYPE_BACK,TRUE);
mode=1;
}
if(Keyboard_Get(KEY_INPUT_RETURN)==1 && d==1){mode=26;}
if(Keyboard_Get(KEY_INPUT_RETURN)==1 && d==3){mode=27;}
}
void taitoru_byouga(){
DrawGraph( 0, 0, taitoru,TRUE);
DrawFormatString( 400,250,GetColor(255,255,255),"ゲームスタート");
DrawFormatString( 400,300,GetColor(255,255,255),"記録回覧");//未実装
DrawFormatString( 400,350,GetColor(255,255,255),"ヘルプ");//未実装
DrawFormatString( 400,400,GetColor(255,255,255),"設定");//未実装
DrawFormatString( 400,450,GetColor(255,255,255), "ゲーム終了");
DrawGraph(383,a[d],houkouKey,TRUE);//方向キーを選択番号に対応
} //画像の描画
void GameMain_Mondai1(){
static int count;
count++;
if(count==1){Lv1[0] = GetRand(9999);}//4桁の数をランダムで表示
if(Lv1[0]<=1000){Lv1[0] = 1000+Lv1[0];}//数が3ケタだった場合4桁に修正する。
if(count<=60){DrawFormatString( 300,230,GetColor(255,255,255),"%d",Lv1[0]);}//一秒たつまで問題を表示
if(count>=60){count=0;
mode=4;}}//問題を表示し終わったらカウンターを初期化し、回答処理へ
void GameMain_answer1(){DrawFormatString( 230,180,GetColor(255,255,255),"4桁の数字を入力してください");
LvA = KeyInputNumber( 230 , 200 , 9999 , 0 , FALSE );//9999の数まで数値を受け付ける
if(LvA == Lv1[0]){seikai();//正解した場合、画像処理を行い
stage=stage+1;//正解数を加算
}
else{ matigai();//不正解だった場合、不正解の画像処理を行い
LIFE= LIFE-1;}//ライフゲージを1減らす。
if(stage==3){mode=1;}//三回正解したらレベル振り分けのクラスへ
else{if(LIFE==0){mode=25;}//ライフゲージが0になったらゲームオーバの処理へ
else{mode=3;}}//その他の場合もう一度このレベルで出題
}
void GameMain_Mondai2(){
static int count;
count++;
if(count==1){Lv1[2] = GetRand(9999);}//4桁の数をランダムで表示
if(Lv1[2]<=1000){Lv1[2] = 1000+Lv1[2];}//数が3ケタだった場合4桁に修正する。
if(count<=40){DrawFormatString( 300,230,GetColor(255,255,255),"%d",Lv1[2]);}
if(count>=40){count=0;
mode=7;}}
void GameMain_answer2(){DrawFormatString( 230,180,GetColor(255,255,255),"4桁の数字を入力してください");
LvA = KeyInputNumber( 230 , 200 , 9999 , 0 , FALSE );
if(LvA == Lv1[2]){DrawGraph(0,0,TRUE_A,TRUE);
stage=stage+1;}
else{DrawGraph(0,0,NO_A,TRUE);
LIFE= LIFE-1;}
if(stage==3){mode=1;}
else{if(LIFE==0){mode=25;}
else{mode=6;}}}
void GameMain_Mondai3(){
static int count;
count++;
if(count==1){Lv1[3] = GetRand(89999);}//4桁の数をランダムで表示
if(Lv1[3]<=10000){Lv1[3] = 1000+Lv1[3];}//数が3ケタだった場合4桁に修正する。
if(count<=60){DrawFormatString( 300,230,GetColor(255,255,255),"%d",Lv1[3]);}
if(count>=60){count=0;
mode=10;}}
void GameMain_answer3(){DrawFormatString( 230,180,GetColor(255,255,255),"5桁の数字を入力してください");
LvA = KeyInputNumber( 230 , 200 , 99999 , 0 , FALSE );
if(LvA == Lv1[3]){DrawGraph(0,0,TRUE_A,TRUE);
stage=stage+1;}
else{DrawGraph(0,0,NO_A,TRUE);
LIFE= LIFE-1;}
if(stage==3){mode=1;}
else{if(LIFE==0){mode=25;}
else{mode=9;}}}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
taitoru_syokika();//画像処理
// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
Keyboard_Update();//キーボードモジュールの読み込み
switch(mode){
case 0: taitoru_enzan();//タイトル画面の演算
if(Keyboard_Get(KEY_INPUT_RETURN)==1 && d==4){
PlaySoundMem(ketteion,DX_PLAYTYPE_BACK,TRUE);
DxLib_End(); // DXライブラリ終了処理
return 0;break;}
taitoru_byouga();//タイトル画面の表示
ScreenFlip();//画像を反転
break;
case 1:i++;//各レベルへの振り分け。
DrawGraph(0,0,G_Lv[furagu[2]],TRUE);//レベルに対応した画像を表示
if(i==60){i=0;//一秒表示したらカウンターを初期化
furagu[2]++;//レベルアップ
stage=0;//正解数初期化
if(furagu[2]==2){mode=2;}//レベル1へ
if(furagu[2]==3){mode=5;}//レベル2へ
if(furagu[2]==4){mode=8;}//レベル3へ
if(furagu[2]==5){mode=11;}}//レベル4へ(未実装)
break;
//以下レベル1
case 2: DrawGraph(0,0,Ready,TRUE);
if(Keyboard_Get(KEY_INPUT_SPACE)==1){
mode=3;}
break;
case 3:GameMain_Mondai1();break;
case 4:GameMain_answer1();break;
//以下レベル2
case 5: DrawGraph(0,0,Ready,TRUE);
if(Keyboard_Get(KEY_INPUT_SPACE)==1){
mode=6;}
break;
case 6:GameMain_Mondai2();break;
case 7:GameMain_answer2();break;
//以下レベル3
case 8:DrawGraph(0,0,Ready,TRUE);
if(Keyboard_Get(KEY_INPUT_SPACE)==1){
mode=9;}
break;
case 9 :GameMain_Mondai3();break;
case 10:GameMain_answer3();break;
//ゲームオーバーの処理
case 25:DrawGraph(0,0,gameover,TRUE);
if(Keyboard_Get(KEY_INPUT_SPACE)==1){furagu[2]=0;mode=0;}
break;
case 26:break;}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}