我正在制作一个 ncurses 游戏,其中有一艘宇宙飞船向其他敌人发射子弹。我已经让船发射子弹了,但是当我发射不止一颗子弹时,只有最新的子弹会移动,其余的会保持不动。
int i=0 , j=-1;
switch(key){
case KEY_UP: playership.row=changeRow(playership.row,-1,playership.col); /* move up */
break;
case KEY_DOWN: playership.row=changeRow(playership.row,+1,playership.col); /* move down */
break;
case KEY_LEFT:playership.col=changeColumn(playership.col,-1,playership.row); /* move left */
break;
case KEY_RIGHT:playership.col=changeColumn(playership.col,+1,playership.row); /* move right */
break;
case ' ': {j++; bullets[0].col=playership.col+5; bullets[j].row=playership.row-2 ;break;}
default: break; /* do nothing if other keys */
}
if (j!=-1){
attrset(COLOR_PAIR(2));
mvprintw(bullets[j].row,bullets[0].col,"%c",bullet);
mvprintw(bullets[j].row+1,bullets[0].col," ");
bullets[j].row=bullets[j].row-1;
refresh();
}
我试图实施我之前问题的答案中评论中的建议,但我认为我做得不对:
如果一次可以有 5 颗子弹,则需要存储它们的位置。如果你有 int bullet_pos[5] 那很好。您可以在每个位置使用 -1 表示没有子弹处于活动状态。然后,当您想触发一个时,您搜索数组以找到第一个为 -1 的位置并将其更改为 0。当您绘制子弹时,您遍历数组并为非 -1 的任何位置绘制子弹,并更新其位置。