如何完成此功能以使子弹摧毁一块石头(由#字符显示)?我正在考虑使用mvinch检查* bullet字符=="#",但是它不起作用。
void update_bullet(int key_code) {
screen_position bullet_pos = get_sprite_screen_loc(bullet_id);
if (bullet_pos.x < 0 && key_code == ' ') {
screen_position ship_pos = get_sprite_screen_loc(ship_id);
move_sprite_to(bullet_id, ship_pos.x + 7, ship_pos.y + 3);
} else if (bullet_pos.x > 79) {
move_sprite_to(bullet_id, -1, 0);
} else if (bullet_pos.x > 0) {
move_sprite(bullet_id, 1, 0);
}
}
上面的代码是将子弹移动到屏幕上。
我试图做的是当它走到控制台屏幕的边缘时,它会移回(-1,0),当它与岩石#处于同一位置时,两者都是#和*字符移回(-1,0)。
答案 0 :(得分:0)
您无法将光标移出窗口,因此您的move_sprite
函数(问题中未提供)必须处理该方面。例如(缺少move_sprite
的代码,它可能正在执行
int move_sprite(screen_position position, int dx, int dy)
{
int y, x;
getyx(stdscr, y, x);
if (dx > 0) {
++x;
}
else if (dx < 0) {
x = -1; /* this is incorrect, but matches the information given in the question */
}
...
move(y, x);
}
根据move
手册页,尝试将光标移出窗口将返回ERR
并且无效。