可能是一个关于 C++ 循环的简单问题

Probably a simple question about a c++ loop

首先,我想感谢所有试图帮助我解决这个问题的人。我正在创建一个蛇克隆来给自己带来真正的问题和情况。我自己经历了很多,但不幸的是,我觉得自己碰壁了,不想再浪费时间去理解一些可能非常简单的东西。

我的问题是蛇的尾巴。当我创建一个蛇尾块时,我希望该块占据之前创建的可渗透块的位置。这是因为截至目前,第一个块跟在不在同一个 class 中的头部之后。头部在代码中称为 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;
            

目前正在发生的事情是所有被创建的尾巴最终都变成了第一个尾块位置,所以它们都显示为一个块,当然是第一个尾块。我相信这很简单,对此再次感到抱歉,但我正在学习 after-all.

如果这些信息不够,您可以查看此粘贴箱 link,其中包含您可以浏览的整个文件 (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}
}                   

您应该以相反的方向遍历容器以保留除最后一个以外的其他值。

鉴于任务,我建议实施 circular buffer or use std::deque:

The complexity (efficiency) of common operations on deques is as follows:

Random access - constant O(1)
Insertion or removal of elements at the end or beginning - constant O(1)