Skip to content

Commit a400042

Browse files
committed
adding TetrisOneBlock2App
1 parent 76590ef commit a400042

1 file changed

Lines changed: 38 additions & 28 deletions

File tree

dumbdisplay_examples/tetris_one_block/tetris_one_block_2.py

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from 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

7070
def _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

7585
def _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

Comments
 (0)