2015-09-03 11 views
0

基本上我創建了一個獨立玩蛇的遊戲的算法。 我已經設法確定了遊戲的方向,但是我製作的蛇的版本有環形空間,即當蛇的頭部離開正方形的一邊時,它重新出現反面。在環形空間中,如何計算兩點間最短的方向

在此基礎上,它並不重要,我算什麼距離兩者之間的點(即蛇的頭和食物塊),而是什麼方向食物是相對於頭部。

I.e.在50像素平方的網格上,當頭在[第49行,第49列]和食物在[1,1]時,我不希望蛇必須向上和向左移動48個方格。我寧願它只向下2個方格,向右2個方向。

然後我會用什麼公式來計算哪個方向會導致頭部和食物之間的最短行程時間?

PS請讓我知道如果我應該在另一個堆棧交換站點發布這個,我會這樣做。

回答

0

考慮一維情況可能更容易。基本上環形緩衝器,請參閱圖:

1-d representation of game

你必須在3位玩家「P」和你的「目標」在9位,和總的播放空間寬度= 10最短運動的朝向方向目標可以再由下式給出:

if(P.coord < Goal.coord) 
{ 
    int dist1 = Goal.coord - P.coord; 
    int dist2 = (Width - Goal.coord) + P.coord; 
    if(dist1 < dist2) 
    { 
    //move forwards 
    } 
    else 
    { 
    //move backwards 
    } 
} 
else 
{ 
    int dist1 = P.coord - Goal.coord; 
    int dist2 = (Width - P.coord) + Goal.coord; 
    if(dist1 < dist2) 
    { 
    //move backwards 
    } 
    else 
    { 
    //move forwards 
    } 
} 

同樣辦理「其他」部分,如果p>座標> Goal.coord。現在將其擴展到2維。

+0

謝謝Nicko!但是我在「p.coord> Goal.coord'部分放了什麼?看起來你已經佔了所有可能性? – Aron

相關問題