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

Python技术问题:无法提升变量数值——Pong游戏击球后球速未增加

解决Pong游戏球速无法提升的问题

嘿,我看了你的代码,发现higher_speed函数里有几个小问题导致速度没变化,咱们一步步来修复:

问题出在哪?

1. 函数参数与全局变量冲突

你给higher_speed定义了两个参数SPEED和x,但又在函数里用global SPEED引用全局变量,这不仅冗余,还会让参数里的SPEED完全没用。而且你调用higher_speed()时没传参数,其实会触发TypeError(函数要2个参数但你只传了0个),可能你运行时没留意这个报错?

2. 没有真正修改全局变量

函数里的SPEED + x只是做了加法运算,但没把结果赋值给SPEED,等于白算。还有x = 25是给局部变量赋值,这个参数也没必要存在,因为你每次都是固定加25。

3. 笔误导致右侧碰撞可能失效

你写的WIDTH7777应该是笔误,要改成实际的窗口宽度变量WIDTH,不然右侧球拍的碰撞判断根本不会触发。

修复后的代码

第一步:重写higher_speed函数

去掉冗余参数,直接修改全局变量:

def higher_speed():
    global SPEED
    SPEED += 25  # 关键:把加法结果赋值给全局变量SPEED
    # 可选:加个打印语句调试,确认速度确实在提升
    print(f"球速已提升至: {SPEED} 像素/秒")

第二步:修正碰撞处的调用逻辑

调用函数时不需要额外声明global SPEED(函数内部已经处理了),同时修正宽度变量的笔误:

# bounce left
if ball_position[0] < BAT_WIDTH + BALL_SIZE / 2:
    if bat_min < bat_position[0] < bat_max:
        # bat bounces ball
        BALL_SPEED[0] = abs(BALL_SPEED[0])
        higher_speed()  # 直接调用提升速度的函数
    else:
        # bat hadn't bounced the ball, player loses
        score[1] += 1
        reset()

# bounce right
if ball_position[0] > WIDTH - (BAT_WIDTH + BALL_SIZE / 2):  # 修正WIDTH7777为WIDTH
    if bat_min < bat_position[1] < bat_max:
        BALL_SPEED[0] = -abs(BALL_SPEED[0])
        higher_speed()
    else:
        score[0] += 1
        reset()

额外优化建议

如果你希望球拍速度也跟着球速同步提升,不要提前赋值BAT_SPEED = SPEED * 1.5,而是在移动球拍的时候直接用SPEED * 1.5,这样每次SPEED变化后,球拍速度也会自动更新。

这样修改后,每次球碰到球拍,SPEED就会增加25,你可以根据游戏的难度调整这个增量数值~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:02:34