上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
無題


取り敢えず仕様を「3マス先までは見える」とし、3マス先の壁の描画処理だけ作ってみました。


・・・力技で。
こんな感じ。(※随所にDXライブラリの関数を使用しています。)

static void draw_wall( void )
{
char front_x = 0 ;
char front_y = 0 ;

char right_x = 0 ;
char right_y = 0 ;

char chk_x ;
char chk_y ;

char pos_x ;
char pos_y ;

switch( party.direction )
{
case North :
front_y = -1 ;
right_x = 1 ;
break ;
case East :
front_x = 1 ;
right_y = 1 ;
break ;
case South :
front_y = 1 ;
right_x = -1 ;
break ;
case West :
front_x = -1 ;
right_y = -1 ;
break ;
default :
break ;
}

//DrawGraph( 0, 0, map.wall_gra[ 4 ], TRUE ) ;
DrawGraph( 0, 0, map.wall_gra[ 0 ], TRUE ) ;

// 座標系
// x -3 -2 -1 0 1 2 3
//y
// 3 ○ ○ ○ ○ ○ ○ ○
// 2 × ○ ○ ○ ○ ○ ×
// 1 × × ○ ○ ○ × ×
// 0 × × × ☆ × × ×

// 3マス先を描画
if( MapData[ party.x + front_x * 3 ][ party.y + front_y * 3 ] == 0 ) // (0,3)が壁 ?■?
{
chk_x = party.x + front_x * 3 + right_x ;
chk_y = party.y + front_y * 3 + right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (1,3)が壁 ?■■
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■■■
{
DrawGraph( 0, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □■■
{
DrawGraph( 200, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}
else // (1,3)が道 ?■□
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■■□
{
DrawGraph( -200, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □■□
{
DrawGraph( 200, 0, map.wall_gra[ 5 ], TRUE ) ;
}
}
}
else // (0,3)が道 ?□?
{
chk_x = party.x + front_x * 3 + right_x ;
chk_y = party.y + front_y * 3 + right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (1,3)が壁 ?□■
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■□■
{
DrawGraph( -440, 0, map.wall_gra[ 3 ], TRUE ) ;
DrawGraph( 420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □□■
{
DrawGraph( 420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}
else // (1,3)が道 ?□□
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■□□
{
DrawGraph( -420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □□□
{
// 何も描画しない
}
}
}

if( MapData[ party.x + front_x * 1 ][ party.y + front_y * 1 ] == 0 ) // 正面が壁
{
DrawGraph( 0, 0, map.wall_gra[ 1 ], TRUE ) ;
}
else if( MapData[ party.x + front_x * 2 ][ party.y + front_y * 2 ] == 0 ) // 2歩先が壁
{
DrawGraph( 0, 0, map.wall_gra[ 2 ], TRUE ) ;
}
else if( MapData[ party.x + front_x * 3 ][ party.y + front_y * 3 ] == 0 )
{
//DrawGraph( 0, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}


こんだけで3マス奥だけ。あとこれを2マス、1マス、それに側面もと考えるととても書く気にはなれない。
もうちょっと効率の良いアルゴリズムを考えねばー・・・
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメントの投稿

URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
powered by
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。