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
相关产品推荐
相关产品推荐

