微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 pygame 选择一个特定的矩形

如何解决用 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.Rectcollidepoint() 查看鼠标是否在板上。计算鼠标指针所在的行和列:

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)

另见Pygame mouse clicking detection

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。