前回の問題は解決したのですが、新たにわからないところが出てきたので質問させてください。
DXライブラリにて簡単なタイピングプログラムを組んでいます。
ランダムでSeikaiから問題を出し、一文字ずつ成否を判定、すべての文字を入力が正解すると、次の問題へというプログラムを作りたいのですが、ランダムの部分がうまく動作しません。
問題が表示され、文字入力を行うと途中で問題がランダムで切り替わってしまいます。
GetRandの配置がおかしいのかと思い、グローバル変数にしてみたところ、入力、成否の判定はできるのですが、問題がランダムになりません。
#include "DxLib.h"
int Cr = GetColor(255, 255, 255); // 白の色コードを取得
typedef enum {
eScene_syoki,
eScene_Game,
}eScene;
static int Scene = eScene_syoki;//初期画面
void UpdateScene() {//状態の更新
if (CheckHitKey(KEY_INPUT_RETURN) != 0) {
Scene = eScene_Game;
}
}
void Game(char Seikai[], int n) {//入力、判定の関数
static int i = 0;
static char Nyuryoku;
static char Nyuryoku_end[30];
Nyuryoku = GetInputCharWait(TRUE);//文字入力バッファから一文字取得
if (Nyuryoku != 0 && Nyuryoku >= CTRL_CODE_CMP) {
Nyuryoku_end[i] = Nyuryoku;
if (Seikai[i] == Nyuryoku) {
i++;
}
else {
DrawFormatString(310, 260, GetColor(250, 0, 0), "×");
}
Nyuryoku_end[i] = '\0';
DrawFormatString(240, 300, Cr, Nyuryoku_end);
if (i == n) {
i = 0;
DrawFormatString(640 / 2 - 40, 200, Cr, "正解です");
return;
}
}
}
void syoki() {//初期状態
DrawFormatString(640 / 2 - 130, 240 - 32, Cr, "Enterを押すとスタートします。"); // 文字を描画する
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0,CheckHitKey(KEY_INPUT_ESCAPE)==0) {
int StrLen_S;
char *Seikai[] = { "haro-","ganbare","kansei","dekiru" };
int j = GetRand(3);
StrLen_S = strlen(Seikai[j]);
switch (Scene) {
case eScene_Game:
DrawFormatString(640 / 2, 50, Cr, Seikai[j]);
Game(Seikai[j],StrLen_S);
break;
case eScene_syoki:
syoki();
break;
}
UpdateScene();
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
出来ればどこが間違っていて、どの用に修正すればよいのかを教えていただきたいです。
もしくはそれ以前の問題なのでしょうか?
よろしくお願いします。