33from dumbdisplay .core import *
44from dumbdisplay .examples .sliding_puzzle .board_manager import BoardManager
55from dumbdisplay .layer_graphical import LayerGraphical
6+ from dumbdisplay .layer_lcd import LayerLcd
67from dumbdisplay .layer_selection import LayerSelection
78
89BOARD_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