Skip to content

Commit be6aeeb

Browse files
authored
Merge pull request #7 from trevorwslee/develop
Develop
2 parents 2353b2d + 9c6b57f commit be6aeeb

75 files changed

Lines changed: 4103 additions & 225 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
.idea
2-
.vscode
3-
venv
4-
__pycache__
5-
/u_dumbdisplay.iml
6-
MicroPythonDumbDisplay.iml
7-
8-
dumbdisplay_experimental
9-
10-
/_test.py
11-
/_dd.py
12-
/_test.ipynb
1+
/.idea
2+
/.vscode
3+
/venv
4+
5+
/MicroPythonDumbDisplay.iml
6+
/MicroPythonDumbDisplay.code-workspace
7+
8+
9+
# non-DD
10+
/experiments/pyclock
11+
12+
13+
#/_test.py
14+
#/_test.ipynb
1315
/.micropico
14-
/experiments/pyclock
16+
/_my_secret.py
17+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"folders": [
3+
{
4+
"path": "."
5+
},
6+
{
7+
"name": "Mpy Remote Workspace",
8+
"uri": "pico:"
9+
}
10+
],
11+
"settings": {
12+
"python.languageServer": "Pylance"
13+
}
14+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import random
2+
3+
4+
class BoardManager:
5+
def __init__(self, tile_count: int):
6+
self.tile_count = tile_count
7+
self.board_tiles = [i for i in range(tile_count * tile_count)]
8+
self.hole_tile_col_idx = 0
9+
self.hole_tile_row_idx = 0
10+
self.randomize_can_move_from_dirs = [0, 0, 0, 0]
11+
self.randomize_can_move_from_dir = -1
12+
def clone(self):
13+
new_board_manager = BoardManager(self.tile_count)
14+
new_board_manager.board_tiles = self.board_tiles.copy()
15+
new_board_manager.hole_tile_col_idx = self.hole_tile_col_idx
16+
new_board_manager.hole_tile_row_idx = self.hole_tile_row_idx
17+
new_board_manager.randomize_can_move_from_dirs = self.randomize_can_move_from_dirs.copy()
18+
new_board_manager.randomize_can_move_from_dir = self.randomize_can_move_from_dir
19+
return new_board_manager
20+
def showBoard(self):
21+
for col_idx in range(self.tile_count):
22+
for row_idx in range(self.tile_count):
23+
#tile_idx = col_idx * self.tile_count + row_idx
24+
tile_id = self.board_tiles[col_idx * self.tile_count + row_idx]
25+
if row_idx == 0:
26+
if col_idx == 0:
27+
print(self.tile_count * "-----" + "-")
28+
print("|", end="")
29+
print(f" {tile_id:2} |", end="")
30+
if row_idx == (self.tile_count - 1):
31+
print()
32+
if col_idx == (self.tile_count - 1):
33+
print(self.tile_count * "-----" + "-")
34+
#print()
35+
def randomizeBoardStepGetUndoMove(self) -> int:
36+
self.randomizeBoardStep()
37+
moved_from_dir = self.randomize_can_move_from_dir
38+
if moved_from_dir == 0:
39+
undo_move_from_dir = 1
40+
elif moved_from_dir == 2:
41+
undo_move_from_dir = 3
42+
elif moved_from_dir == 3:
43+
undo_move_from_dir = 2
44+
else:
45+
undo_move_from_dir = 0
46+
return undo_move_from_dir
47+
def randomizeBoardStep(self) -> tuple[int, int, int]:
48+
can_count = self.checkCanMoveFromDirs(self.randomize_can_move_from_dir)
49+
self.randomize_can_move_from_dir = self.randomize_can_move_from_dirs[random.randint(0, can_count - 1)]
50+
(from_col_idx, from_row_idx) = self.canMoveFromDirToFromIdxes(self.randomize_can_move_from_dir)
51+
to_col_idx = self.hole_tile_col_idx
52+
to_row_idx = self.hole_tile_row_idx
53+
from_tile_id = self.board_tiles[from_row_idx * self.tile_count + from_col_idx]
54+
self.board_tiles[from_row_idx * self.tile_count + from_col_idx] = self.board_tiles[self.hole_tile_row_idx * self.tile_count + self.hole_tile_col_idx]
55+
self.board_tiles[self.hole_tile_row_idx * self.tile_count + self.hole_tile_col_idx] = from_tile_id
56+
self.hole_tile_col_idx = from_col_idx
57+
self.hole_tile_row_idx = from_row_idx
58+
return (to_col_idx, to_row_idx, from_tile_id)
59+
def moveTileByMove(self, move: int) -> int:
60+
(from_col_idx, from_row_idx) = self.canMoveFromDirToFromIdxes(move) # move is the same thing as move_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:
63+
prev_hole_tile_id = self.board_tiles[self.hole_tile_row_idx * self.tile_count + self.hole_tile_col_idx]
64+
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]
65+
self.board_tiles[from_row_idx * self.tile_count + from_col_idx] = prev_hole_tile_id
66+
self.hole_tile_col_idx = from_col_idx
67+
self.hole_tile_row_idx = from_row_idx
68+
return prev_hole_tile_id
69+
def checkBoardSolved(self) -> bool:
70+
for row_tile_idx in range(0, self.tile_count):
71+
for col_tile_idx in range(0, self.tile_count):
72+
tile_id = col_tile_idx + row_tile_idx * self.tile_count
73+
board_tile_id = self.board_tiles[row_tile_idx * self.tile_count + col_tile_idx]
74+
if board_tile_id != tile_id:
75+
return False
76+
return True
77+
def checkCanMoveFromDirs(self, prev_can_move_from_dir: int) -> int:
78+
can_count = 0
79+
if self.hole_tile_col_idx > 0 and prev_can_move_from_dir != 1:
80+
self.randomize_can_move_from_dirs[can_count] = 0; # 0: left
81+
can_count += 1
82+
if self.hole_tile_col_idx < (self.tile_count - 1) and prev_can_move_from_dir != 0:
83+
self.randomize_can_move_from_dirs[can_count] = 1 # 1: right
84+
can_count += 1
85+
if self.hole_tile_row_idx > 0 and prev_can_move_from_dir != 3:
86+
self.randomize_can_move_from_dirs[can_count] = 2 # 2: up
87+
can_count += 1
88+
if self.hole_tile_row_idx < (self.tile_count - 1) and prev_can_move_from_dir != 2:
89+
self.randomize_can_move_from_dirs[can_count] = 3 # 3: down
90+
can_count += 1
91+
return can_count
92+
def canMoveFromDirToFromIdxes(self, can_move_from_dir: int):
93+
if can_move_from_dir == 0:
94+
from_col_idx = self.hole_tile_col_idx - 1
95+
from_row_idx = self.hole_tile_row_idx
96+
elif can_move_from_dir == 1:
97+
from_col_idx = self.hole_tile_col_idx + 1
98+
from_row_idx = self.hole_tile_row_idx
99+
elif can_move_from_dir == 2:
100+
from_col_idx = self.hole_tile_col_idx
101+
from_row_idx = self.hole_tile_row_idx - 1
102+
else:
103+
from_col_idx = self.hole_tile_col_idx
104+
from_row_idx = self.hole_tile_row_idx + 1
105+
return (from_col_idx, from_row_idx)

0 commit comments

Comments
 (0)