2012-05-06 38 views
1

我用VC++做了一個簡單的彈跳程序。
這個程序的目標是球必須在菱形中反彈。它不能走出菱形。
它似乎運行成功,但在左右角落,它卡住了。
如何解決此問題?我認爲當球向左右角落時,相等的條件是重複的...
你能否提出其他算法來解決這個問題?
我試圖讓這個問題像
while(!isInside(getNextPos(circle))) { updateDirectionVector(circle); }
但我不能這樣做,因爲隨機值每次都改變。 (使用定時器重複)
這是這個程序的算法,除了在角落之外,它是有效的。
C++ Ball在菱形中彈跳

up: 
while(1) goDownSideCircle; 
if(StuckOnDownSide) goto down; 
down: 
while(1) goUpSideCircle; 
if(StuckOnUpSide) goto up; 
+0

您的代碼是否真的像這樣縮進?如果是的話,那麼我恐怕你運氣不好......或者是因爲粘貼在這裏? – Aamir

+0

你確定你沒有試圖在這裏實現一個新的linux內核:-)順便說一句,goto關鍵字被折舊。儘可能避免它。 – sarepta

+0

爲了讓那些試圖閱讀和理解你的代碼的人更容易,你應該格式化它,以便它不需要水平滾動。此外,用適當的描述性名稱常量替換所有數字常量,並將計算結果合併到適當命名的變量中。 – irobot

回答

0

問題已解決。
求解算法:

RandValue; 
    while(1){ 
    DrawCircle(Center_X,Center_Y); 
    Center_X+=Rand_X; Center_Y+=Rand_Y; 
    check=false; 
    Check_X=Center_X; Check_Y=Center_Y; 
    while(BorderCheck){ 
    RandValue; 
    Check_X+=Rand_X; Check_Y+=Rand_Y; 
    check=true;} 
    if(check){ 
    Center_X=Check_X; Center_Y=Check_Y;}}