-------------main.cpp-----------------
フォーラムルールにあるとおり、ソースコードはcodeタグで囲んでください。 by softya(ソフト屋)
#include "DxLib.h"
typedef struct {
int x ;
int y ;
int img ;
int muki ;
int walk ;
} ;
int hantei [3][3] = {
{ 1,1,1 } ,
{ 0,0,0 } ,
{ 0,1,0 } ,
} ;
int cannot ( int x , int y , int muki ) {
if ( muki == 0 ) //上向きなら
if ( hantei [y/32-1][x/32] == 1 )
return 1 ;
if ( muki == 1 )
if ( hantei [y/32][x/32-1] == 1 )
return 1 ;
if ( muki == 2 )
if ( hantei [y/32+1][x/32] == 1 )
return 1 ;
if ( muki == 3 )
if ( hantei [y/32][x/32+1] == 1 )
return 1 ;
return 0 ;
}
int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) {
ChangeWindowMode ( TRUE ) ;
if ( DxLib_Init () == - 1 )
return - 1 ;
int a ;
int b ;
int image[16] ;
int image_1[1] ;
char key [256] ;
ch_t ch ;
ch.x = 32 ;
ch.y = 32 ;
ch.muki = 3 ;
ch.walk = 0 ;
SetDrawScreen ( DX_SCREEN_BACK ) ;
LoadDivGraph ( "dat/char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;
LoadDivGraph ( "dat/kabe.png" , 1 , 1 , 1 , 32 , 32 , image_1 ) ;
while ( !ProcessMessage () && !ClearDrawScreen () && !GetHitKeyStateAll ( key ) && !key [KEY_INPUT_ESCAPE] ) {
for ( a = 0 ; a < 3 ; a++ )
for ( b = 0 ; b < 3 ; b++ )
if ( hantei [a][b] == 1 )
DrawGraph ( b * 32 , a * 32 , image_1[0] , FALSE ) ;
if ( ch.x % 32 == 0 && ch.y % 32 == 0 ) {
ch.walk = 1 ;
if ( key [KEY_INPUT_UP] == 1 )
ch.muki = 0 ;
else if ( key [KEY_INPUT_LEFT] == 1 )
ch.muki = 1 ;
else if ( key [KEY_INPUT_DOWN] == 1 )
ch.muki = 2 ;
else if ( key [KEY_INPUT_RIGHT] == 1 )
ch.muki =3 ;
else
ch.walk = 0 ;
if ( cannot ( ch.x , ch.y , ch,muki ) == 1 )
ch.walk = 0 ;
}
if ( ch.walk = 1 ) {
if ( ch.muki == 0 )
ch.y-- ;
else if ( ch.muki == 1 )
ch.x-- ;
else if ( ch.muki == 2 )
ch.y++ ;
else if ( ch.muki == 3 )
ch.x++ ;
}
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 ;
}
上のソースは見たことがありますね。そうです。キャラクターを動かすプログラムで、歩けるところと歩けないところを設定するプログラムです。
そこで、質問なのですが、"void"という関数がありますね。
オープニング、メニュー、ロード画面、マップ、戦闘画面、エンディング、といったことを設定する"void"ですが、先ほどのソースを応用して、オープニングが流れて、メニューになって、ゲーム開始を選択すると、マップに行き、敵に触れて、先頭画面になるプログラムを組みたいのですが、どうしたらいいのでしょうか。いろいろ作りましたが、エラーが出てきてどうしてもできません。それと、オープニングの歌を流して、オープニングが終了したら、"StopSound"関数で終了したりしたいのですが、なぜか、歌が流れなく、そかも、処理がまったく進んでいないようです。voidの関数のなかで、オープニングの歌、終了したらストップ、メニュー、マップ、マップの歌、戦いに入ったら、マップの歌をストップして戦いの歌に切り替える。しかし、歌を流すと処理が止まるとすべてができなくなります。どうすればできますか。お手数ですが、ソースを記入して、解説もお願いします。まだ、C言語については初心者なのでよろしくお願いします。