Skip to content

Commit e147537

Browse files
committed
updated
1 parent f97b127 commit e147537

3 files changed

Lines changed: 41 additions & 9 deletions

File tree

dumbdisplay/_ddlayer_lcd.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
class DDLayerLcd(DDLayer):
66
'''LCD'''
7-
def __init__(self, dd, col_count = 16, row_count = 2, char_height = 0, font_name = ''):
7+
def __init__(self, dd, col_count: int = 16, row_count: int = 2, char_height: int = 0, font_name: str = ''):
88
'''
99
:param dd: DumbDisplay object
1010
:param col_count: number of columns

dumbdisplay/examples/sliding_puzzle/board_manager.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ def randomizeBoardStep(self) -> tuple[int, int, int]:
5656
self.hole_tile_col_idx = from_col_idx
5757
self.hole_tile_row_idx = from_row_idx
5858
return (to_col_idx, to_row_idx, from_tile_id)
59-
def moveTile(self, from_col_idx: int, from_row_idx: int) -> int:
59+
def moveTileFromDir(self, from_dir: int) -> int:
60+
(from_col_idx, from_row_idx) = self.canMoveFromDirToFromIdxes(from_dir)
61+
return self.moveTileFromIdxes(from_col_idx, from_row_idx)
62+
def moveTileFromIdxes(self, from_col_idx: int, from_row_idx: int) -> int:
6063
prev_hole_tile_id = self.board_tiles[self.hole_tile_row_idx * self.tile_count + self.hole_tile_col_idx]
6164
self.board_tiles[self.hole_tile_row_idx * self.tile_count + self.hole_tile_col_idx] = self.board_tiles[from_row_idx * self.tile_count + from_col_idx]
6265
self.board_tiles[from_row_idx * self.tile_count + from_col_idx] = prev_hole_tile_id
@@ -71,7 +74,7 @@ def checkBoardSolved(self) -> bool:
7174
if board_tile_id != tile_id:
7275
return False
7376
return True
74-
def checkCanMoveFromDirs(self, prev_can_move_from_dir) -> int:
77+
def checkCanMoveFromDirs(self, prev_can_move_from_dir: int) -> int:
7578
can_count = 0
7679
if self.hole_tile_col_idx > 0 and prev_can_move_from_dir != 1:
7780
self.randomize_can_move_from_dirs[can_count] = 0; # 0: left
@@ -86,7 +89,7 @@ def checkCanMoveFromDirs(self, prev_can_move_from_dir) -> int:
8689
self.randomize_can_move_from_dirs[can_count] = 3 # 3: down
8790
can_count += 1
8891
return can_count
89-
def canMoveFromDirToFromIdxes(self, can_move_from_dir):
92+
def canMoveFromDirToFromIdxes(self, can_move_from_dir: int):
9093
if can_move_from_dir == 0:
9194
from_col_idx = self.hole_tile_col_idx - 1
9295
from_row_idx = self.hole_tile_row_idx

dumbdisplay/examples/sliding_puzzle/sliding_puzzle_app.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from dumbdisplay.core import *
44
from dumbdisplay.examples.sliding_puzzle.board_manager import BoardManager
55
from dumbdisplay.layer_graphical import LayerGraphical
6+
from dumbdisplay.layer_lcd import LayerLcd
67
from dumbdisplay.layer_selection import LayerSelection
78

89
BOARD_SIZE = 400
@@ -38,6 +39,7 @@ def __init__(self, dd: DumbDisplay, tile_count: int = DEF_TILE_COUNT, suggest_mo
3839
self.move_tile_ref_y = -1
3940
self.move_tile_id = -1
4041

42+
self.reset_button: LayerLcd = None
4143
self.suggest_selection: LayerSelection = None
4244
self.suggest_continuously = False
4345

@@ -59,6 +61,15 @@ def run(self):
5961

6062

6163
def initializeDD(self):
64+
65+
reset_button = LayerLcd(self.dd, 20, 1)
66+
reset_button.border(1, "red", "round")
67+
reset_button.pixelColor("darkred")
68+
reset_button.backgroundColor("orange")
69+
reset_button.writeCenteredLine("🔄 Reset 🔄")
70+
reset_button.enableFeedback()
71+
reset_button.disabled(True)
72+
6273
board = LayerGraphical(self.dd, BOARD_SIZE, BOARD_SIZE)
6374
board.backgroundColor("teal")
6475
board.border(8, "navy", "round", 5)
@@ -77,7 +88,6 @@ def initializeDD(self):
7788
suggest_selection.disabled(True)
7889
suggest_selection.text("💪Suggest")
7990
suggest_selection.textRightAligned("Continuous", 0, 1)
80-
#suggest_selection.enableFeedback()
8191

8292
self.dd.configAutoPin()
8393

@@ -86,6 +96,7 @@ def initializeDD(self):
8696
self.randomize_tiles_step_count = 0
8797
self.waiting_to_restart_millis = 0
8898

99+
self.reset_button = reset_button
89100
self.suggest_selection = suggest_selection
90101
self.suggest_continuously = False
91102

@@ -98,8 +109,8 @@ def updateDD(self):
98109
if diff_millis > 15000:
99110
self.dd.log("! double tab to start !")
100111
self.waiting_to_restart_millis = now_millis
101-
102112
board_feedback = self.board.getFeedback() # ensure the board feedback is updated
113+
reset_feedback = self.reset_button.getFeedback()
103114
suggest_feedback = self.suggest_selection.getFeedback()
104115
if self.randomize_tiles_step_count > 0:
105116
# randomizing the board
@@ -111,6 +122,7 @@ def updateDD(self):
111122
self.board.enableFeedback(":drag") # :drag to allow dragging that produces MOVE feedback type (and ended with -1, -1 MOVE feedbackv)
112123
if self.suggest_move_from_dir_func is not None:
113124
self.suggest_selection.disabled(False)
125+
self.reset_button.disabled(False)
114126
else:
115127
if board_feedback is not None:
116128
if board_feedback.type == "doubleclick":
@@ -126,7 +138,18 @@ def updateDD(self):
126138
# dragging / moving a tile ... handle it in onBoardDragged
127139
if self.onBoardDragged(board_feedback.x, board_feedback.y):
128140
# ended up moving a tile ... check if the board is solved
129-
self.checkBoardSolved()
141+
if self.checkBoardSolved():
142+
self.reset_button.disabled(True)
143+
if reset_feedback is not None:
144+
if reset_feedback.type == "doubleclick":
145+
self.reset_button.flash()
146+
self.dd.log("... resetting ...")
147+
time.sleep_ms(200)
148+
# self.dd.masterReset()
149+
self.reinitDD()
150+
return # exit updateDD
151+
else:
152+
self.dd.log("Double tab Reset to reset")
130153
if self.suggest_move_from_dir_func is not None:
131154
suggest = False
132155
if suggest_feedback is not None:
@@ -149,6 +172,12 @@ def ensureBoardInitialized(self):
149172
if self.board_manager is None:
150173
self.initializeBoard()
151174

175+
def reinitDD(self):
176+
self.board.release()
177+
self.reset_button.release()
178+
self.suggest_selection.release()
179+
self.initializeDD()
180+
152181

153182
def startRandomizeBoard(self):
154183
self.showHideHoleTile(False)
@@ -275,7 +304,7 @@ def onBoardDragged(self, x: int, y: int) -> bool:
275304
tile_anchor_x = self.board_manager.hole_tile_col_idx * self.tile_size
276305
tile_anchor_y = self.board_manager.hole_tile_row_idx * self.tile_size
277306
if True:
278-
self.board_manager.moveTile(self.move_tile_col_idx, self.move_tile_row_idx)
307+
self.board_manager.moveTileFromIdxes(self.move_tile_col_idx, self.move_tile_row_idx)
279308
else:
280309
prev_hole_tile_id = self.board_manager.board_tiles[self.board_manager.hole_tile_row_idx * self.tile_count + self.board_manager.hole_tile_col_idx]
281310
self.board_manager.board_tiles[self.board_manager.hole_tile_row_idx * self.tile_count + self.board_manager.hole_tile_col_idx] = self.board_manager.board_tiles[self.move_tile_row_idx * self.tile_count + self.move_tile_col_idx]
@@ -394,7 +423,7 @@ def moveAsSuggested(self, suggested_move_from_dir: int) -> bool:
394423
from_tile_id = self.board_manager.board_tiles[from_row_idx * self.tile_count + from_col_idx]
395424
from_tile_level_id = str(from_tile_id)
396425
if True:
397-
self.board_manager.moveTile(from_col_idx, from_row_idx)
426+
self.board_manager.moveTileFromIdxes(from_col_idx, from_row_idx)
398427
else:
399428
prev_hole_tile_id = self.board_manager.board_tiles[self.board_manager.hole_tile_row_idx * self.tile_count + self.board_manager.hole_tile_col_idx]
400429
self.board_manager.board_tiles[self.board_manager.hole_tile_row_idx * self.tile_count + self.board_manager.hole_tile_col_idx] = self.board_manager.board_tiles[from_row_idx * self.tile_count + from_col_idx]

0 commit comments

Comments
 (0)