簡體   English   中英

可能是一個關於 c++ 循環的簡單問題

[英]Probably a simple question about a c++ loop

我首先要感謝所有試圖幫助我解決這個問題的人。 我正在創建一個蛇克隆來給自己帶來真正的問題和情況。 我自己經歷了很多,但不幸的是,我覺得我撞到了一堵磚牆,不想再浪費時間不理解可能非常簡單的事情。

我的問題是蛇的尾巴。 當我創建一個蛇尾塊時,我希望該塊占據創建的上一個塊的位置。 這是因為現在第一個塊跟隨不在同一類中的頭部。 頭部在代碼中稱為 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 )。 再次感謝您閱讀這么遠的內容並與我打交道,哈哈...

發布的代碼所做的基本上如下

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM