void bullet_storage_draw_all(BulletStorage self) { int i; for (i = 0; i < self->bullet_limit; i++) { //Loop backwards until we reach 0 or inactive bullets. Bullet current_bullet = self->bullet_array[i]; if (current_bullet->flag_is_active) bullet_draw(current_bullet); } }
void scene_render_game(Uint32 delta) { background_draw(3, delta); world_draw(delta); player_draw(delta); enemy_draw(); item_draw(); bullet_draw(); player_life_draw(); world_life_draw(); }
void ship_draw(const ship *s) { // draw the bullets bullet_draw(s->bullets); // draw the ship const uint32_t bitmap_width = al_get_bitmap_width(s->bitmap); const uint32_t bitmap_height = al_get_bitmap_height(s->bitmap); if (s->attr.is_immune) { const double time_passed = al_get_time() - s->attr.time_stamp; if (time_passed - floor(time_passed) < 0.5) { al_draw_tinted_scaled_rotated_bitmap(s->bitmap, color_gray(), bitmap_width / 2, bitmap_height / 2, s->center.x, s->center.y, SHIP_SIZE / bitmap_width, SHIP_SIZE / bitmap_height, s->direction, 0); } else { al_draw_scaled_rotated_bitmap(s->bitmap, bitmap_width / 2, bitmap_height / 2, s->center.x, s->center.y, SHIP_SIZE / bitmap_width, SHIP_SIZE / bitmap_height, s->direction, 0); } } else { al_draw_scaled_rotated_bitmap(s->bitmap, bitmap_width / 2, bitmap_height / 2, s->center.x, s->center.y, SHIP_SIZE / bitmap_width, SHIP_SIZE / bitmap_height, s->direction, 0); } #ifdef DEBUG al_draw_circle(s->center.x, s->center.y, 5, al_map_rgb(255, 0, 0), 3); #endif }
int main() { set_conio_terminal_mode(); acc_tick = last_tick = 0; for(int i=0;i<2;i++) { map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,15); } map_init(&gBulletModel); map_load(&gBulletModel,"plasma.dat"); bullet_init(&gBulletObject,0,0,0,&gBulletModel); system("clear"); while(bLoop) { //타이밍처리 clock_gettime(CLOCK_MONOTONIC,&work_timer); double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9); double delta_tick = cur_tick - last_tick; last_tick = cur_tick; //실시간입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~\r"); } else if(ch == 'j') { double vx,vy,c; vx = 1.0; vy = 1.0; c = sqrt(vx*vx + vy*vy); vx /= c; vy /= c; bullet_fire(&gBulletObject,17,7,1.0,vx,vy,10.0); } } //apply 위치 bullet_apply(&gBulletObject,delta_tick); //타이밍계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); bullet_draw(&gBulletObject,&gScreenBuffer[1]); gotoxy(0,0); map_dump(&gScreenBuffer[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { set_conio_terminal_mode(); acc_tick=last_tick=0; system("clear"); map_init(&gScreenBuffer); map_new(&gScreenBuffer,45,20); map_init(&gBackBuffer); map_new(&gBackBuffer,45,20); map_init(&gF22Raptor); map_load(&gF22Raptor,"plane.dat"); map_init(&gF22Bullet); map_load(&gF22Bullet,"bullet1.dat"); map_init(&gPotal); map_load(&gPotal,"potal.dat"); map_init(&gPotalBulletModel); map_load(&gPotalBulletModel,"plasma.dat"); Plane_init(&gPlayerPlane,&gF22Raptor,35,17); Potal_init(&gPlayerPotal,&gPotal,1,1); //Potal_Bullet_init(&gPotalBulletObject,0,0,0,&gPotalBulletModel); for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){ bullet_init(&g_bullets[i],0,0,0,&gF22Bullet); } for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){ Potal_Bullet_init(&gPotalBulletObject[i],0,0,0,&gPotalBulletModel); } while(bLoop) { //타이밍처리 clock_gettime(CLOCK_MONOTONIC,&work_timer); double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9); double delta_tick = cur_tick - last_tick; last_tick = cur_tick; clock_gettime(CLOCK_MONOTONIC,&work_timer2); double cur_tick2 = work_timer2.tv_sec + (double)(work_timer2.tv_nsec * 1e-9); double delta_tick2 = cur_tick2 - last_tick2; last_tick2 = cur_tick2; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } else if(ch=='j'){ for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){ _S_Bullet_Object *pObj=&g_bullets[i]; if(pObj->m_nFSM==0){ //슬립상태 bullet_fire(pObj,gPlayerPlane.m_nXpos,gPlayerPlane.m_nYpos,10,5.0); break; } } } else if(ch=='k'){ for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){ _S_Potal_Bullet_Object *pObj=&gPotalBulletObject[i]; if(pObj->m_nFSM==0){ double vx,vy,c; double angle=0; angle+=(delta_tick2*45); double rad=(angle/180.0)*PI; vx=(gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos)*cos(rad)-(gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos)*sin(rad); vy=(gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos)*sin(rad)+(gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos)*cos(rad); /* vx=gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos; vy=gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos; */ c=sqrt(vx*vx+vy*vy); vx/=c; vy/=c; Potal_Bullet_Fire(&gPotalBulletObject[i],gPlayerPotal.m_nXpos,gPlayerPotal.m_nYpos,vx,vy,10,0); break; } } } Plane_Apply(&gPlayerPlane,delta_tick2,ch); } for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){ _S_Bullet_Object *pObj=&g_bullets[i]; bullet_apply(pObj,delta_tick); } //apply 위치.. //Potal_Bullet_Apply(&gPotalBulletObject,delta_tick2); //타이밍 계산 acc_tick += delta_tick; acc_tick2 += delta_tick2; if(acc_tick && acc_tick2 > 0.1) { map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어 //map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer);//오브잭트 출력 Plane_Draw(&gPlayerPlane,&gScreenBuffer); Potal_Draw(&gPlayerPotal,&gScreenBuffer); for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){ _S_Bullet_Object *pObj=&g_bullets[i]; bullet_draw(pObj,&gScreenBuffer); } for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){ _S_Potal_Bullet_Object *pObj=&gPotalBulletObject[i]; Potal_Bullet_Draw(pObj,&gScreenBuffer); } gotoxy(0,0); puts("---------------------------------------------\r"); map_dump(&gScreenBuffer,Default_Tilepalete); puts("---------------------------------------------\r"); puts("move : w,a,s,d \r"); puts("quit : q \r"); acc_tick = 0; acc_tick2 = 0; } } return 0; }
int main() { set_conio_terminal_mode(); acc_tick=last_tick=0; system("clear"); map_init(&gScreenBuffer); map_new(&gScreenBuffer,35,16); map_init(&gBackBuffer); map_new(&gBackBuffer,35,16); map_init(&gF22Raptor); map_load(&gF22Raptor,"plane1.dat"); map_init(&gF22Bullet); map_load(&gF22Bullet,"bullet1.dat"); Plane_init(&gPlayerPlane,&gF22Raptor,17,10); for(int i=0;i< sizeof(g_bullets)/sizeof(S_BULLET_OBJECT) ;i++) { bullet_init(&g_bullets[i],0,0,0,&gF22Bullet); } while(bLoop) { //타이밍처리 clock_gettime(CLOCK_MONOTONIC,&work_timer); double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9); double delta_tick = cur_tick - last_tick; last_tick = cur_tick; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("\r\n Bye~ \r"); } else if(ch == 'j') { for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { S_BULLET_OBJECT *pObj = &g_bullets[i]; if(pObj->m_nFSM == 0) { //sleep 상태라면- bullet_fire(pObj, gPlayerPlane.m_nXpos+2, gPlayerPlane.m_nYpos,10,5.0); break; } } } Plane_Apply(&gPlayerPlane,delta_tick,ch); } for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { S_BULLET_OBJECT *pObj = &g_bullets[i]; bullet_apply(pObj,delta_tick); } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어 Plane_Draw(&gPlayerPlane,&gScreenBuffer); for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { S_BULLET_OBJECT *pObj = &g_bullets[i]; bullet_draw(pObj,&gScreenBuffer); } //map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer); //오브젝트 출력 gotoxy(0,0); puts("-------------------------------------\r"); map_dump(&gScreenBuffer,Default_TilePalette); puts("-------------------------------------\r"); puts("move : w,a,s,d \r"); puts("quit : q \r"); acc_tick = 0; } } return 0; }
int main() { set_conio_terminal_mode(); acc_tick = last_tick = 0; system("clear"); map_init(&gScreenBuffer); map_new(&gScreenBuffer,50,23); map_init(&gBackBuffer); map_new(&gBackBuffer,50,23); map_init(&gF22Raptor); map_load(&gF22Raptor,"plane1.dat"); map_init(&gF22Bullet); map_load(&gF22Bullet,"bullet1.dat"); Plane_init(&gPlayerPlane,&gF22Raptor,22,17); map_init(&gBulletModel); map_load(&gBulletModel,"plasma.dat"); bullet_init(&gmissile,0,0,0,&gBulletModel); for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { bullet_init(&g_bullets[i],0,0,0,&gF22Bullet); } int shootx = 25; int shooty = 21; int fire_x = 25; int fire_y = 0; while(bLoop) { //타이밍처리 clock_gettime(CLOCK_MONOTONIC,&work_timer); double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9); double delta_tick = cur_tick - last_tick; last_tick = cur_tick; double vx,vy,c; //실시간입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~\r"); } else if(ch == 'j') { for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { double vx,vy,c; vx = gPlayerPlane.m_nXpos - shootx; vy = gPlayerPlane.m_nYpos - shooty; c = sqrt(vx*vx+vy*vy); vx /= c; vy /= c; S_BULLET_OBJECT *pObj = &g_bullets[i]; if(pObj->m_nFSM == 0) { //슬립상태라면.. setColor(33,40); bullet_fire(pObj,gPlayerPlane.m_nXpos,gPlayerPlane.m_nYpos,5.0,vx,vy,10); setColor(0,0); break; } } } else if(ch == 'k') { double vx,vy,c; vx = gPlayerPlane.m_nXpos - fire_x; vy = gPlayerPlane.m_nYpos - fire_y; c = sqrt(vx*vx+vy*vy); vx /= c; vy /= c; bullet_fire(&gmissile,fire_x,fire_y,5.0,vx,vy,10); } Plane_Apply(&gPlayerPlane,delta_tick,ch); } for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { S_BULLET_OBJECT *pObj = &g_bullets[i]; bullet_apply(pObj,delta_tick); } bullet_apply(&gmissile,delta_tick); //타이밍계산 acc_tick += delta_tick; if(acc_tick > 0.1) { map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어 //map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer); //오브젝트 출력 Plane_Draw(&gPlayerPlane,&gScreenBuffer); bullet_draw(&gmissile,&gScreenBuffer); for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) { S_BULLET_OBJECT *pObj = &g_bullets[i]; bullet_draw(pObj,&gScreenBuffer); } gotoxy(0,0); map_dump(&gScreenBuffer,Default_Tilepalete); puts("move : w,a,s,d \r"); puts("quit : q \r"); acc_tick = 0; } } return 0; }