2017-08-14 15 views
-2

私はスネークゲームを作っていますが、うまく動作しますが、スネークが画面の端にくると、私はそれを周りに戻します。 問題は、彼が周りを回るとき、それは作品をスキップするようですか?スネークゲーム - なぜスネークはタイルをスキップしますか?

私はこれをどのように言うのか分からないので、ここのビデオがあります。 https://youtu.be/fxuEYsrIZMU

エッジにちょうど現れるのではなく、1から2のタイルをスキップします。ここで は、コードスニペットです:

void update(std::vector<sf::RectangleShape>& food) { 
     std::cout << body.size(); 
     for(int i = body.size() - 1; i > 0; i--) { 
      checkBounds(body.at(i)); // Check Snake is in screen. 
      /* ... */ 
     } 
     checkBounds(body.at(0)); 
     /* ... */ 
    } 
void checkBounds(sf::RectangleShape& point) { 
     if(point.getPosition().x < 0) point.move(WIDTH, 0); 
     if(point.getPosition().y < 0) point.move(0, HEIGHT); 
     if(point.getPosition().x > WIDTH) point.move(-WIDTH, 0); 
     if(point.getPosition().y > HEIGHT) point.move(0, -HEIGHT); 
    } 

WIDTH、HEIGHTは、画面W.あるとH. 体がstd::vector<sf::RectangleShape>ここ は完全なコードです:https://pastebin.com/sr4Tbrin

答えて

2

あなたはグリッドのボードを持っていると言いますあなたがラップすることを決定した場合はサイズ10

は、蛇の頭が11

になります。しかし、彼は11-10 = 1、ない0に移動されます。

if(point.getPosition().x > WIDTH) point.move(-(WIDTH+1), 0); 
    if(point.getPosition().y > HEIGHT) point.move(0, -(HEIGHT+1)); 
+2

問題が実際にこれらの行にありますが、解決策が正しくありません::

あなたが必要とする正しい値である - (WIDTH + 1)と - (HEIGHT + 1)それぞれ。あなたが入力した値は、スニークを1つ多くスキップさせます。つまり、2番目のフィールドに移動します。 – KjMag

+0

私は理由がわからないのですか? @KjMagありがとうございます。 –

+0

問題ありません。ダウンボートについては、この質問を答えではなく主題に関するコメントとして尋ねると、それがより目に見えるようになると思います。 – KjMag

関連する問題