Creates a cute board game display.

@@@@@@@@@@@@@@@@@@<====>@@
@@@@@@@@                @@
@@@@@@@@                @@
@@@@@@@@                @@
@@                      @@
/\          ..    @@@@@@@@
||         (  )   @@@@@@@@
\/          `'    @@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

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 )

comments on the code

GameBoard (last edited 2008-03-04 08:33:11 by localhost)