
取り敢えず仕様を「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マス、それに側面もと考えるととても書く気にはなれない。
もうちょっと効率の良いアルゴリズムを考えねばー・・・
そのうえ俺のヵ〃マン汁も精孑も全部ゴックカス男ブログはじめました。童貞と卒業!!童貞と会うならここ童貞そして最終回今月やべぇわ俺。。今月の副収入4 8 万・・・ヽ(`Д´)ノスクネェ!!
うわぁ・・こ りゃ頻繁に会 わないと今月の生活マジ危うい(´・ω:;.:…
http://dvxvb.net/op_h/ヨーグルト