Skip to content

Commit afa65ff

Browse files
committed
Minesweeper improvements
1 parent c5bec45 commit afa65ff

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

Metro/Metro_RP2350_Minesweeper/code.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,15 @@ def reset():
197197
def set_difficulty(diff):
198198
game_logic.difficulty = diff
199199
reset()
200+
difficulty_menu.select_item(DIFFICULTIES[diff]['label'].lower().replace(" ", "_"))
200201

201202
def hide_group(group):
202203
group.hidden = True
203204

204205
for i, difficulty in enumerate(DIFFICULTIES):
205206
# Create a button for each difficulty
206-
difficulty_menu.add_item((set_difficulty, i), difficulty['label'])
207+
selected = i == game_logic.difficulty
208+
difficulty_menu.add_item((set_difficulty, i), difficulty['label'], selected)
207209

208210
reset_menu.add_item(reset, "OK")
209211

Metro/Metro_RP2350_Minesweeper/gamelogic.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
'grid_size': (20, 14),
2424
'mines': 58,
2525
},
26+
{
27+
'label': "Custom",
28+
'grid_size': (8, 8),
29+
'mines': 49,
30+
},
2631
)
2732

2833
INFO_BAR_HEIGHT = 16
@@ -68,8 +73,12 @@ def reset(self):
6873
if (self.grid_width * 16 > self._display.width or
6974
self.grid_height * 16 > self._display.height - INFO_BAR_HEIGHT):
7075
raise ValueError("Grid size exceeds display size")
71-
self._board_data = bytearray(self.grid_width * self.grid_height)
7276
self._mine_count = DIFFICULTIES[self._difficulty]['mines']
77+
if self._mine_count > (self.grid_width - 1) * (self.grid_height - 1):
78+
raise ValueError("Too many mines for grid size")
79+
if self._mine_count < 10:
80+
raise ValueError("There must be at least 10 mines")
81+
self._board_data = bytearray(self.grid_width * self.grid_height)
7382
self._status = STATUS_NEWGAME
7483
self._start_time = None
7584
self._end_time = None

Metro/Metro_RP2350_Minesweeper/menu.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,41 @@ def __init__(self, label, button_width, menu_width, x, y):
3636
self._menu_items = []
3737
self._root_button = None
3838

39-
def add_item(self, function, label):
39+
def add_item(self, function, label, selected=False):
40+
key = label.lower().replace(" ", "_")
4041
self._menu_items.append(
4142
{
43+
"key": key,
4244
"function": function,
4345
"label": label,
46+
"selected": selected,
4447
}
4548
)
4649
self._render()
4750

51+
def select_item(self, key):
52+
print(f"selecting {key}")
53+
for item in self._menu_items:
54+
if item["key"] == key:
55+
item["selected"] = True
56+
else:
57+
item["selected"] = False
58+
self._render()
59+
4860
@staticmethod
49-
def _create_button(callback, label, width, x, y=0, border=True):
61+
def _create_button(callback, label, width, x, y=0, border=True, selected=False):
5062
if border:
5163
outline_color = 0x000000
5264
selected_outline = 0x333333
5365
else:
5466
outline_color = 0xEEEEEE
5567
selected_outline = 0xBBBBBB
5668

69+
if selected:
70+
label_color = 0x008800
71+
else:
72+
label_color = 0x333333
73+
5774
button = EventButton(
5875
callback,
5976
x=x,
@@ -64,13 +81,14 @@ def _create_button(callback, label, width, x, y=0, border=True):
6481
style=EventButton.RECT,
6582
fill_color=0xEEEEEE,
6683
outline_color=outline_color,
67-
label_color=0x333333,
84+
label_color=label_color,
6885
selected_fill=0xBBBBBB,
6986
selected_label=0x333333,
7087
selected_outline=selected_outline,
7188
)
7289
return button
7390

91+
7492
def _toggle_submenu(self):
7593
self._menu_items_group.hidden = not self._menu_items_group.hidden
7694

@@ -87,7 +105,7 @@ def _render(self):
87105
self._button_width,
88106
self._xpos,
89107
self._ypos,
90-
border=True,
108+
True,
91109
)
92110
self.append(self._root_button)
93111

@@ -113,7 +131,8 @@ def _render(self):
113131
self._menu_width - 2,
114132
self._xpos + 1,
115133
self._ypos + index * MENU_ITEM_HEIGHT + self._root_button.height,
116-
border=False,
134+
False,
135+
item["selected"],
117136
)
118137
self._menu_items_group.append(button)
119138

@@ -151,3 +170,7 @@ def visible(self):
151170
@property
152171
def items_group(self):
153172
return self._menu_items_group
173+
174+
@property
175+
def items(self):
176+
return self._menu_items

0 commit comments

Comments
 (0)