игра не работает ncurses

0

Я делаю игру 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. Когда вы нарисуете пули, вы пройдете через массив и нарисуете пулю для любой позиции, которая не является [CN00 ] и обновить его позицию.

  • 0
    разве пули не [j]. передать саму как bullet_pos [5]? и мне нужен цикл для поиска?
Теги:
curses
ncurses

1 ответ

0
Лучший ответ

Если вы еще этого не сделали, попробуйте добавить флаг к своей структуре пули. Что-то вроде alive.

Когда вы хотите стрелять, вы проверяете свой массив и находите неиспользуемую позицию пули (если есть):

for( int i = 0; i < MAX_BULLETS; i++ ) {
    if( !bullets[i].alive ) {
        bullets[i].alive = true;
        bullets[i].row = playership.row;
        bullets[i].col = playership.col+5;
        break;
    }
}

Затем, когда вы обновляете или рисуете:

for( int i = 0; i < MAX_BULLETS; i++ ) {
    if( bullets[i].alive ) {
        attrset(COLOR_PAIR(2));
        mvprintw(bullets[i].row, bullets[i].col, "%c", bullet);
        mvprintw(bullets[i].row+1, bullets[i].col, " " );
        bullets[i].col++;

        // TODO check for bullet death.  If bullet is done, set 'alive' to false.
    }
}

refresh();
  • 0
    Сделал это! еще раз спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню