static int fire_fly() { int hit = 0; int ret = 0; for (unsigned i=0; i<fires.size(); i++) { ret++; hit = 0; Object *f = &fires[i]; mvwaddch(win_disp->win, f->y, f->x, ' '); // erase old face f->x += f->xstep; f->y += f->ystep; if (f->x < 0 || f->x >= win_disp->locate.w || f->y < 0 || f->y >= win_disp->locate.h) { fires.erase(fires.begin() + i); break; } // hit test for (unsigned j=0; j<monsters.size(); j++) { Object *m = &monsters[j]; if (f->x == m->x && f->y == m->y) { m->life--; if (m->life <= 0) { hit = 1; monsters.erase(monsters.begin() + j); me.score += m->score; break; } } } if (hit) { continue; } mvwaddch(win_disp->win, f->y, f->x, f->face); draw_me(); wrefresh(win_disp->win); usleep(1000*100); } return ret; }