Re: 文字が望んでいるタイミングに出ない ( No.1 ) |
- 名前:サイゲン 日時:2019/01/04 19:06
追記
開発環境
Windows 、VisualStudio 2017
です
|
Re: 文字が望んでいるタイミングに出ない ( No.2 ) |
- 名前:yumetodo 日時:2019/01/04 21:59
なんとなくScreenFlip();のタイミングとかProcessMessage()を呼んでいないからキーイベントが拾えてないとかが問題なんだろうという気がする。
|
Re: 文字が望んでいるタイミングに出ない ( No.4 ) |
- 名前:サイゲン 日時:2019/01/05 13:06
4K職場様
参考プロブラムありがとうございます。
早速アドバイス通り,GetInputCharWaitをGetInputCharに変更したものの勝手に文字が取得されて不正解の無限ループに陥りました・・・。
また,文字の描写もされませんでした・・・。
以下変更したプログラムです
僕はC言語しかできず,また、これは学校の課題での自由作品で、作品を学校外に公開しなければ版権のものは使用可であるということを事前に書いておきます。
#include "DxLib.h"
#include <string.h>
void GameMain(int *miss, int *total, int i, const char *Answer[], const char *InputAnswer[], int FontHandle, int RED, int LIGHTBLUE);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
int FontHandle;
int i = 0;
int miss = 0;
int total = 0;
int RED, LIGHTBLUE;
const char *Answer[5] = { "斎藤 宏介","田淵 智也","鈴木 貴雄","フライデイノベルス","パンデミックサドンデス" };
const char *InputAnswer[5] = { "saitou kousuke","tabuti tomoya","suzuki takao","huraideinoberusu","pandemikkusadondesu" };
ChangeWindowMode(TRUE);
SetBackgroundColor(255, 255, 255);
if(DxLib_Init() == -1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
FontHandle = CreateFontToHandle(NULL, 20, 7);
LIGHTBLUE = GetColor(0, 255, 255);
RED = GetColor(255, 0, 0);
PlaySoundFile("01 Catch up, latency.mp3", DX_PLAYTYPE_BACK);
for (i = 0; i < 5; i++)
{
ClearDrawScreen();
GameMain(&miss, &total, i, Answer, InputAnswer, FontHandle, RED, LIGHTBLUE);
ScreenFlip();
}
StopMusic();
DeleteFontToHandle(FontHandle);
DxLib_End(); // DXライブラリ終了処理
return 0;
}
void GameMain(int *miss, int *total, int i, const char *Answer[], const char *InputAnswer[], int FontHandle, int RED, int LIGHTBLUE)
{
int j, len;
char Typing[2];
int a;
int MainHandle, MissHandle;
int MAIN_X, MAIN_Y, ANSWER_X, ANSWER_Y;
int FONT_SIZE;
FONT_SIZE = 11;
SetFontSize(20);
MainHandle = LoadGraph("バズリズム.jpg");
MissHandle = LoadGraph("バズリズム.jpg");
MAIN_X = 50;
MAIN_Y = 50;
ANSWER_X = 50;
ANSWER_Y = 50;
//ClearDrawScreen();
DrawFormatString(50, 0, GetColor(0, 0, 0), "%s",Answer[i]);
//DrawString(50, 0, Answer[i] , GetColor(0,0,0));
DrawString(50, 50, InputAnswer[i], GetColor(0,0,0));
len = GetStringLength(InputAnswer[i]);
*total += len;
ClearInputCharBuf();
for (j = 0; j < len; j++)
{
Typing[0]= GetInputChar(TRUE);
Typing[1] = '\0';
if (Typing[0] != InputAnswer[i][j])
{
(*miss)++;
Typing[0] = InputAnswer[i][j];
//DrawGraph(MAIN_X, MAIN_Y, MissHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE , ANSWER_Y, Typing, RED, FontHandle);
j--;
}
else
{
// 正解時の画像を表示
//DrawGraph(MAIN_X, MAIN_Y, MainHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE , ANSWER_Y,Typing, LIGHTBLUE, FontHandle);
}
}
*total += *miss;
//ScreenFlip();
}
|
Re: 文字が望んでいるタイミングに出ない ( No.6 ) |
- 名前:サイゲン 日時:2019/01/06 13:39
4K職場さま
ご回答ありがとうございます.
これを参考しにて書き直したら無事に動作しました。
しかし,制限時間を設けようと思い,GetInputCharWaitでは正確に時間が測定できないのでGetInputCharに変更するとなんと勝手にヌルコードが永遠に入力され続けるという事態が発生してこちらの入力を受け付けなくなりました・・・。
int GameMain(int MainHandle ,int i, const char *Answer[], const char *InputAnswer[])
{
int j, len;
char Typing[2];
int MissHandle;
int OutHandle;
int ANSWER_X, ANSWER_Y;
int FONT_SIZE;
int TimeLimit,TIMELIMIT,NowTime,CurrentTime,StartTime;
int IsFirst = 0;
FONT_SIZE = 11;
SetFontSize(20);
MissHandle = LoadGraph("えげつだね.jpg");
OutHandle = LoadGraph("煽る田淵.jpg");
ANSWER_X = 50;
ANSWER_Y = 50;
TimeLimit= TIMELIMIT = 10000;
DrawString(50, 0, Answer[i], GetColor(0, 0, 0));
DrawString(50, 50, InputAnswer[i], GetColor(0, 0, 0));
len = GetStringLength(InputAnswer[i]);
DrawExtendGraph(10, 150, 380, 400, MainHandle, TRUE);
total += len;
StartTime = GetNowCount();
for (j = 0; j < len; j++)
{
ClearInputCharBuf();
Typing[0] = GetInputChar(TRUE);
Typing[1] = '\0';
if (Typing[0] != '\0' && Typing[0] >= CTRL_CODE_CMP && TimeLimit > 0)
{
if (Typing[0] != InputAnswer[i][j])
{
if (flag)
{
DrawStringToHandle(50, 100, "OUT!!", RED, FontHandle);
DrawExtendGraph(10, 150, 380, 400, OutHandle, TRUE);
return -1;
}
miss++;
Typing[0] = InputAnswer[i][j];
DrawExtendGraph(10, 150, 380, 400, MissHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE, ANSWER_Y, Typing, RED, FontHandle);
j--;
DrawStringToHandle(50, 100, "落ち着いて!!", RED, FontHandle);
WaitTimer(1000);
DrawBox(50, 100, 450, 150, GetColor(255, 255, 255), TRUE);
DrawExtendGraph(10, 150, 380, 400, MainHandle, TRUE);
}
else
{
// 正解時の画像を表示
DrawExtendGraph(10, 150, 380, 400, MainHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE, ANSWER_Y, Typing, LIGHTBLUE, FontHandle);
}
}
else {
j--;
}
/*else
{
// 制限時間
NowTime = GetNowCount();
CurrentTime = NowTime - StartTime;
TimeLimit = TIMELIMIT - CurrentTime;
if (TimeLimit < 0)
{
DrawStringToHandle(50, 100, "OUT!!", RED, FontHandle);
DrawExtendGraph(10, 150, 380, 400, OutHandle, TRUE);
return -1;
}
}*/
}
total += miss;
WaitTimer(200);
return 0;
}
|
|