Creates a cute board game display.
@@@@@@@@@@@@@@@@@@<====>@@ @@@@@@@@ @@ @@@@@@@@ @@ @@@@@@@@ @@ @@ @@ /\ .. @@@@@@@@ || ( ) @@@@@@@@ \/ `' @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
-- LionKimbro
code
#
# Board Display
#
# A game board made of walls and doors
# is rendered to ASCII output.
#
# Interior Tokens
class IntToken:
def __init__( s, l1, l2, l3 ):
s.lines = [ l1[0:6],
l2[0:6],
l3[0:6] ]
def get_line( s, n ):
return s.lines[n]
i_blank = IntToken( " ",
" ",
" " )
i_player = IntToken( " .. ",
" ( ) ",
" `' " )
i_solid = IntToken( "@@@@@@",
"@@@@@@",
"@@@@@@" )
# Horizontal Tokens
class HorzToken:
def __init__( s, l ):
s.line = l
def get_line( s ):
return s.line
h_blank = HorzToken( " " )
h_door = HorzToken( "<====>" )
h_wall = HorzToken( "@@@@@@" )
# Vertical Tokens
class VertToken:
def __init__( s, chars ):
s.chars = chars
def get_line( s, n ):
return s.chars[(n*2):(n*2)+2]
v_blank = VertToken( " " )
v_door = VertToken( "/\||\/" )
v_wall = VertToken( "@@@@@@" )
# Board Display
class BoardDisplay:
def __init__( s ):
s.h_edges={}
s.v_edges={}
s.squares={}
def set_int_token( s, x,y, t ):
s.squares[ (x,y) ] = t
def set_h_token( s, x,y, t ):
s.h_edges[ (x,y) ] = t
def set_v_token( s, x,y, t ):
s.v_edges[ (x,y) ] = t
def pillar_solid_p( s, x,y ):
if s.h_edges.get( (x,y), h_blank ) != h_blank: return 1
if s.h_edges.get( (x-1,y), h_blank ) != h_blank: return 1
if s.v_edges.get( (x,y), v_blank ) != v_blank: return 1
if s.v_edges.get( (x,y-1), v_blank ) != v_blank: return 1
return 0
def get_h_token_line( s, x,y ):
return s.h_edges.get( (x,y), h_blank ).get_line()
def get_v_token_line( s, x,y, line ):
return s.v_edges.get( (x,y), v_blank ).get_line( line )
def get_i_token_line( s, x,y, line ):
return s.squares.get( (x,y), i_blank ).get_line( line )
def draw_horz_edge( s, x1,x2, y ):
str_list = []
for x in range( x1,x2 ):
# draw pillar
str_list.append( { 1: "@@",
0: " " }[ s.pillar_solid_p( x,y ) ] )
# draw top
str_list.append( s.get_h_token_line(x,y) )
# draw last pillar
str_list.append( { 1: "@@",
0: " " }[ s.pillar_solid_p( x2+1,y ) ] )
print "".join( str_list )
def draw_horz_int( s, x1,x2, y ):
for yline in range( 3 ):
str_list = []
for x in range( x1,x2 ):
# draw left
str_list.append( s.get_v_token_line( x,y, yline ) )
# draw interior
str_list.append( s.get_i_token_line( x,y, yline ) )
# draw right
str_list.append( s.get_v_token_line( x2+1,y, yline ) )
print "".join( str_list )
def draw( s, x1,y1, x2,y2 ):
for y in range( y1,y2 ):
s.draw_horz_edge( x1,x2, y )
s.draw_horz_int( x1,x2, y )
s.draw_horz_edge( x1,x2, y2 )
b = BoardDisplay()
b.set_h_token( 0,0, h_wall )
b.set_h_token( 1,0, h_wall )
b.set_h_token( 2,0, h_door )
b.set_h_token( 3,0, h_wall )
b.set_v_token( 0,0, v_wall )
b.set_v_token( 4,0, v_wall )
b.set_v_token( 0,1, v_door )
b.set_v_token( 4,1, v_wall )
b.set_h_token( 0,2, h_wall )
b.set_h_token( 1,2, h_wall )
b.set_h_token( 2,2, h_wall )
b.set_h_token( 3,2, h_wall )
b.set_int_token( 1,1, i_player )
b.set_int_token( 0,0, i_solid )
b.set_int_token( 2,1, i_solid )
b.draw( 0,0, 3,2 )