如何解决用 pygame 选择一个特定的矩形
我正在学习python和pygame,我正在尝试制作一个纸牌游戏;我已经完成了逻辑的基础知识,但我正在为一个简单的 GUI 苦苦挣扎。 我需要让玩家能够从草稿行中选择一张牌并将其放在他们的 6x4“板上”。为此,我像这样绘制了矩形:
class Board:
def __init__(self):
self.visible_draft = []
self.placed_totems_P1 = [[]]
self.placed_totems_P2 = [[]]
def draw_card_base(self,window):
window.fill(WHITE)
for col in range(COLS):
y = 770 - col*175
for row in range(ROWS):
x = row*175 + 40
pygame.draw.rect(window,GREY,(x,y,CARD_SIZE,CARD_SIZE))
def main():
board = Board()
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
board.draw_card_base(window)
pygame.display.flip()
但现在我被卡住了,因为我不知道如何让玩家“选择”一个插槽来放置所选择的卡片(我假设会以相同的方式选择,就在之前)。我阅读了有关碰撞的信息,并考虑编写手册“如果鼠标在这里,这就是它所在的插槽”。理想情况下,我想我可以阅读可能是 1A、1B、2C 纸张格式的卡片,但我真的不知道从哪里开始。 希望这是有道理的,可能我没有合适的词汇来描述我想说的话,我还在学习!很高兴得到答案,谢谢!
解决方法
使用 pygame.Rect
和 collidepoint()
查看鼠标是否在板上。计算鼠标指针所在的行和列:
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
mx,my = event;
board_rect = pygame.Rect(40,770 - ROWS*175,COLS*175,ROWS*175)
if board_rect.collidepoint(mx,my):
col = (mx - 40) // COLS
row = (my - 770 + ROWS*175) // ROWS
print(col,row)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。