2012-07-24 44 views
1

好吧,我有這個遊戲循環永不終止 -計數器不遞減或不

public void run() { 
    setup(); 
    addMouseListeners(); 
    int Turns = NTURNS; 
    int TotalBricks = NBRICKS_PER_ROW * NBRICK_ROWS; 
    while ((Turns>0) && (TotalBricks>0)) { 
     moveBall(); 
     checkForCollision(); 
     pause(DELAY); 
    } 
    System.exit(0); 
} 

- 即使我有這個方法每一個球是時間遞減的匝數值錯過:

private void checkForCollision() { 
    GObject collider = getCollidingObject(); 
    if (collider !=null) { 
     if (collider == Paddle) { 
      vy= -vy; 
     } 
     else { 
      vy= -vy; 
      remove(collider); 
      TotalBricks = TotalBricks - 1; 
     } 
    } 
    if((ball.getX()>=(WIDTH-BALL_RADIUS)) || (ball.getX()<=0)) { 
     vx = -vx; 
    } 
    if(ball.getY()<=0) { 
     vy = -vy; 
    } 
    if(ball.getY()>=HEIGHT) { 
    Turns = Turns -1; 
    remove(ball); 
    newBall(); 
    } 

} 

加上這個

private int Turns; 

在底部,以確保變量是共享上午兩種方法。 無論球失誤多少次,比賽都不會停止。 我錯過了什麼? Thx

+0

就像一個小紙條,它總是一個好主意,接受的答案,讓其他人知道正確的解決方案! :) – ardent 2012-07-25 01:00:50

回答

0

你聲明你Turns變量兩次,一次爲整個類,一次用於該run()方法。由於您還正在檢查run()方法中聲明的Turns變量的值,因此它不會減少,因爲在checkForCollision()中使用的變量不是在while循環中正在檢查的變量。

run(),這樣的:

int Turns = NTURNS; 

需求是:

Turns = NTURNS; 
+0

謝謝。就此而言,我的比賽已經完成,現在我可以把它賣給我的父母。 – dwilbank 2012-07-24 06:01:42

4

您正在run方法中聲明一個新的Turns變量,它正在被該方法使用,因爲它具有更多的本地範圍。這稱爲可變陰影。使用像Eclipse這樣體面的Java IDE,當你這樣做時它會警告你。這幾乎總是一個錯誤。

http://www.xyzws.com/Javafaq/what-is-variable-hiding-and-shadowing/15

+0

好啊 - 終於有東西要讀了!謝謝!循環現在停止。這個陰影現在已經咬了我兩次。 – dwilbank 2012-07-24 05:26:56