たとえば別テキストに
#001.jpg
と書いたとき以下のソースで読みだそうとしてるのですが、プログラムが強制終了になります。
どこがわるいのでしょうか?
#include "DxLib.h"
#include <math.h>
#include <string.h>
// 文字のサイズ
#define MOJI_SIZE 24
// 仮想テキストバッファの横サイズ縦サイズ
#define STRBUF_WIDTH 20
#define STRBUF_HEIGHT 3
char StringBuf[ STRBUF_HEIGHT ][ STRBUF_WIDTH * 2 + 1 ] ; // 仮想テキストバッファ
int CursorX , CursorY ; // 仮想画面上での文字表示カーソルの位置
int SP , CP ; // 参照する文字列番号と文字列中の文字ポインタ
int EndFlag ; // 終了フラグ
int KeyWaitFlag ; // ボタン押し待ちフラグ
int Count ; // フレームカウンタ
char String[ 500 ][ 256 ];
char FileBuff[ 256 ] ;
int FileHandle ;
void Kaigyou( void ) ; // テキストバッファの改行処理関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
char OneMojiBuf[ 3 ] ; // 1文字分一時記憶配列
char *FileNamae;
FileNamae="000.jpg";
int i ,ii, j ,c1,cl,cb,y;
c1=GetColor(255,255,255);
cl=GetColor(128,128,128);
cb=GetColor(0,0,0);
SetGraphMode( 640 , 480 , 16 ) ;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 描画位置の初期位置セット
CursorX = 0 ;
CursorY = 0 ;
// 参照文字位置をセット
SP = 0 ; // 1行目の
CP = 0 ; // 0文字
// フォントのサイズセット
SetFontSize( MOJI_SIZE ) ;
ChangeFont( "HG創英角ポップ体" ) ;
// 読み込みファイル を開く
FileHandle = FileRead_open( "test.txt" ) ;
// 表示Y座標の初期化
y = 0 ;
// ファイルの終端が来るまで読み込む
while( FileRead_eof( FileHandle ) == 0 )
{
// 一行読み込み
FileRead_gets( FileBuff, 256, FileHandle ) ;
//仮想文字へ読み込み
for(ii=0;ii<256;ii++)
{
String[y][ii]=FileBuff[ii];
}
// 次の行
y++ ;
}
// ファイルを閉じる
FileRead_close( FileHandle ) ;
// 描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// フレームカウンタ初期化
Count = 0 ;
// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// サウンドノベル風文字列描画処理を行う
// ただし終了フラグが1だった場合は処理をしない
if( EndFlag == 0 )
{
char Moji,Moji2 ;
// ボタン押し待ちフラグがたっていた場合はボタンが押されるまでここで終了
if( KeyWaitFlag == 1 )
{
if( ProcessMessage() == 0 && CheckHitKeyAll() != 0 )
{
// ボタンが押されていたら解除
KeyWaitFlag = 0 ;
}
}
else
{
// 文字の描画
Moji = String[ SP ][ CP ] ;
switch( Moji )
{
case '@' : // 改行文字
// 改行処理および参照文字位置を一つ進める
Kaigyou() ;
CP ++ ;
break ;
case '%' : // ボタン押し待ち文字
// ボタンが離されるまで待つ
while( ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}
// ボタン押し待ちフラグをたてる
KeyWaitFlag = 1 ;
CP ++ ;
break ;
case '$' : // 終了文字
// 終了フラグを立てるおよび参照文字位置を一つ進める
EndFlag = 1 ;
CP ++ ;
break ;
case '#' : // クリア文字&各種コマンド
for(i=0; i<7 ;i++){
FileNamae[i]= String[ SP ][i+1];
}
FileNamae[7]='\0';
// 仮想テキストバッファを初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一行進める
for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
{
for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
{
StringBuf[ i ][ j ] = 0 ;
}
}
CursorY = 0 ;
CursorX = 0 ;
SP ++ ;
CP = 0 ;
break ;
default : // その他の文字
// 1文字分抜き出す
OneMojiBuf[ 0 ] = String[ SP ][ CP ] ;
OneMojiBuf[ 1 ] = String[ SP ][ CP + 1 ] ;
OneMojiBuf[ 2 ] = '\0' ;
// 1文字テキストバッファに代入
StringBuf[ CursorY ][ CursorX * 2 ] = OneMojiBuf[ 0 ] ;
StringBuf[ CursorY ][ CursorX * 2 + 1 ] = OneMojiBuf[ 1 ] ;
// 参照文字位置を2バイト勧める
CP += 2 ;
// カーソルを一文字文進める
CursorX ++ ;
// テキストバッファ横幅からはみ出たら改行する
if( CursorX >= STRBUF_WIDTH ) Kaigyou() ;
break ;
}
// 参照文字列の終端まで行っていたら参照文字列を進める
if( String[ SP ][ CP ] == '\0' )
{
SP ++ ;
CP = 0 ;
}
}
}
// 画面のクリア
ClearDrawScreen() ;
{
LoadGraphScreen( 0 ,0 , FileNamae , FALSE) ;
LoadGraphScreen( 0 ,270 , "waku.png" , FALSE) ;
}
// テキストバッファの描画
for( i = 0 ; i < STRBUF_HEIGHT ; i ++ )
{
DrawString( 8+110 , i * MOJI_SIZE+360 , StringBuf[ i ] , GetColor( 0 , 0 , 0 ) ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
// 改行関数
void Kaigyou( void )
{
// 描画行位置を一つ下げる
CursorY ++ ;
// 描画列を最初に戻す
CursorX = 0 ;
// もしテキストバッファ縦幅からはみ出るならテキストバッファを縦スクロールさせる
if( CursorY >= STRBUF_HEIGHT )
{
int i , j ;
for( i = 1 ; i < STRBUF_HEIGHT ; i ++ )
{
for( j = 0 ; j < STRBUF_WIDTH * 2 ; j ++ )
{
StringBuf[ i - 1 ][ j ] = StringBuf[ i ][ j ] ;
}
}
// 描画行位置を一つあげる
CursorY -- ;
}
}