/*=======================================================*/ int main() { set_conio_terminal_mode(); acc_tick = last_tick = 0; while(bLoop) { // time process 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; // input if (nFSM == 0) { gameStart_Title(delta_tick); } else if (nFSM == 1) { gameStart_Play(); } if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } else if (ch =='p') { //laser double bullet_pos_x = gTestBulletObject.m_fXpos; double bullet_pos_y = gTestBulletObject.m_fYpos; double target_pos_x = gPlaneObject.m_fXpos; double target_pos_y = gPlaneObject.m_fYpos; double vx = target_pos_x - bullet_pos_x; double vy = target_pos_y - bullet_pos_y; double dist = sqrt(vx*vx+vy*vy); vx /= dist; vy /= dist; gLaserObject.pfFire(&gLaserObject, gPlaneObject.m_fXpos,gPlaneObject.m_fYpos, -1,0,gPlaneObject.m_fYpos,15); } gPlaneObject.pfApply(&gPlaneObject,delta_tick,ch); } gTestAlienObject.pfApply(&gTestAlienObject,delta_tick); gTestBulletObject.pfApply(&gTestBulletObject,delta_tick); gLaserObject.pfApply(&gLaserObject,delta_tick); if (gTestBulletObject.m_nFSM != 0) { double bullet_pos_x = gTestBulletObject.m_fXpos; double bullet_pos_y = gTestBulletObject.m_fYpos; double target_pos_x = gPlaneObject.m_fXpos; double target_pos_y = gPlaneObject.m_fYpos; double vx = target_pos_x + bullet_pos_x; double vy = target_pos_y + bullet_pos_y; double dist = sqrt(vx*vx+vy*vy); if(dist < 2) { gTestBulletObject.m_nFSM = 0; gPlaneObject.m_nFSM = 0; } } acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); setColor(33,40); gPlaneObject.pfDraw(&gPlaneObject,&gScreenBuf[1]); gTestAlienObject.pfDraw(&gTestAlienObject,&gScreenBuf[1]); gTestBulletObject.pfDraw(&gTestBulletObject,&gScreenBuf[1]); gLaserObject.pfDraw(&gLaserObject,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,16); } map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); map_init(&gPlasmaModel); map_load(&gPlasmaModel,"plasma.dat"); alien_init(&gTestAlienObject,&gAlienModel); bullet_init(&gTestBulletObject,0,0,0,&gPlasmaModel); gTestAlienObject.m_pBullet = &gTestBulletObject; gTestAlienObject.m_fXpos = 5; gTestAlienObject.m_fYpos = 5; gTestAlienObject.m_nFSM = 1; set_conio_terminal_mode(); acc_tick=last_tick=0; 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"); } } gTestAlienObject.pfApply(&gTestAlienObject,delta_tick); gTestBulletObject.pfApply(&gTestBulletObject,delta_tick); //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gTestAlienObject.pfDraw(&gTestAlienObject,&gScreenBuf[1]); gTestBulletObject.pfDraw(&gTestBulletObject,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_TilePalette); acc_tick = 0; } } return 0; }