問題が解決したようで何よりです
> 一応最初のプログラムも今後のために解決したいのですが、
> 行の終端ということは、talk2でt[i]が\0になったらということで正しいでしょうか?
はい、その通りです
> talk2でt[i]が\0になったら終了フラグを立てて
> while (!DxLib::ProcessMessage()) のループの最後に終了フラグが立っていたら
> breakするという方法も試していたのですが一行しか表示されずにいました。
私もフラグを立てて二行目以降が表示されるようにしてみました
確かに二行目以降が表示されるようになったのですが、二行目が表示されているときは
一行目が表示されず、三行目が表示されているときは三行目以外表示されない、
という状態になりました
#include "DxLib.h"
#include <math.h>
#include <iostream>
#include <fstream>
#include <string>
#include <codecvt>
bool flag;
void talk2(int x, int y, char t[], int nCount) {
int n = nCount / 15;
int color = DxLib::GetColor(255, 255, 255);
for (int i = 0; i < n + 1; i++) {
if(t[i] == '\0') {
flag = true;
break;
}
int Size = DxLib::GetCharBytes(DX_CHARCODEFORMAT_SHIFTJIS, t + i);
if (Size == 1) {
DxLib::DrawFormatString(x, y, color, "%c", t[i]);
x += 9;
}
else {
DxLib::DrawFormatString(x, y, color, "%c%c", t[i], t[i + 1]);
x += 17; i++; n++;
}
}
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE);
SetGraphMode(800, 600, 32);
if (DxLib::DxLib_Init() == -1) return -1;
DxLib::SetDrawScreen(DX_SCREEN_BACK);
int FileHandle;
char text[256];
int count = 0;
int draw_x = 10; //文字の座標
int draw_y = 10;
// test.cpp ファイルを開く
FileHandle = FileRead_open("D:\\Yam\\UserProgram\\マドハヴァディティアさん\\20211215\\file.txt");
while (FileRead_eof(FileHandle) == 0) {
FileRead_gets(text, sizeof(text), FileHandle);
flag = false;
count = 0;
while (!DxLib::ProcessMessage() && flag==false) {
DxLib::ClearDrawScreen();
talk2(draw_x, draw_y, text, count);
DxLib::ScreenFlip();
++count;
}
draw_y += 20;
}
return DxLib::DxLib_End();
// ファイルを閉じる
FileRead_close(FileHandle);
}
二行目以降が表示された際にそれ以前の行も表示されるようにするには、
表示する行を都度 FileRead_gets で読み込むのではなく、表示処理が開始される前に
全ての行を FileRead_gets で読み込んでおいて、描画処理では表示する行数分だけ
ループする( 二行目を表示中は一行目と二行目を表示、三行目を表示中は一行目と二行目も表示 )、
というような作りに大きく書き換える必要がありそうです