我正在编写一个将@字符绘制到控制台屏幕上的函数,并重复自己直到它吸引了一个' H'已经绘制了。基本上是"炸弹"功能。我用一个while循环编写了这个函数,这样它就可以继续绘制角色,只要它所绘制的空间不等于“H'”。如果它确实相同,我已经输入了一个if语句来打破程序。但是,即使使用if语句,程序也会在' H'上绘制时继续运行。
void bomb_until_hit(int home_radius) {
int x = 0, y = 0;
while (mvinch(y, x) != 'H') {
x = get_next_bomb_x();
y = get_next_bomb_y();
mvaddch(y, x, '@' );
refresh();
sleep(1);
if (mvinch(y, x) == 'H') {
break; }
}
}
mvinch是一个函数,它在绘制新字符之前基本上检查字符的坐标。
为什么我的if语句不起作用?
答案 0 :(得分:1)
您的代码会绘制@
和然后检查H
(两次)。显然,它不会找到H
因为它只是画了@
。
让我们看一下从你搬到新职位开始会发生什么:
void bomb_until_hit(int home_radius) {
int x = 0, y = 0;
while (mvinch(y, x) != 'H') { // 5) Check for an H here
x = get_next_bomb_x(); // 1) Move to next X
y = get_next_bomb_y(); // 2) Move to next Y
mvaddch(y, x, '@' ); // 3) Put an @ here
refresh();
sleep(1);
if (mvinch(y, x) == 'H') { // 4) Check for an H here
break; }
}
}
您需要重新排列语句的顺序,以便在移动到新位置后,在写入之前进行检查。