I'm working on a video game using Pygame, focusing on mouse interactions. My goal is to allow the selection of only one block at a time. Currently, if one block (like the black one) is selected, I can't select any other block until that one is deselected. I've been stuck on this issue for a couple of hours and would appreciate some guidance on how to implement this functionality. Below is the relevant snippet of my code that handles mouse clicks and block selections:
```python
suspectDict = {Suspects(50, 85, 40, 60, "black", 5): "I am a black box",
Suspects(100, 85, 40, 60, "blue", 5): "I am a blue box",
Suspects(150, 85, 40, 60, "white", 5): "I am a white box"}
if event.type == pygame.MOUSEBUTTONDOWN:
mouse = pygame.mouse.get_pos()
for sprite, value in suspectDict.items():
if sprite.set_rect.collidepoint(event.pos):
if sprite.border == 0:
sprite.border = 5
else:
sprite.border = 0
print(value)
# RENDER GAME HERE
for i in suspectDict:
i.drawSquare(screen)
```
Also, here's a video showcasing the current issue: [Check it out here](https://imgur.com/a/RPtM0iR)
2 Answers
I had a similar issue before. What worked for me was creating a 'mediator' that manages the selections. Every time a block is clicked, the mediator checks if any blocks are already selected. If one is, it deselects it before selecting the new one. This approach makes your selection logic much cleaner and avoids complications with each block trying to manage its state individually.
It sounds like you'll need to keep track of the selected block's state. You could create a variable to store which block is currently selected and use that to prevent any further selections until the current block is deselected. For instance, when a block is clicked, check if there's an already selected block; if yes, only allow the new selection after deselecting the old one. It's a pretty straightforward solution!
Could you elaborate on how to implement that? Like, should I just add a boolean flag or something?

That makes a lot of sense! I definitely want to try the mediator pattern! Thanks for the suggestion!