You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame开发剪刀石头布:图片缩放与居中异常求助

剪刀石头布游戏图片缩放与居中问题解决

开发剪刀石头布游戏,窗口已搭建完成,其他功能正常,但图片无法按预期缩放、无法居中显示。尝试的错误代码如下:

pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Rock.jpg' ),(10 , 5)

pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Paper.jpg' ),(10 , 5)

pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Scissors.jpg' ),(10 , 5)

附带代码截图与运行效果截图。


问题根源

你完全用错了pygame.transform.scale的用法——这是一个函数,不是可赋值的变量,不能直接把加载的图片和尺寸赋值给它。同时路径里的\~是多余的转义符,会导致路径解析错误。

正确实现步骤

1. 正确加载图片

先加载原始图片,注意修正路径:

import pygame
pygame.init()

# 窗口初始化(假设你已经有这部分代码)
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("剪刀石头布")

# 加载原始图片,去掉多余的转义符
rock_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Rock.jpg')
paper_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Paper.jpg')
scissors_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Scissors.jpg')

2. 缩放图片

调用pygame.transform.scale()函数对图片进行缩放,注意你原来设置的(10,5)尺寸过小,可能导致图片几乎不可见,建议调整为合理尺寸:

# 设置目标缩放尺寸
target_size = (150, 150)
rock_scaled = pygame.transform.scale(rock_img, target_size)
paper_scaled = pygame.transform.scale(paper_img, target_size)
scissors_scaled = pygame.transform.scale(scissors_img, target_size)

3. 居中绘制图片

通过计算坐标实现居中:窗口中心坐标减去图片自身宽高的一半。如果要横向排列三个图片,可参考以下代码:

# 获取窗口尺寸
screen_w, screen_h = screen.get_size()

# 计算横向排列的起始X坐标(让三个图片整体居中)
total_width = target_size[0] * 3 + 40  # 40是图片间的总间距
start_x = (screen_w - total_width) // 2
# 计算Y坐标(垂直居中)
start_y = (screen_h - target_size[1]) // 2

# 绘制三个图片
screen.blit(rock_scaled, (start_x, start_y))
screen.blit(paper_scaled, (start_x + target_size[0] + 20, start_y))  # 间距20
screen.blit(scissors_scaled, (start_x + target_size[0]*2 + 40, start_y))

# 更新显示
pygame.display.flip()

4. 事件循环(确保窗口正常运行)

最后别忘了添加事件循环,让窗口保持打开:

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # 每次循环都要重绘背景(避免图片重叠)
    screen.fill((255,255,255))
    # 重新绘制图片
    screen.blit(rock_scaled, (start_x, start_y))
    screen.blit(paper_scaled, (start_x + target_size[0] + 20, start_y))
    screen.blit(scissors_scaled, (start_x + target_size[0]*2 + 40, start_y))
    pygame.display.flip()

pygame.quit()

内容的提问来源于stack exchange,提问作者Bibue35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:20:35