diff options
author | Joe Anderson <jandew+dev@gmail.com> | 2016-02-16 17:00:04 -0800 |
---|---|---|
committer | Joe Anderson <jandew+dev@gmail.com> | 2016-02-16 17:00:04 -0800 |
commit | 235f7742e40860fd0300ee7093e6a4cd03cb43da (patch) | |
tree | 5da400c6d9ba9af2ce6b22ec0d625240101ae572 /oo.py | |
parent | 43d539df24ef24160706ab425deed0bd8bfe2f98 (diff) | |
download | oo-235f7742e40860fd0300ee7093e6a4cd03cb43da.tar.gz oo-235f7742e40860fd0300ee7093e6a4cd03cb43da.zip |
documented attributes
Diffstat (limited to 'oo.py')
-rw-r--r-- | oo.py | 118 |
1 files changed, 83 insertions, 35 deletions
@@ -6,10 +6,52 @@ class ooPuzzle: No rendering information is stored or interpreted here. - Attributes. - X,Y : horizontal and vertical size of the puzzle - pieces : dictionary mapping (x,y) to range(6) - orients : dictionary mapping (x,y) to range(4) + All attributes are intended to be accessed through methods. + If direct access is necessary, here are their explanations: + + DIRECTIONS is a dictionary mapping: + each direction as a string + to a direction index in range(4) + + DX_DY is a list mapping: + each direction index in range(4) + to a differential of form (dx, dy) + + EDGES_TO_PIECE_ORIENT is a dictionary mapping: + each tuple of edge-filled statuses in order of direction + to a tuple of (piece id in range(6), + orientation direction in range(4)) + + PIECE_ORIENT_TO_EDGES is an inverse of the previous mapping. + + (the following are attributes set by __init__) + + X is an integer for the range of x-positions + + Y is an integer for the range of y-positions + + game_id is an integer used by set_pieces_from_game_id + It uniquely corresponds to the solution. + + inverted is a bool indicating whether + pieces and inverted_pieces have been swapped + NOT IMPLEMENTED! + + toroidal is a bool indicating whether + the border of the puzzle loops back to the opposite side + NOT IMPLEMENTED! + + (the following are variable attributes during normal usage) + + pieces is a dictionary mapping: + each position of form (x in range(self.X), + y in range(self.Y)) + to a piece id in range(6) + + orients is a dictionary mapping: + each position of form (x in range(self.X), + y in range(self.Y)) + to a direction index in range(4) """ def __init__(self, X, Y, game_id=None, inverted=False, toroidal=False): """Create a new ooPuzzle instance. @@ -29,28 +71,20 @@ class ooPuzzle: self.orients = {} self.set_pieces_from_game_id(game_id) - EDGES_TO_PIECE_ORIENT = { (0, 0, 0, 0) : (0, 0), - - (1, 0, 0, 0) : (1, 0), - (0, 1, 0, 0) : (1, 1), - (0, 0, 1, 0) : (1, 2), - (0, 0, 0, 1) : (1, 3), - - (1, 1, 0, 0) : (2, 0), - (0, 1, 1, 0) : (2, 1), - (0, 0, 1, 1) : (2, 2), - (1, 0, 0, 1) : (2, 3), - - (1, 0, 1, 0) : (3, 0), - (0, 1, 0, 1) : (3, 1), - - (0, 1, 1, 1) : (4, 0), - (1, 0, 1, 1) : (4, 1), - (1, 1, 0, 1) : (4, 2), - (1, 1, 1, 0) : (4, 3), + # Changing conceptual directions into indices. + DIRECTIONS = {'LEFT' : 0, + 'UP' : 1, + 'RIGHT': 2, + 'DOWN' : 3} - (1, 1, 1, 1) : (5, 0) } + # Changing direction indices into (dx, dy) pairs. + DX_DY = [(-1, 0), + ( 0, -1), + ( 1, 0), + ( 0, 1)] + # Given piece id and orientation direction, + # return edge-filled status for each direction. PIECE_ORIENT_TO_EDGES = { (0, 0) : (0, 0, 0, 0), (0, 1) : (0, 0, 0, 0), (0, 2) : (0, 0, 0, 0), @@ -81,6 +115,29 @@ class ooPuzzle: (5, 2) : (1, 1, 1, 1), (5, 3) : (1, 1, 1, 1) } + # One choice of inverse of the previous dictionary. + EDGES_TO_PIECE_ORIENT = { (0, 0, 0, 0) : (0, 0), + + (1, 0, 0, 0) : (1, 0), + (0, 1, 0, 0) : (1, 1), + (0, 0, 1, 0) : (1, 2), + (0, 0, 0, 1) : (1, 3), + + (1, 1, 0, 0) : (2, 0), + (0, 1, 1, 0) : (2, 1), + (0, 0, 1, 1) : (2, 2), + (1, 0, 0, 1) : (2, 3), + + (1, 0, 1, 0) : (3, 0), + (0, 1, 0, 1) : (3, 1), + + (0, 1, 1, 1) : (4, 0), + (1, 0, 1, 1) : (4, 1), + (1, 1, 0, 1) : (4, 2), + (1, 1, 1, 0) : (4, 3), + + (1, 1, 1, 1) : (5, 0) } + def set_pieces_from_edges(self, horiz_edges, vert_edges): """Convert edge dictionaries into a puzzle state. @@ -185,17 +242,8 @@ class ooPuzzle: for y in range(self.Y): self.orients[x, y] = random.randrange(4) - DIRECTIONS = {'LEFT' : 0, - 'UP' : 1, - 'RIGHT': 2, - 'DOWN' : 3} - - DX_DY = [(-1, 0), - ( 0, -1), - ( 1, 0), - ( 0, 1)] - - def position_in_direction(self, x0, y0, direction, return_is_internal=False): + def position_in_direction(self, x0, y0, direction, + return_is_internal=False): """Returns the position adjacent to (x0, y0) in direction. direction may be any string or integer in the dictionary |