プログラムが長文ですが乗せてみます。略ができるところは削りました。要点は一番下です。
#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,とこのプログラムの改善点を教えてください。
書き下手ですいません
要点
・一定の位置にいくと会話(文字の表示)が開始される
・マップやキャラが動かなくなり背景として使用。
・会話が終わり次第、元のゲーム戻る
・画面クリアしたときに、背景がすべて消えないようにする
などなどです。
そのほかにも足した方がいいところがあったらよろしくお願いします。
会話シーン2
Re:会話シーン2
このコードのまま続けていくなら、
まずは、歩き回るプログラムから、
対象物に当たり、条件を満たしたなら
関数GetDrawScreenGraphあたりで画面をキャプチャーし、
その画像を先にを出力しながら、文字を出力していく
方法しかないかと。
今のまま規模を拡大していくと、
かなり大変なコードになりそうな気がします^^;
まずは、それぞれの機能を関数化して分担させたほうがよいかと思います。
ここの回答者であるarrayさんのHPにサウンドノベルシステムを
紹介しているので、参考になるかと思います。
http://sinkai.net/rp/19.php
っと言っても、画面更新等は電気屋さんとは異なっていますから、
結局は、根本から作り直しになりますが^^;
現在、時間に余裕があまりないので、サンプル作れませんorz
まずは、歩き回るプログラムから、
対象物に当たり、条件を満たしたなら
関数GetDrawScreenGraphあたりで画面をキャプチャーし、
その画像を先にを出力しながら、文字を出力していく
方法しかないかと。
今のまま規模を拡大していくと、
かなり大変なコードになりそうな気がします^^;
まずは、それぞれの機能を関数化して分担させたほうがよいかと思います。
ここの回答者であるarrayさんのHPにサウンドノベルシステムを
紹介しているので、参考になるかと思います。
http://sinkai.net/rp/19.php
っと言っても、画面更新等は電気屋さんとは異なっていますから、
結局は、根本から作り直しになりますが^^;
現在、時間に余裕があまりないので、サンプル作れませんorz