Pygame中如何设置精灵组内卡牌精灵的坐标以实现分排显示
解决方案
要实现每种花色的13张卡牌分不同行显示,核心是按花色分组处理每行布局,同时计算每行的Y坐标偏移。以下是修改后的代码及关键说明:
修改后的代码
def draw_hand(screen, cards): # 初始化卡牌尺寸 sample_card = Card(screen, card_type['Diamond'], card_value['7']) card_width = sample_card.rect.width card_height = sample_card.rect.height # 定义间距:卡牌横向间距、行间距 card_gap_x = 5 row_gap_y = 10 # 起始坐标:X从card_width开始留边距,Y从card_height开始留边距 start_x = card_width current_y = card_height # 按花色遍历,每个花色对应一行 for suit in card_type: current_x = start_x # 遍历当前花色的所有牌值 for value in card_value: c = Card(screen, suit, value) # 设置当前卡牌的坐标 c.rect.x = current_x c.rect.y = current_y cards.add(c) # 更新下一张牌的X坐标 current_x += card_width + card_gap_x # 更新下一行的Y坐标 current_y += card_height + row_gap_y cards.draw(screen)
关键逻辑说明
- 按花色分行:外层循环遍历每个花色,每个花色处理完后切换到下一行,保证同一花色的13张牌在同一行。
- 坐标计算:
- 每行的X坐标从
start_x开始,每张牌的X坐标累加卡牌宽度+横向间距。 - 每行的Y坐标初始为
current_y,一个花色处理完成后,Y坐标累加卡牌高度+行间距,实现换行。
- 每行的X坐标从
- 间距控制:通过
card_gap_x和row_gap_y可以灵活调整卡牌之间、行之间的空隙,避免布局拥挤。
额外优化建议
如果需要让每行的卡牌居中显示,可以计算每行的起始X坐标:
# 计算每行总宽度:13张牌的宽度 + 12个横向间距 row_total_width = 13 * card_width + 12 * card_gap_x screen_width = screen.get_rect().width # 居中的起始X坐标 start_x = (screen_width - row_total_width) // 2
内容的提问来源于stack exchange,提问作者Stefano
相关产品推荐
相关产品推荐

