サウンドノベルの改行について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
FF

サウンドノベルの改行について

#1

投稿記事 by FF » 14年前

はじめまして

龍神録プログラミングの支館様の方にある
サウンドノベルのソースに改行処理を追加したいのですが

自分なりに色々と組んでみたのですが
表示されなくなったり、フリーズしたりと思うように結果が出せません。

組み方としては
表示する文字列のある特定の文字があったらそれ以降の文字列を
改行して表示するというものです。

ソースは支館様のソースとほぼ同じですので
できれば支館様のソースに追加という形で教えていただきたいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: サウンドノベルの改行について

#2

投稿記事 by h2so5 » 14年前

まずFFさんが書いたコードを見せてもらえますか?
1から答えを出すより、そのコードを修正するという形のほうが説明しやすいかもしれません。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: サウンドノベルの改行について

#3

投稿記事 by Dixq (管理人) » 14年前

フリーズするのはアクセスしてはいけない領域にアクセスしたりしているのではないでしょうか。
1行目から2行目へ移る処理はどうやっていますか?

FF

Re: サウンドノベルの改行について

#4

投稿記事 by FF » 14年前

返答遅れました。
質問した後に試行錯誤した結果以下のソースで
改行的なものはできました。

関数構造体に新たに char story2[256] を追加して
改行以降の文字をtoken[4]として読み込んでいます。
表示も大体同じ感じです。

ただこれでやると一行目と二行目が同時に表示されてしまうので、
一行目がすべて表示されてから二行目の描画をするようにしたいです。

、またこのやり方のほかに良いものがあるのでしたら教えていただきたいです。

コード:

#include "../include/GV.h"

//ストーリーデータの読み込み
void fantasy_load(const char *file_name)
{
    int i, n, s;                // カウンタ
    int num = 0;                // カウンタ
    int fp;                     // ファイルポインタ
    char buffer[256];           // 文字バッファ
    char token[10][256];        // 文字バッファ

    // ファイルオープン
    if( ( fp = FileRead_open( file_name ) ) == NULL ) {
        // エラー処理
    }

    // ファイル終端まで読み込む
    while(FileRead_eof(fp) == 0 && num < 49) {
        
        // 1行読み込む
        if( FileRead_gets( buffer, 256, fp ) == -1 )
            continue;

        // 先頭文字が「/」ならスキップ
        if( buffer[0] == '/' )
            continue;

        // CSV形式ファイル分割
        n = 0; s = 0;

        for(i = 0; i < 256; i++) {
            if( buffer[i] == ',' ) {
                token[n][s] = '\0';
                s = 0;
                n++;
                continue;
            }

            if( buffer[i] == '\0' ) {
                token[n][s] = '\0';
                n++;
                break;
            }

            token[n][s] = buffer[i];
            s++;
        }

        // 種類
        story[num].type = atoi(token[0]);
        // 名前
        strcpy_s(story[num].name, 50, token[1]);
        // 表情
        story[num].look = atoi( token[2] );
        // 本文
        strcpy_s(story[num].story, 256, token[3]);
        //改行本文
        strcpy_s(story[num].story2, 256, token[4]);
        num++;
    }

    story[num].story[0] = '\0';
    
    FileRead_close(fp);
}

void fantasy_disp()
{
    static int num;
    static int len;
    char buf[256];
	char buf2[256];
	static int storyccount = 0;
    
    strcpy_s(buf, 256, story[num].story);
	strcpy_s(buf2, 256 , story[num].story2);


    if(CheckStatePad(configpad.shot) == 1) {
        if( buf[len] == '\0' )
        {
            len  = 0;
            ++num;
        }
    }

    if(CheckStatePad(configpad.bom)%5 == 4) {
            len  = 0;
            ++num;
    }
    
    // 本文が無かったら終了
    if(buf[0] == '\0') {
        num = 0;
        len = 0;
        func_state = 100;
        
        return;
    }


    for(int i = 0; i < 2 && buf[len] || buf2[len] != '\0'; ++i) {
		switch( buf[len] ) {
        case '\0':
            break;

        default:
            ++len;
            break;
        }
		switch( buf2[len] ) {
        case '\0':
            break;

        default:
            ++len;
            break;
        }
    }

    buf[len] = '\0';
	buf2[len] = '\0';
    
    /* ▼ ラノベ描画 */

	//主人公関係の処理
	if(story[num].type == 1){
		storyccount++;
		if(storyccount <= 127){
			DrawGraph(FX -30, FY +100, syuzin1,TRUE);}
		else if (storyccount >=128 && storyccount<=130){
			DrawGraph(FX -30, FY +100, syuzin2,TRUE);}
		else if (storyccount >=131 && storyccount<=133){
			DrawGraph(FX -30, FY +100, syuzin3,TRUE);}
		else if (storyccount >= 134 && storyccount<= 136){
			DrawGraph(FX -30, FY +100, syuzin4,TRUE);}
		else if (storyccount ==137){
            DrawGraph(FX -30, FY +100, syuzin4,TRUE);
			storyccount =0;}
	}
//	if(story[num].type == 101){
//		DrawGraph(FX+194,FY+120,tekiganzin,TRUE);}
    //↑ここまで

	if(story[num].type == 2){
		DrawGraph(FX +194 , FY + 150, teki1[0],TRUE);}

	DrawGraph(FX , FMY - 95,img_kaiwa[0],TRUE);


    // 名前
    DrawFormatStringToHandle(FX + 15, FMY - 62, color[5] , font[2], story[num].name);
    // 本文
    DrawFormatStringToHandle(FX + 15 , FMY - 43, color[5] , font[2], buf);
	//改行本文
	DrawFormatStringToHandle(FX + 15 , FMY -28, color[5] , font[2], buf2);

}

閉鎖

“C言語何でも質問掲示板” へ戻る