会話シーン2

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

会話シーン2

#1

投稿記事 by 電気屋 » 15年前

プログラムが長文ですが乗せてみます。略ができるところは削りました。要点は一番下です。
#include "DxLib.h"
#define MOJI_SIZE 24
#define MOJI_X 8
#define MOJI_Y 14
int DrawPointX , DrawPointY ; // 文字列描画の位置
int SP , CP ; // 参照する文字列番号と文字列中の文字ポインタ
char String[/url][ 256 ] =//4列×21文字の表示
{
         ”文章”
} ;
// 改行関数
int Kaigyou( void )
{
       //改行のプログラムなので省略
}


typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTRlpCmdLine, int nCmdShow ){

int image[16];
char Key[256];
ch_t ch;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x =320;
ch.y =160;
ch.walking_flag=0;
ch.muki=3;

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。

      //フラグため省略

}

if(ch.walking_flag==1){ //歩くフラグが立っていたら

        //移動のプログラムなので省略

}
if(ch.y>=200 && ch.x>=400){
int EndFlag ; // 終了フラグ
char OneMojiBuf[ 3 ] ; // 1文字分一時記憶配列

SetGraphMode( 640 , 480 , 16 ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}


// 描画位置の初期位置セット
DrawPointX = MOJI_X ;
DrawPointY = MOJI_Y ;

// 参照文字位置をセット
SP = 0 ; // 1行目の
CP = 0 ; // 0文字

// フォントのサイズセット
SetFontSize( MOJI_SIZE ) ;


// 終了フラグを倒す
EndFlag = 0 ;
// ループ

while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
char Moji ;

// 文字の描画

Moji = String[ SP ][ CP ] ;
switch( Moji ){

                 //詳しく書くと長かったので、大事なところを残して省略


case 'E' : // 終了文字

// 終了フラグを立てるおよび参照文字位置を一つ進める
EndFlag = 1 ;
CP ++ ;
break ;

case 'C' : // クリア文字

// 画面を初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一つ進める
ClearDrawScreen() ;
DrawPointY = MOJI_Y;
DrawPointX = MOJI_X ;
CP ++ ;
break ;
default : // その他の文字
                  
//省略

ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //画像をセット

DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画

ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}

このプログラムでエラー1,とこのプログラムの改善点を教えてください。
書き下手ですいません

要点

・一定の位置にいくと会話(文字の表示)が開始される
・マップやキャラが動かなくなり背景として使用。
・会話が終わり次第、元のゲーム戻る
・画面クリアしたときに、背景がすべて消えないようにする
などなどです。
そのほかにも足した方がいいところがあったらよろしくお願いします。

kazuoni

Re:会話シーン2

#2

投稿記事 by kazuoni » 15年前

前回のスレは放置ですか?別に新スレを立てなくても、
レスでプログラムを張り付けてくれればよかったのですが^^;

そして、またもや答えにはなりませんが、
規約は読まれましたか?
プレタグ、インデントがなされてません。
なので、そのあたりを修正して再度プログラムを張り付けてください。
直接書かなくても、添付ファイルもこの掲示板では使えます(容量制限あり)

電気屋

Re:会話シーン2

#3

投稿記事 by 電気屋 » 15年前

どうもしませんでした。(><)
まだ掲示板になれていなくて。

目的としては、自分の作成した。文字の表示のプログラムを『ゲームプログラムの館.22章.4方向に歩かせる』プログラムに組み込み、一定の座標(ch.x=400,ch.y=200)にいったら文字表記をして、表記が終わったらキャラの移動に戻る。みたいなプログラムにしたいと思っています。プログラムはTEXT形式で、画像は別に張りたいと思います。アドバイスお願いします。

電気屋

Re:会話シーン2

#4

投稿記事 by 電気屋 » 15年前

画像です。

電気屋

Re:会話シーン2

#5

投稿記事 by 電気屋 » 15年前

形式が、ビットマップからGIF形式に変更しているのでご了承してください。

kazuoni

Re:会話シーン2

#6

投稿記事 by kazuoni » 15年前

このコードのまま続けていくなら、
まずは、歩き回るプログラムから、
対象物に当たり、条件を満たしたなら
関数GetDrawScreenGraphあたりで画面をキャプチャーし、
その画像を先にを出力しながら、文字を出力していく
方法しかないかと。

今のまま規模を拡大していくと、
かなり大変なコードになりそうな気がします^^;
まずは、それぞれの機能を関数化して分担させたほうがよいかと思います。
ここの回答者であるarrayさんのHPにサウンドノベルシステムを
紹介しているので、参考になるかと思います。
http://sinkai.net/rp/19.php
っと言っても、画面更新等は電気屋さんとは異なっていますから、
結局は、根本から作り直しになりますが^^;

現在、時間に余裕があまりないので、サンプル作れませんorz

電気屋

Re:会話シーン2

#7

投稿記事 by 電気屋 » 15年前

どうもありがとうございました

閉鎖

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