1212
1313from dumbdisplay_examples .utils import DDAppBase , create_example_wifi_dd
1414
15- _RANDOMIZE_ROW_COUNT = 21
15+ _RANDOMIZE_ROW_COUNT = 2
1616
1717
1818_width = 400
@@ -69,7 +69,17 @@ def set_value(self, row_idx, col_idx, value):
6969
7070def _randomize_block_grid () -> Grid :
7171 color = random .randint (1 , len (_colors ) - 1 )
72- block_grid = [[color ]]
72+ if True :
73+ n_rows = random .randint (1 , 2 )
74+ n_cols = random .randint (1 , 2 )
75+ block_grid = []
76+ for y in range (n_rows ):
77+ block_grid_row = []
78+ for x in range (n_cols ):
79+ block_grid_row .append (color )
80+ block_grid .append (block_grid_row )
81+ else :
82+ block_grid = [[color , color ]]
7383 return Grid (grid_cells = block_grid )
7484
7585def _randomize_grid () -> Grid :
@@ -85,11 +95,17 @@ def _randomize_grid() -> Grid:
8595 grid_cells .append (grid_row )
8696 return Grid (grid_cells = grid_cells )
8797
88- def _check_block_grid_overlap (block_grid : Grid , block_grid_x_off : int , block_grid_y_offset : int , grid : Grid ) -> bool :
98+ def _check_can_place_block_grid (block_grid : Grid , block_grid_x_off : int , block_grid_y_offset : int , grid : Grid ) -> bool :
8999 for y in range (block_grid .n_rows ):
90100 for x in range (block_grid .n_cols ):
91101 if block_grid .get_value (y , x ) != 0 :
92- if grid .get_value (y + block_grid_y_offset , x + block_grid_x_off ) != 0 :
102+ row_idx = y + block_grid_y_offset
103+ col_idx = x + block_grid_x_off
104+ if row_idx < 0 or row_idx >= grid .n_rows :
105+ return True
106+ if col_idx < 0 or col_idx >= grid .n_cols :
107+ return True
108+ if grid .get_value (row_idx , col_idx ) != 0 :
93109 return True
94110 return False
95111
@@ -126,39 +142,31 @@ def __init__(self, x: int, y: int, block_grid: Grid, block_pen: LayerTurtle):
126142 self .x = x
127143 self .y = y
128144 self .block_grid = block_grid
129- self .color = block_grid .get_value (0 , 0 ) # assume a single cell
130145 self .block_pen = block_pen
131146 block_pen .clear ()
132147 self .sync_image ()
133148 _draw_grid (block_grid , block_pen )
134149
135- def commit (self , grid : Grid ):
136- grid .set_value (self .y , self .x , self .color )
137- if True :
138- self .block_pen .clear ()
139-
140150 def move_down (self , grid : Grid ) -> bool :
141- if self .y < 23 and grid . get_value ( self .y + 1 , self . x ) == 0 :
142- self . y += 1
143- self .sync_image ()
144- return True
145- return False
151+ if _check_can_place_block_grid ( self .block_grid , self . x , self .y + 1 , grid = grid ) :
152+ return False
153+ self .y += 1
154+ self . sync_image ()
155+ return True
146156
147157 def move_right (self , grid : Grid ) -> bool :
148- if self .x < 11 :
149- if grid .get_value (self .y , self .x + 1 ) == 0 :
150- self .x += 1
151- self .sync_image ()
152- return True
153- return False
158+ if _check_can_place_block_grid (self .block_grid , self .x + 1 , self .y , grid = grid ):
159+ return False
160+ self .x += 1
161+ self .sync_image ()
162+ return True
154163
155164 def move_left (self , grid : Grid ) -> bool :
156- if self .x > 0 :
157- if grid .get_value (self .y , self .x - 1 ) == 0 :
158- self .x -= 1
159- self .sync_image ()
160- return True
161- return False
165+ if _check_can_place_block_grid (self .block_grid , self .x - 1 , self .y , grid = grid ):
166+ return False
167+ self .x -= 1
168+ self .sync_image ()
169+ return True
162170
163171 def sync_image (self ):
164172 #anchor_x = (self.x - _INIT_BLOCK_X) * _block_unit_width
@@ -222,7 +230,9 @@ def reset_block(self) -> bool:
222230 x = 5
223231 y = 0
224232 block_grid = _randomize_block_grid ()
225- if _check_block_grid_overlap (block_grid , x , y , grid = self .grid ):
233+ x -= 1 - block_grid .n_cols
234+ y -= 1 - block_grid .n_rows
235+ if _check_can_place_block_grid (block_grid , x , y , grid = self .grid ):
226236 return False
227237 self .block = Block (x , y , block_grid = block_grid , block_pen = self .block_pen )
228238 self .sync_image ()
0 commit comments