循环通过结构的向量时出现问题。
我目前正在用C++开发一款主机蛇游戏。
我将网格信息存储在一个结构体的向量中。
struct item
{
int xCoord;
int yCoord;
int colour;
};
vector<item> gridInfo;
然后循环遍历网格的坐标,看看是否应该打印一些内容。
for(int y = 0; y < 10; y++)
{
for(int x = 0; x < 10; x++)
{
for(auto it = px.begin(); it != px.end(); ++it)
{
if((*it).xCoord == x && (*it).yCoord == y)
{
SetConsoleTextAttribute(console_color, (*it).colour);
}
else
{
SetConsoleTextAttribute(console_color, 255);
}
}
cout << (" ");
}
cout << "\n";
}
我已经设法让蛇(头部)的主要块与运动工作。
然而,一旦我把“食物”添加到向量中,它就只开始给食物着色。
if(px.back().colour != 207)
{
px.push_back({rand() % 10, rand() % 10, 207});
}
对于那些想知道为什么我用px而不是grindInfo的人,因为显示运行在一个从main调用的函数中。
int main()
{
int localDirection = -1;
vector<item> gridInfo;
srand(time(0));
gridInfo.push_back({4, 4, 191});
while(true)
{
localDirection = kbInput(localDirection);
gridInfo = gameLogic(gridInfo, localDirection);
Sleep(1000);
}
}
先谢谢你的帮助。
1条答案
按热度按时间sulc1iza1#
推送食物信息后,向量的第一个元素是头部信息,第二个元素是食物信息。
在循环
if((*it).xCoord == x && (*it).yCoord == y)
中,其中(x, y)
是头部的坐标,假设食物的坐标不同于头部的坐标,则颜色首先被设置为(*it).colour
,然后被设置为255
。应检查是否找到匹配坐标,并仅在未找到匹配时将颜色设置为
255
。另一种方法是先将颜色设置为
255
,然后执行循环。