クラスの課題としてこのピンボール ゲーム プログラムを作成しましたが、ピンボールの動きと衝突を修正するのに苦労しました。
最初の問題は、ユーザーが速度としてどの方向を設定しても、ボールは特定の角度でしか移動しないことです。
私のメモ、講義のスライド、およびディスカッションの配布資料によると、なぜそれが機能しないのか、私にはまったくわかりません。なぜそれが機能しないのか、誰にも分かりますか?私は周りを見回しましたが、決定的な答えを見つけることができませんでした。どんな助けでも大歓迎です。私は困惑しています:(
動作していないということは、ユーザーがピンボールをどちらの方向に進むように設定しても、一方向にしか進まないことを意味します (たとえば、ユーザーがピンボールを左に進むように設定すると、ピンボールは右に進みます。ユーザーがピンボールを上に進むように設定すると、ピンボールは右に進みます。など)。 ) また、ピンボールが壁やターゲットに衝突していません。
グラフィックスはgraphics.pyです: http://mcsp.wartburg.edu/zelle/python/graphics/graphics/index.html
衝突コードは次のとおりです (速度反転とともに、ゲーム ボードの右壁との衝突のみが保持されます):
def checkHit(ball,target,dispX,dispY,VelX,VelY,hit): ###pulled the definition out of the loop but keeping it here for easier reference
center = ball.getCenter() ###defines the center of the pinball as a point
hit = 0 ###used for differentiating between objects collided with
if center.getX() + 1 <= 45 and center.getX() + 1 + dispX > 45: ####if the pinball collides with the right wall of the board
VelX = VelX *(-1) ###velocity in the x direction reverses
hit = 0 ###did not collide with a target
for j in range(1000):####1000 frames (ball isn't expected to last long in the air, only a couple seconds)
vy = vy - 9.8 ###effect of gravity
dx = vx / math.sqrt(vx**2 + vy**2) ###speed in x direction over time
dy = vy / math.sqrt(vx**2 + vy**2) ###speed in y direction over time
checkHit(pinball,target_front1,dx,dy,vx,vy,0) ####runs function each frame for collision testing
pinball.move(dx , dy) ###moves pinball