我正在QT上制作一个简单的GUI蛇游戏。头部和身体部位只是颜色不同的圆圈(头部:红色,身体:绿色)。这是我创建初始蛇的一些代码:
void MainWindow::initialize() {
dots = 3; //the initial snake will have 1 head, 2 body parts
//This is just some random coordinates for the head and body
for (int z = 0; z < dots; z++) {
x[z] = 50 - z * STEP;
y[z] = 50;
}
locateSnake();
timerId = startTimer(DELAY);
}
void MainWindow::locateSnake()
{
for (int z = 0; z < dots; z++) {
if (z==0) {
QBrush redBrush(Qt::red);
QPen redPen(Qt::red);
head_ = scene_->addEllipse(0, 0, STEP, STEP, redPen, redBrush);
head_->setPos(x[z],y[z]);
} else {
QBrush greenBrush(Qt::green);
QPen greenPen(Qt::green);
body_ = scene_->addEllipse(0, 0, STEP, STEP, greenPen, greenBrush);
body_->setPos(x[z],y[z]);
}
}
}
移动蛇时,其坐标也会改变,我在moveSnake()函数末尾调用locateSnake(),如下所示:
void MainWindow::moveSnake() {
for (int i = dots; i > 0; i--) {
x[i] = x[(i - 1)];
y[i] = y[(i - 1)];
}
if (left_) {
x[0] -= STEP;
}
if (right_) {
x[0] += STEP;
}
if (up_) {
y[0] -= STEP;
}
if (down_) {
y[0] += STEP;
}
locateSnake();
}
问题在于程序会不断添加圈子,甚至不吃食物。我希望它以某种方式保留点数,并且仅在蛇吃了食物时才改变。这就是我的程序现在正在运行的程序,我只希望它有3个圆圈(1个红色,2个绿色)。有提示吗?
答案 0 :(得分:0)
您应将body_
从QGraphicsEllipseItem*
更改为QList<QGraphicsEllipseItem*>
。
然后,在您的locateSnake()
中:
z
是列表body_
中的有效索引,请使用->setPos(...)
(body_.size() - dots)
,在body_
的末尾添加新的ellipseItems。