问题描述
我正在学习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)