int main() { _S_MAP_OBJECT ScreenBuf; map_init(&ScreenBuf); map_new(&ScreenBuf,35,17); system("clear"); gotoxy(0,0); double angle = 90; for(int i=0;i<35;i++) { angle = (double) i *( 180 /35); // printf("%f \r\n",sin( (angle/180) * PI )); double my = sin(angle/180*PI) * 8.0; map_PutTile(&ScreenBuf,i,8 + my,1); my = cos(angle/180*PI) * 8.0; map_PutTile(&ScreenBuf,i,8 + my,2); } map_dump(&ScreenBuf,Default_Tilepalete); return 0; }
/* * m_map - generic message handler * -- by Run * * parv[0] = sender prefix * parv[1] = server mask */ int m_map(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { void *args[1]; if (feature_bool(FEAT_HIS_MAP) && !IsAnOper(sptr)) { sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :%s %s", sptr, "/MAP has been disabled; visit", feature_str(FEAT_HIS_URLSERVERS)); return 0; } if (parc < 2) parv[1] = "*"; args[0] = sptr; if (feature_bool(FEAT_HIS_MAP_SCRAMBLED) && !IsAnOper(sptr)) map_dump_head_in_sand(sptr, map_reply, args); else map_dump(&me, parv[1], 0, map_reply, args); send_reply(sptr, RPL_MAPEND); return 0; }
int main() { for(int i=0;i<2;i++){ map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],45,30); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane1.dat"); map_init(&gPlasmaModel); map_load(&gPlasmaModel,"plasma.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); map_init(&gPlaneBulletModel); map_load(&gPlaneBulletModel,"bullet1.dat"); map_init(&gPotal); map_load(&gPotal,"potal.dat"); map_init(&gPotalBulletModel); map_load(&gPotalBulletModel,"potal_bullet.dat"); Plane_init(&gPlayerObject,&gPlayerModel,30,26); Potal_init(&gPlayerPotal,&gPotal,1,1); Potal_Bullet_init(&gPotalBulletObject,0,0,0,&gPotalBulletModel); gPlayerObject.m_nFSM=1; for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){ bullet_init(&gPlaneBulletObjects[i],0,0,0,&gPlaneBulletModel); } for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){ bullet_init(&gBulletObjects[i],0,0,0,&gPlasmaModel); } double TablePosition[]={0,10,20,30,40}; for(int i=0;i<5;i++){ _S_ALIEN_OBJECT *pObj=&gAlienObjects[i]; alien_init(pObj,&gAlienModel); pObj->m_fXpos=TablePosition[i]; pObj->m_fYpos=5; pObj->m_nFSM=1; gAlienObjects[i].m_pBullet=&gBulletObjects[i]; } system("clear"); set_conio_terminal_mode(); acc_tick=last_tick=0; acc_guid_delay_tick=0; acc_bullet_delay_tick=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; //실시간 입력 if(kbhit()!=0) { char ch = getch(); if(ch=='q') { bLoop=0; puts("bye~ \r"); } else if(ch=='j') { for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) { double vx,vy,c; vx=gAlienObjects[i].m_fXpos-gPlayerObject.m_fXpos; vy=gAlienObjects[i].m_fYpos-gPlayerObject.m_fYpos; c=sqrt(vx*vx+vy*vy); vx/=c; vy/=c; _S_BULLET_OBJECT *pObj = &gPlaneBulletObjects[i]; if(pObj->m_nFSM==0) { //슬립상태 pObj->pfFire(pObj,gPlayerObject.m_fXpos,gPlayerObject.m_fYpos,10.0,vx,vy,10.0); break; } } } _S_Potal_Bullet_Object *pObj=&gPotalBulletObject; if(pObj->m_nFSM==0){ double potal_bullet_posx=gPlayerPotal.m_nXpos; double potal_bullet_posy=gPlayerPotal.m_nYpos; double target_x=gPlayerObject.m_fXpos; double target_y=gPlayerObject.m_fYpos; double vx=target_x-potal_bullet_posx; double vy=target_y-potal_bullet_posy; /* double angle=0; angle+=(delta_tick*45); double rad=(angle/180.0)*PI; double vx=(target_x-potal_bullet_posx)*cos(rad)-(target_y-potal_bullet_posy)*sin(rad); double vy=(target_x-potal_bullet_posx)*sin(rad)+(target_y-potal_bullet_posy)*cos(rad); */ double dist=sqrt(vx*vx+vy*vy); vx/=dist; vy/=dist; Potal_Bullet_Fire(&gPotalBulletObject,gPlayerPotal.m_nXpos,gPlayerPotal.m_nYpos,10,vx,vy,10.0); } gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); } //apply Potal_Bullet_Apply(&gPotalBulletObject,delta_tick); for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj=&gPlaneBulletObjects[i]; pObj->pfApply(pObj,delta_tick); } for(int i=0;i<5;i++ ){ _S_ALIEN_OBJECT *pObj=&gAlienObjects[i]; pObj->pfApply(pObj,delta_tick); } //potal_bullet { double potal_bullet_posx=gPlayerPotal.m_nXpos; double potal_bullet_posy=gPlayerPotal.m_nYpos; double target_x=gPlayerObject.m_fXpos; double target_y=gPlayerObject.m_fYpos; /* double vx=target_x-potal_bullet_posx; double vy=target_y-potal_bullet_posy;*/ double angle=0; angle+=(delta_tick*45); double rad=(angle/180.0)*PI; double vx=(target_x-potal_bullet_posx)*cos(rad)-(target_y-potal_bullet_posy)*sin(rad); double vy=(target_x-potal_bullet_posx)*sin(rad)+(target_y-potal_bullet_posy)*cos(rad); double dist=sqrt(vx*vx+vy*vy); if(dist<0.1){ gPotalBulletObject.m_nFSM=0; } } acc_bullet_delay_tick+=delta_tick; if(acc_bullet_delay_tick>2.0){ //2초동안 방향설정 acc_bullet_delay_tick=0; double bullet_posx=gPotalBulletObject.m_fXpos; double bullet_posy=gPotalBulletObject.m_fYpos; double target_posx=gPlayerObject.m_fXpos; double target_posy=gPlayerObject.m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); vx/=dist; vy/=dist; gPotalBulletObject.m_fvx=vx; gPotalBulletObject.m_fvy=vy; } //총알 맞았을때 게임오버 for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) { if(gBulletObjects[i].m_nFSM!=0) { double bullet_posx=gBulletObjects[i].m_fXpos; double bullet_posy=gBulletObjects[i].m_fYpos; double target_posx=gPlayerObject.m_fXpos; double target_posy=gPlayerObject.m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); if(dist<0.1) { gBulletObjects[i].m_nFSM=0; gPlayerObject.m_nFSM=0; gAlienObjects[i].m_nFSM=0; } } } //alien 총알 맞았을때 for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) { if(gPlaneBulletObjects[i].m_nFSM!=0) { double bullet_posx=gPlaneBulletObjects[i].m_fXpos; double bullet_posy=gPlaneBulletObjects[i].m_fYpos; double target_posx= gAlienObjects[i].m_fXpos; double target_posy= gAlienObjects[i].m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); if(dist<5.0) { gAlienObjects[i].m_nFSM=0; } } } for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) { gBulletObjects[i].pfApply(&gBulletObjects[i],delta_tick); } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); Potal_Draw(&gPlayerPotal,&gScreenBuf[1]); for(int i=0;i<5;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){ gBulletObjects[i].pfDraw(&gBulletObjects[i],&gScreenBuf[1]); } for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){ _S_BULLET_OBJECT *pObj = &gPlaneBulletObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } puts("---------------------------------------------\r"); map_dump(&gScreenBuf[1],Default_Tilepalete); 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; for (int i=0; i<2; i++) { map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,15); } map_init(&gMissile); map_load(&gMissile,"plasma.dat"); missile_init(&gMissileObject,0,0,0,&gMissile); system("clear"); //target int targetx, targety; targety = 3; targetx = 2; int fire_x = 24; int fire_y = 12; 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(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } else if (ch == 'j') { double vx, vy, c; vx = targetx - fire_x; vy = targety - fire_y; c = sqrt(vx*vx + vy*vy); vx /= c; vy /= c; missile_fire(&gMissileObject, fire_x, fire_y, 10.0, vx, vy, 10); } else if (ch == 'a') { targetx -= 1; } else if (ch == 'd') { targetx += 1; } } // apply location missile_apply(&gMissileObject,delta_tick); // time calculate acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); missile_draw(&gMissileObject,&gScreenBuffer[1]); gotoxy(0,0); map_PutTile(&gScreenBuffer[1],fire_x,fire_y,1); map_PutTile(&gScreenBuffer[1],targetx,targety,5); map_dump(&gScreenBuffer[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; }
int main() { system("clear"); for(int i=0;i<2;i++){ map_init(&gScreenBuffer[i]); gScreenBuffer[i].fpnew(&gScreenBuffer[i],35,16); //map_new(&gScreenBuffer[i],35,16); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane.dat"); Plane_init(&gPlayerObject,&gPlayerModel,17,10); bullet_init(&gBulletObject,0,0,0,&gPlayerModel); map_init(&gBulletModel); map_load(&gBulletModel,"plasma.dat"); bullet_init(&gBulletObject,0,0,0,&gBulletModel); set_conio_terminal_mode(); acc_tick=last_tick=0; acc_bullet_delay_tick=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; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } else if(ch=='j'){ double bullet_posx=0; double bullet_posy=0; double target_posx=gPlayerObject.m_fXpos; double target_posy=gPlayerObject.m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); vx/=dist; vy/=dist; gBulletObject.pfFire(&gBulletObject,bullet_posx,bullet_posy,10,vx,vy,10.0); } gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); //Plane_Apply(&gPlayerObject,delta_tick,ch); } acc_bullet_delay_tick+=delta_tick; if(acc_bullet_delay_tick>2.0){ //2초동안 방향설정 acc_bullet_delay_tick=0; double bullet_posx=gBulletObject.m_fXpos; double bullet_posy=gBulletObject.m_fYpos; double target_posx=gPlayerObject.m_fXpos; double target_posy=gPlayerObject.m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); vx/=dist; vy/=dist; gBulletObject.m_fvx=vx; gBulletObject.m_fvy=vy; } //apply위치 gBulletObject.pfApply(&gBulletObject,delta_tick); //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick..\r"); gotoxy(0,0); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuffer[1]); gBulletObject.pfDraw(&gBulletObject,&gScreenBuffer[1]); //Plane_Draw(&gPlayerObject,&gScreenBuffer[1]); map_dump(&gScreenBuffer[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { //srand((float)time(NULL)); //랜덤 함수 for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],40,25); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane3.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"plasma1.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"alien1.dat"); map_init(&gMissileModel); map_load(&gMissileModel,"missile.dat"); map_init(&gFishModel); map_load(&gFishModel,"fish1.dat"); //비행기 init Plane_init(&gPlayerObject,&gPlayerModel,20,22); gPlayerObject.m_nFSM = 1; //에일리언 총알 init for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++) { bullet_init(&gBulletObject[i],0,0,0,&gBulletModel); } //비행기 총알 init for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++) { bullet_init(&gMissileObject[i],0,0,0,&gMissileModel); } //에일리언 갯수와 위치 double TablePosition1[] = {0,6.0,30.0,13.0}; for(int i=0;i<4;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; alien_init(pObj,&gAlienModel); pObj->m_fXpos = TablePosition1[i]; pObj->m_fYpos = 2; pObj->m_nFSM = 1; gAlienObjects[i].m_pBullet = &gBulletObject[i]; } //물고기 init //srand(time(NULL)); double TablePosition2[] = {6.0,19.0,31.0}; //double TablePosition3[] = {5.0,15.0}; for(int i=0;i<3;i++) { _S_FISH_OBJECT *pObj = &gFishObject[i]; Fish_init(pObj,&gFishModel); pObj->m_fXpos = TablePosition2[i]; //rand() % 20; 랜덤값을 불러온다 pObj->m_fYpos = 2; pObj->m_nFSM = 2; } set_conio_terminal_mode(); acc_tick=last_tick=0; system("clear"); //플레이상태로 만들기 gPlayerObject.m_nFSM = 1; 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') { for(int i=0;i<sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj = &gMissileObject[i]; if(pObj->m_nFSM == 0) { //슬립상태라면.... gMissileObject[i].pfFire(pObj,gPlayerObject.m_fXpos,gPlayerObject.m_fYpos, 10,0,-1,5.0); break; } } } //비행기apply gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); } //비행기총알 apply for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++) { _S_BULLET_OBJECT *pObj = &gMissileObject[i]; pObj->pfApply(pObj,delta_tick); } //에일리언총알 apply for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++) { _S_BULLET_OBJECT *pObj = &gBulletObject[i]; pObj->pfApply(pObj,delta_tick); } //에일리언apply for(int i=0;i<4;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfApply(pObj,delta_tick); } //물고기 apply for(int i=0;i<3;i++) { _S_FISH_OBJECT *pObj = &gFishObject[i]; pObj->pfApply(pObj,delta_tick); } //충돌-에일리언총알에 비행기가 맞을때 for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++) { _S_BULLET_OBJECT *pObj = &gBulletObject[i]; if(pObj->m_nFSM != 0) { double dist = getDistance_1(pObj,&gPlayerObject); if(dist < 0.25) { pObj->m_nFSM = 0; gPlayerObject.m_nFSM = 0; printf("---------------GAME OVER----------------\r\n"); bLoop = 0; } } } //충돌-에일리언이 비행기 총알에 맞을때 for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++) { _S_BULLET_OBJECT *pObj = &gMissileObject[i]; if(pObj->m_nFSM != 0) { double dist = getDistance_2(pObj,&gAlienObjects[i]); if(dist < 4.0) { gAlienObjects[i].m_nFSM = 0; //printf("---------------GAME WIN----------------\r\n"); } } } //충돌-물고기에 비행기가 맞을때 for(int i=0;i<2;i++) { _S_FISH_OBJECT *pObj = &gFishObject[i]; if(pObj->m_nFSM != 0) { double dist = getDistance_3(pObj,&gPlayerObject); if(dist < 1.0) { //pObj->m_nFSM = 0; gPlayerObject.m_nFSM = 0; printf("---------------GAME OVER----------------\r\n"); bLoop = 0; } } } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); //비행기draw gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); //에일리언 draw for(int i=0;i<4;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } //에일리언 총알 draw for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++) { _S_BULLET_OBJECT *pObj = &gBulletObject[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } //비행기 총알 draw for(int i=0;i<sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj = &gMissileObject[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } //물고기 draw for(int i=0;i<3;i++) { _S_FISH_OBJECT *pObj = &gFishObject[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } map_dump(&gScreenBuf[1],Default_Tilepalete); 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; for(int i=0;i<2;i++) { map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,15); } system("clear"); double target_x,target_y; double center_x,center_y; center_x = 14; center_y = 7; target_x = 14; target_y = 3; double target_x2,target_y2; double center_x2,center_y2; center_x2 = 14; center_y2 = 3; target_x2 = 14; target_y2 = 2; double angle = 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; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } } ///////////////////////////////// //apply 위치... angle += (delta_tick * 45); double tx,ty; double rad = angle/180 * 3.141592; tx = (target_x-center_x) * cos(rad) - (target_y - center_y)*sin(rad) ; ty = (target_x-center_x) * sin(rad) + (target_y - center_y)*cos(rad) ; tx += center_x; ty += center_y; double tx2,ty2; double rad2 = angle/180 * 3.141592; tx2 = (target_x2-center_x2) * cos(rad2) - (target_y2 - center_y2)*sin(rad2) ; ty2 = (target_x2-center_x2) * sin(rad2) + (target_y2 - center_y2)*cos(rad2) ; tx2 += center_x2; ty2 += center_y2; //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); map_PutTile(&gScreenBuffer[1],tx,ty,2); map_PutTile(&gScreenBuffer[1],center_x,center_y,5); map_PutTile(&gScreenBuffer[1],target_x,target_y,1); map_PutTile(&gScreenBuffer[1],target_x2,target_y2,3); gotoxy(0,0); map_dump(&gScreenBuffer[1],Default_Tilepalette); acc_tick = 0; } } }
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() { system("clear"); for(int i=0;i<10;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,30); } map_init(&gPlaneModel); map_load(&gPlaneModel,"plane5.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"alien5.dat"); map_init(&gPlasmaModel); map_load(&gPlasmaModel,"bullet5.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"bullet5.dat"); Plane_init(&gTestPlaneObject,&gPlaneModel,17,25); gTestPlaneObject.m_nFSM = 1; double TablePosition[] = {0,3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0}; for(int i=0;i< sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT); i++) { bullet_init(&gTestBulletObject[i],0,0,0,&gBulletModel); } for(int i=0;i< 10; i++) { bullet_init(&gTestBulletObject2[i],0,0,0,&gPlasmaModel); } for(int i=0;i<10;i++) { _S_ALIEN_OBJECT *pObj = &gTestAlienObject[i]; alien_init(pObj,&gAlienModel,1,2); pObj->m_fXpos = TablePosition[i]; pObj->m_fYpos = 3; pObj->m_nFSM = 1; gTestAlienObject[i].m_pBullet = &gTestBulletObject2[i]; } set_conio_terminal_mode(); acc_tick=last_tick=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; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } if(ch == 'j') { for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj = &gTestBulletObject[i]; if(pObj->m_nFSM == 0) { //슬립상태라면... pObj->pfFire(pObj, gTestPlaneObject.m_fXpos, gTestPlaneObject.m_fYpos,5,0,-2,10); break; } } } gTestPlaneObject.pfApply(&gTestPlaneObject,delta_tick,ch); } for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj = &gTestBulletObject[i]; pObj->pfApply(pObj,delta_tick); } for(int i=0;i<10;i++) { _S_ALIEN_OBJECT *pObj = &gTestAlienObject[i]; pObj->pfApply(pObj,delta_tick); } for(int i=0;i<10;i++) { gTestBulletObject2[i].pfApply(&gTestBulletObject2[i],delta_tick); if(gTestBulletObject2[i].m_nFSM != 0) { double dist = getDistance(&gTestBulletObject2[i],&gTestPlaneObject); if(dist < 1.0) { gTestBulletObject2[i].m_nFSM = 0; gTestPlaneObject.m_nFSM = 0; } } } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gTestPlaneObject.pfDraw(&gTestPlaneObject,&gScreenBuf[1]); for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) { _S_BULLET_OBJECT *pObj = &gTestBulletObject[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } for(int i=0;i<10;i++) { _S_ALIEN_OBJECT *pObj = &gTestAlienObject[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } for(int i=0;i<4;i++) { _S_BULLET_OBJECT *pObj = &gTestBulletObject2[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main(int argc,char *argv[]) { if(argc < 2) { gnPlayerIndex = 0; } else { gnPlayerIndex = atoi(argv[1]); } printf("ready player %d \r\n",gnPlayerIndex); //소켓 연결 시도... struct sockaddr_in server; socket_desc = socket(AF_INET,SOCK_STREAM,0); if(socket_desc == -1) { puts("err create socket"); } server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons(8080); if(connect(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) { puts("connect error"); return 1; } puts("connect ok!"); //쓰레드 기동 .. { int err = pthread_create(&tid,NULL,&InputThread,NULL); if(err != 0) { printf("err : %s \r\n",strerror(err)); } else { printf("thread create success \r\n"); } } { int err = pthread_create(&tid,NULL,&ListenThread,NULL); if(err != 0) { printf("err : %s \r\n",strerror(err)); } else { printf("thread create success \r\n"); } } puts("system ready!"); sleep(3); //게임 리소스 로딩 for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],60,30); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane1.dat"); map_init(&gPlaneBulletModel); map_load(&gPlaneBulletModel,"bullet1.dat"); map_init(&gPotal); map_load(&gPotal,"potal.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); map_init(&gPlasmaModel); map_load(&gPlasmaModel,"plasma.dat"); Plane_init(&gPlayerObject[0],&gPlayerModel,5,25); gPlayerObject[0].m_nFSM = 1; Plane_init(&gPlayerObject[1],&gPlayerModel,50,25); gPlayerObject[1].m_nFSM = 1; Potal_init(&gPlayerPotal,&gPotal,1,1); for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_PLANE_BULLET_OBJECT);i++){ plane_bullet_init(&gPlaneBulletObjects[i],0,0,0,&gPlaneBulletModel); } for(int i=0;i<sizeof(gPlasmaObjects)/sizeof(_S_BULLET_OBJECT);i++){ bullet_init(&gPlasmaObjects[i],0,0,0,&gPlasmaModel); } double TablePosition[]={0,10,20,30,40,50,60}; for(int i=0;i<6;i++){ _S_ALIEN_OBJECT *pObj=&gAlienObjects[i]; alien_init(pObj,&gAlienModel); pObj->m_fXpos=TablePosition[i]; pObj->m_fYpos=5; pObj->m_nFSM=1; gAlienObjects[i].m_pBullet=&gPlasmaObjects[i]; } puts("object setup ok!"); sleep(1); system("clear"); set_conio_terminal_mode(); acc_tick=last_tick=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; for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_PLANE_BULLET_OBJECT);i++) { _S_PLANE_BULLET_OBJECT *pObj=&gPlaneBulletObjects[i]; pObj->pfApply(pObj,delta_tick); } for(int i=0;i<6;i++ ){ _S_ALIEN_OBJECT *pObj=&gAlienObjects[i]; pObj->pfApply(pObj,delta_tick); } // _S_Potal_Bullet_Object *pObj=&gPotalBulletObject; // if(pObj->m_nFSM==0){ // double potal_bullet_posx=gPlayerPotal.m_nXpos; // double potal_bullet_posy=gPlayerPotal.m_nYpos; // double target_x=gPlayerObject[0].m_fXpos; // double target_y=gPlayerObject[0].m_fYpos; // double vx=target_x-potal_bullet_posx; // double vy=target_y-potal_bullet_posy; // double dist=sqrt(vx*vx+vy*vy); // vx/=dist; vy/=dist; // Potal_Bullet_Fire(&gPotalBulletObject,gPlayerPotal.m_nXpos,gPlayerPotal.m_nYpos,10,vx,vy,10.0); // } //총알 맞았을때 게임오버 for(int i=0;i<sizeof(gPlasmaObjects)/sizeof(_S_BULLET_OBJECT);i++) { if(gPlasmaObjects[i].m_nFSM!=0) { double bullet_posx=gPlasmaObjects[i].m_fXpos; double bullet_posy=gPlasmaObjects[i].m_fYpos; double target_posx=gPlayerObject[0].m_fXpos; double target_posy=gPlayerObject[0].m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); if(dist<0.1) { gPlasmaObjects[i].m_nFSM=0; gPlayerObject[0].m_nFSM=0; gAlienObjects[i].m_nFSM=0; system("clear"); printf("----------------------\r\n"); printf(" Game over\r\n"); printf("----------------------\r\n"); bLoop=0; } } } //alien 총알 맞았을때 for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_PLANE_BULLET_OBJECT);i++) { if(gPlaneBulletObjects[i].m_nFSM!=0) { double bullet_posx=gPlaneBulletObjects[i].m_fXpos; double bullet_posy=gPlaneBulletObjects[i].m_fYpos; double target_posx= gAlienObjects[i].m_fXpos; double target_posy= gAlienObjects[i].m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); if(dist<5.0) { gAlienObjects[i].m_nFSM=0; } } } for(int i=0;i<sizeof(gPlasmaObjects)/sizeof(_S_BULLET_OBJECT);i++) { gPlasmaObjects[i].pfApply(&gPlasmaObjects[i],delta_tick); } Potal_Bullet_Apply(&gPotalBulletObject,delta_tick); //충돌여부확인-거리계산 { double potal_bullet_posx=gPlayerPotal.m_nXpos; double potal_bullet_posy=gPlayerPotal.m_nYpos; double target_x=gPlayerObject[0].m_fXpos; double target_y=gPlayerObject[0].m_fYpos; double angle=0; angle+=(delta_tick*45); double rad=(angle/180.0)*PI; double vx=(target_x-potal_bullet_posx)*cos(rad)-(target_y-potal_bullet_posy)*sin(rad); double vy=(target_x-potal_bullet_posx)*sin(rad)+(target_y-potal_bullet_posy)*cos(rad); double dist=sqrt(vx*vx+vy*vy); if(dist<0.1){ gPotalBulletObject.m_nFSM=0; } } acc_bullet_delay_tick+=delta_tick; if(acc_bullet_delay_tick>2.0){ //2초동안 방향설정 acc_bullet_delay_tick=0; double bullet_posx=gPotalBulletObject.m_fXpos; double bullet_posy=gPotalBulletObject.m_fYpos; double target_posx=gPlayerObject[0].m_fXpos; double target_posy=gPlayerObject[0].m_fYpos; double vx=target_posx-bullet_posx; double vy=target_posy-bullet_posy; double dist=sqrt(vx*vx+vy*vy); vx/=dist; vy/=dist; gPotalBulletObject.m_fvx=vx; gPotalBulletObject.m_fvy=vy; } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); for(int i=0;i<2;i++){ gPlayerObject[i].pfDraw(&gPlayerObject[i],&gScreenBuf[1]); } Potal_Draw(&gPlayerPotal,&gScreenBuf[1]); Potal_Bullet_Draw(&gPotalBulletObject,&gScreenBuf[1]); for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_PLANE_BULLET_OBJECT);i++){ _S_PLANE_BULLET_OBJECT *pObj = &gPlaneBulletObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } for(int i=0;i<6;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } for(int i=0;i<sizeof(gPlasmaObjects)/sizeof(_S_BULLET_OBJECT);i++){ gPlasmaObjects[i].pfDraw(&gPlasmaObjects[i],&gScreenBuf[1]); } puts("------------------------------------------------------------\r"); map_dump(&gScreenBuf[1],Default_Tilepalete); puts("------------------------------------------------------------\r"); puts("move : w, a, s, d \r"); puts("player0 fire : j player1 fire : k"); 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,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() { int bLoop = 1; MapObject.m_header.m_nSkima = 1; MapObject.m_pBuf = NULL; char TilePalette[] = {'.','#','@','%'}; while(bLoop) { char szCmd[32]; gets(szCmd); char *pTemp = strtok(szCmd," "); if(!strcmp(pTemp,"exit")) { bLoop = 0; if( MapObject.m_pBuf ) { free(MapObject.m_pBuf); } } else if(!strcmp(pTemp,"dump")) { map_dump(&MapObject,TilePalette); } else if(!strcmp(pTemp,"new")) { int nWidth = atoi(strtok(NULL," ")); int nHeight = atoi(strtok(NULL," ")); map_new(&MapObject,nWidth,nHeight); } else if(!strcmp(pTemp,"put")) { //put 1 2 2 (x y tile_index) int x,y,tile_index; x = atoi(strtok(NULL," ")); y = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); //MapObject.m_pBuf[y*MapObject.m_header.m_nWidth + x] = tile_index ; map_PutTile(&MapObject,x,y,tile_index); } else if(!strcmp(pTemp,"hline")) { int xpos,tile_index; xpos = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); for(int iy =0;iy <MapObject.m_header.m_nHeight;iy++) { MapObject.m_pBuf[iy*MapObject.m_header.m_nWidth +xpos] = tile_index; } } else if(!strcmp(pTemp,"vline")) { int ypos,tile_index; ypos = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); for(int ix = 0;ix < MapObject.m_header.m_nWidth;ix++) { MapObject.m_pBuf[ix + ypos*MapObject.m_header.m_nWidth] = tile_index; } } else if( !strcmp(pTemp,"save")) { //save filename char *pTemp = strtok(NULL," "); map_save(&MapObject,pTemp); puts("save ok"); } else if( !strcmp(pTemp,"load")) { //load filename char *pTemp = strtok(NULL," "); map_load(&MapObject,pTemp); puts("load ok"); } else if(!strcmp(pTemp,"tridraw_1")) { //tridraw_1 1 int tile_index = atoi(strtok(NULL," ")); for(int y = 0;y < MapObject.m_header.m_nHeight;y++) { for(int x = 0;x < y+1 ;x++) { MapObject.m_pBuf[y*MapObject.m_header.m_nWidth + x] = tile_index; } } } else if(!strcmp(pTemp,"draw_cross")) { //draw_cross 1 2 1 int x,y,tile_index; x = atoi(strtok(NULL," ")); y = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); for(int iy =-1;iy <2;iy++) { for(int ix=-1;ix < 2;ix++) { MapObject.m_pBuf[(iy+y)*MapObject.m_header.m_nHeight + x] = tile_index; MapObject.m_pBuf[y*MapObject.m_header.m_nWidth +(ix+x)] = tile_index; } } } } 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; for (int i=0; i<2; i++) { map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,15); } system("clear"); double target_x, target_y; double center_x, center_y; center_x = 14; center_y = 7; target_x = 14; target_y = 3; double angle = 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(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } } angle += (delta_tick * 45); // angle 45'+ double tx, ty; double rad = angle/180.0 * 3.141592; tx = (target_x - center_x) * cos(rad) - (target_y - center_y) * sin(rad); ty = (target_x - center_x) * sin(rad) - (target_y - center_y) * cos(rad); tx += center_x; ty += center_y; // time calculate acc_tick += delta_tick; if(acc_tick > 1.0) { //puts("tick...\r"); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); map_PutTile(&gScreenBuffer[1],tx,ty,2); map_PutTile(&gScreenBuffer[1],center_x,center_y,5); map_PutTile(&gScreenBuffer[1],target_x,target_y,1); gotoxy(0,0); map_dump(&gScreenBuffer[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { system("clear"); for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,30); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane5.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"target5.dat"); Plane_init(&gPlayerObject,&gPlayerModel,17,24); bullet_init(&gTestBullet,0,0,0,&gBulletModel); set_conio_terminal_mode(); acc_tick=last_tick=0; gPlayerObject.m_nFSM = 1; 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("Good bye~ \r"); } else if (ch == 'j') { double vx,vy; gTestBullet.m_fXpos = 0; gTestBullet.m_fYpos = 0; getDirection(&gTestBullet,&gPlayerObject,&vx,&vy); gTestBullet.pfFire(&gTestBullet, gTestBullet.m_fXpos, gTestBullet.m_fYpos, 10,vx,vy,10); } gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); } gTestBullet.pfApply(&gTestBullet,delta_tick); if(gTestBullet.m_nFSM != 0) { double dist = getDistance(&gTestBullet,&gPlayerObject); if(dist < 2.0) { gTestBullet.m_nFSM = 0; gPlayerObject.m_nFSM = 0; } } //타이밍계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); gTestBullet.pfDraw(&gTestBullet,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { system("clear"); for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,16); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane1.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"plasma.dat"); Plane_init(&gPlayerObject,&gPlayerModel,17,10); bullet_init(&gTestBullet,0,0,0,&gBulletModel); set_conio_terminal_mode(); acc_tick = last_tick = 0; //플레이상태로 만들기 gPlayerObject.m_nFSM = 1; 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 bullet_pos_x = 0; double bullet_pos_y = 0; double target_pos_x = gPlayerObject.m_fXpos; double target_pos_y = gPlayerObject.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; gTestBullet.pfFire(&gTestBullet,bullet_pos_x,bullet_pos_y,10.0,vx,vy,10); } gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); } gTestBullet.pfApply(&gTestBullet,delta_tick); if(gTestBullet.m_nFSM != 0) { double bullet_pos_x = gTestBullet.m_fXpos; double bullet_pos_y = gTestBullet.m_fYpos; double target_pos_x = gPlayerObject.m_fXpos; double target_pos_y = gPlayerObject.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 < 0.25) { gTestBullet.m_nFSM = 0; gPlayerObject.m_nFSM = 0; } } //타이밍계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); gTestBullet.pfDraw(&gTestBullet,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main(int argc, char *argv[]) { if (argc < 2) { gnPlayerIndex = 0; } else { gnPlayerIndex = atoi(argv[1]); } printf("ready player %d \r\n",gnPlayerIndex); // socket connecting try struct sockaddr_in server; socket_desc = socket(AF_INET,SOCK_STREAM,0); if(socket_desc == -1) { puts("err create socket"); } server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons(8080); if(connect(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) { puts("connect error"); return 1; } puts("connect ok!"); // thread operate { int err = pthread_create(&tid,NULL,&InputThread,NULL); if(err != 0) { printf("err : %s \r\n",strerror(err)); } else { printf("thread create success \r\n"); } } { int err = pthread_create(&tid,NULL,&ListenThread,NULL); if(err != 0) { printf("err : %s \r\n",strerror(err)); } else { printf("thread create success \r\n"); } } puts("sytemp ready!"); sleep(3); // game resource loading for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,16); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane1.dat"); Plane_init(&gPlayerObject[0],&gPlayerModel,0,0); gPlayerObject[0].m_nFSM = 1; Plane_init(&gPlayerObject[1],&gPlayerModel,0,0); gPlayerObject[1].m_nFSM = 1; puts("object setup complete!"); sleep(1); system("clear"); set_conio_terminal_mode(); acc_tick=last_tick=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; acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject[0].pfDraw(&gPlayerObject[0],&gScreenBuf[1]); gPlayerObject[1].pfDraw(&gPlayerObject[1],&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { set_conio_terminal_mode(); acc_tick=last_tick=0; system("clear"); for(int i =0;i<2;i++) //총알 { map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,16); } map_init(&gPlayer); map_load(&gPlayer,"plane1.dat"); Plane_init(&gPlayerObject,&gPlayer,17,10); double target_x,target_y; double center_x,center_y; center_x = 14; center_y = 7; target_x = 14; target_y = 3; double angle = 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; //실시간 입력 if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } //Plane_Apply(&gPlayerObject,delta_tick,ch); gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch); } //apply 위치 angle += (delta_tick * 45); double tx,ty; double rad = angle/180.0 * 3.141592; tx = (target_x - center_x) *cos(rad) - (target_y - center_y) * sin(rad); ty = (target_x - center_x) *sin(rad) - (target_y - center_y) * cos(rad); tx += center_x; ty += center_y; //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); gotoxy(0,0); //map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]); map_PutTile(&gScreenBuffer[1],tx,ty,2); map_PutTile(&gScreenBuffer[1],center_x,center_y,5); map_PutTile(&gScreenBuffer[1],target_x,target_y,1) ; gPlayerObject.fpDraw(&gPlayerObject,&gScreenBuffer[1]); //gotoxy(0,0); //Plane_Draw(&gPlayerObject,&gScreenBuf[1]); //map_dump(&gScreenBuf[1],Default_Tilepalete); map_dump(&gScreenBuffer[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
int main() { { int err = pthread_create(&tid,NULL,&InputThread,NULL); if(err != 0) { printf("err : %s \r\n",strerror(err)); } else { printf("thread create success \r\n"); } } struct sockaddr_in server; socket_desc = socket(AF_INET,SOCK_STREAM,0); if(socket_desc == -1) { puts("err create socket"); } server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons(8080); if(connect(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) { puts("connect error"); return 1; } for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,16); } map_init(&gPlayerModel); map_load(&gPlayerModel,"plane.dat"); Plane_init(&gPlayerObject,&gPlayerModel,15,10); gPlayerObject.m_nFSM = 1; system("clear"); set_conio_terminal_mode(); acc_tick=last_tick=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; //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
/*=======================================================*/ 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() { int bLoop = 1; MapObject.m_header.m_nSkima = 1; MapObject.m_pBuf = NULL; char TilePalette[] = {'.','#','@','%'}; while(bLoop) { char szCmd[32]; gets(szCmd); char *pTemp = strtok(szCmd," "); if(!strcmp(pTemp,"exit")) { bLoop = 0; if ( MapObject.m_pBuf ) { free(MapObject.m_pBuf); } } else if(!strcmp(pTemp,"dump")) { map_dump( &MapObject,TilePalette); } else if(!strcmp(pTemp,"new")) { // new 8 4 int nWidth = atoi(strtok(NULL," ")); int nHeight = atoi(strtok(NULL," ")); map_new( &MapObject,nWidth,nHeight); } else if(!strcmp(pTemp,"put")) { //put 1 2 1 (x y tile_index) int x,y,tile_index; x = atoi(strtok(NULL," ")); y = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); //MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + x ] = tile_index; map_PutTile(&MapObject,x,y,tile_index); } else if(!strcmp(pTemp,"hline")) { //hline 1 1 (x tile_index) int xpos, tile_index; xpos = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); for(int iy=0;iy<MapObject.m_header.m_nHeight;iy++){ MapObject.m_pBuf[ iy*MapObject.m_header.m_nWidth + xpos ] = tile_index; } } else if(!strcmp(pTemp,"vline")) { int ypos, tile_index; ypos = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); for(int ix=0;ix<MapObject.m_header.m_nWidth;ix++) { MapObject.m_pBuf[ ix + ypos*MapObject.m_header.m_nWidth ] = tile_index; } } else if(!strcmp(pTemp,"save")) { //save filename char *pTemp = strtok(NULL," "); map_save(&MapObject,pTemp); puts("Save OK"); } else if(!strcmp(pTemp,"load")) { //load filename char *pTemp = strtok(NULL," "); map_load(&MapObject,pTemp); puts("Load OK"); } else if(!strcmp(pTemp,"tridraw_1")) { // tridraw_1 1(tile index) int nTileIndex = atoi(strtok(NULL," ")); int nHeight = MapObject.m_header.m_nHeight; int nWidth = MapObject.m_header.m_nWidth; for(int iy=0;iy<nHeight;iy++) { for(int ix=0;(ix<iy) && (ix<nWidth);ix++) { MapObject.m_pBuf[ iy*nWidth +ix ]=nTileIndex; } } } else if(!strcmp(pTemp,"draw_cross")) { //draw_cross 1 2 1 int x,y,tile_index; x = atoi(strtok(NULL," ")); y = atoi(strtok(NULL," ")); tile_index = atoi(strtok(NULL," ")); MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + x ] = tile_index; MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + (x+1) ] = tile_index; MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + (x-1) ] = tile_index; MapObject.m_pBuf[ (y-1)*MapObject.m_header.m_nWidth + x ] = tile_index; MapObject.m_pBuf[ (y+1)*MapObject.m_header.m_nWidth + x ] = tile_index; } } return 0; }
int main() { for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,35); } map_init(&gPlayerModel); map_load(&gPlayerModel,"airplane.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"bullet1.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"tank1.dat"); Plane_init(&gPlayerObject,&gPlayerModel,17,10); //bullet_init(&gBulletModel,0,0,0,&gBulletModel); gPlayerObject.m_nFSM = 1; double TablePosition[] = {0,8,16,24}; /* for(int i=0;i<2;i++) { _S_BULLET_OBJECT *pObj = &gBulletObject[i]; bullet_init(pObj,&gBulletObject[i]; pObj->m_nFSM = 1; } */ for(int i=0;i<4;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; alien_init(pObj,&gAlienModel); pObj->m_fXpos = TablePosition[i]; pObj->m_fYpos = 2; pObj->m_nFSM = 1; } /* set_conio_terminal_mode(); acc_tick=last_tick=0; int targetx,targety; int fire_x, fire_y; */ system("clear"); set_conio_terminal_mode(); acc_tick=last_tick=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; //실시간 입력 /* fire_x = gAlienObjects.m_nXpos; fire_y = gAlienObjects.m_nYpos; targetx = gPlayerObject.m_nXpos; targety = gPlayerObject.m_nypos; */ if(kbhit() != 0) { char ch = getch(); if(ch == 'q') { bLoop = 0; puts("bye~ \r"); } /* else if(ch == 'j') { double vx,vy,c; vx = targetx - fire_x; vy = targety - fire_y; c = sqrt(vx*vx+vy*vy); vx /= c; vy /= c; bullet_fire(&gBulletObject,fire_x,fire_y,10.0,vx,vy,10.0); }*/ gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch); // bullet_apply(&gBulletObject,delta_tick); } for(int i=0;i<4;i++ ) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfApply(pObj,delta_tick); } //타이밍 계산 acc_tick += delta_tick; if(acc_tick > 0.1) { gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); // bullet_draw(&gBulletObjects, &gScreenBuf[1]); gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); for(int i=0;i<4;i++ ) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; pObj->pfDraw(pObj,&gScreenBuf[1]); } map_dump(&gScreenBuf[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,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; }