gpt4 book ai didi

c++ - 将尾部添加到贪吃蛇游戏 [c++ sfml]

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:55 28 4
gpt4 key购买 nike

我想通过填充每次头部移动时产生的空隙来移动蛇的尾部:
.ooox
.oox
. ooox
所以基本上最后一个元素移动到间隙中。我可以获得间隙的位置并在那里创建一个尾部,但是一旦我有超过 1 个尾部对象,它就无法正常工作。我相信它会在与其他尾部相同的位置创建新的尾部对象,因此存在差距。尾=代表

尾部

    //If tail exists
if(imamoRep)
{
rep[repCount-1].setPosition(gap);

temp[0] = rep[repCount-1]; //Remember last element
for(int i=1;i<repCount;i++)
{
rep[i] = rep[i-1];
}
rep[0]=temp[0]; //assign last element to first
}

绘图

for(int i=0; i<repCount; i++)
{
window.draw(rep[i]);
}

我猜我对数组做错了什么,最后一个元素应该放在第一个,所有其他元素应该向左移动,所以有一个新的最后一个尾部。我在开始时创建了 100 个尾部元素,所以我只需要正确绘制它们即可。如果我删除除了设置位置的第一行之外的尾部代码,那么我会得到这个结果:enter image description here

尾部被留在后面,因为只有最后一个元素的位置发生变化,否则如前所述,所有尾部都在同一位置。我真的很感激帮助。

最佳答案

你几乎成功了。想想这个循环对你的职位做了什么:

for(int i = 1; i < repCount; ++i)
{
rep[i] = rep[i - 1];
}

i=1 开始,它将为 rep[1] 分配 rep[0] 的值。接下来对于 i=2 它将分配 rep[2]rep[ 覆盖的 rep[1] 的值0] 在上一次迭代中。等等……

您需要做的是在写入 i 元素之前反转写入 i+1 元素的循环:

for(int i = repCount - 1; i > 0; --i)
{
rep[i] = rep[i - 1];
}

请注意 std::copy_backward一般实现此行为。 IE。您可以将上面的循环重写为:

if(repCount > 0)
{
// Assuming rep is a std::vector using std::vector::begin
std::copy_backward(rep.begin(), rep.begin() + repCount - 1, rep.begin() + repCount);
}

关于c++ - 将尾部添加到贪吃蛇游戏 [c++ sfml],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54278985/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com