我首先要感謝所有試圖幫助我解決這個問題的人。我正在創建一個蛇克隆來給自己帶來真正的問題和情況。我自己已經經歷了很多,但不幸的是,我覺得我撞到了一堵磚墻,不想再浪費時間不理解可能非常簡單的事情。
我的問題是蛇的尾巴。當我創建一個蛇尾塊時,我希望該塊占據創建的上一個塊的位置。這是因為現在第一個塊跟隨不在同一類中的頭部。頭部在代碼中稱為 playerObj。我創建了一個 for 回圈,因為我認為這是完成此操作的最佳方法,并且我從 for 回圈中排除了第一個尾部塊。
for (int i = 1; i < snakeSize; i )
int previousTail = i - 1;
//std::cout << "CURRENT TAIL X: " << CurTailPosX << " Y: " << CurTailPosY << std::endl;
// This is the where the issue happens - ONLY TAIL 0 POS IS TRACKED AND ALL OTHERS GET UPDATED TO ITS POS
growTail.snakeArray[i][0] = growTail.snakeArray[previousTail][0];
growTail.snakeArray[i][1] = growTail.snakeArray[previousTail][1];
std::cout << "Last Tail Pos X: " << growTail.snakeArray[previousTail][0] << " Y: " << growTail.snakeArray[previousTail][1] << std::endl;
目前正在發生的事情是所有被創建的尾部最終只是成為第一個尾部塊的位置,所以它們都顯示為一個塊,當然是第一個尾部塊。我相信這很簡單,再次為此感到抱歉,但我畢竟在學習。
如果這還不夠資訊,您可以查看此粘貼 bin 鏈接,該鏈接將包含您可以瀏覽的整個檔案(https://pastebin.com/zSJCVJ9F)。再次感謝您閱讀這么遠的內容并與我打交道,哈哈...
uj5u.com熱心網友回復:
發布的代碼所做的基本上如下
for (size_t i = 1; i < a.size(); i )
{ // Given a container, e.g. {1, 2, 3, 4}
a[i] = a[i - 1]; // the result would be {1, 1, 1, 1}
}
您應該以相反的方向遍歷容器以保留除最后一個以外的其他值。
鑒于任務,我建議實作一個回圈緩沖區或使用std::deque:
deques上常見操作的復雜度(效率)如下:
隨機訪問 - 常量 O(1)
在末尾或開頭插入或洗掉元素 - 常量 O(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348111.html
