int main() { system("clear"); for(int i=0;i<2;i++){ map_init(&gScreenBuffer[i]); map_new(&gScreenBuffer[i],35,16); } map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); map_init(&gPlasmaModel); map_load(&gPlasmaModel,"plasma.dat"); map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); double TablePosition[] = {0,6.0}; for(int i=0;i<2;i++) { _S_ALIEN_OBJECT *pObj = &gAlienObjects[i]; alien_init(pObj,&gAlienModel); pObj->m_fXpos = 0;: pObj->m_fYpos = 2; pObj->m_nFSM = 1; }
int main() { _S_MAP_OBJECT screenBuf; map_init(&screenBuf); map_new(&screenBuf,16,16); map_PutTile(&screenBuf,6,5,4); map_PutTile(&screenBuf,5,5,4); map_PutTile(&screenBuf,4,5,4); map_PutTile(&screenBuf,6,6,4); map_PutTile(&screenBuf,5,6,4); map_PutTile(&screenBuf,4,6,4); map_PutTile(&screenBuf,6,7,4); map_PutTile(&screenBuf,5,7,4); map_PutTile(&screenBuf,4,7,4); _S_MAP_OBJECT humanObj; map_init(&humanObj); map_load(&humanObj,"human.dat"); puts("\r\n-------------------------"); map_drawTile_trn(&humanObj,5,5,&screenBuf); map_dump(&screenBuf,Default_Tilepalete); //map_dump(&carObj,Tilepalette); //map_dump(&screenBuffer,Tilepalette); return 0; }
Rock_Sprite *set_level_rocco(Rock_Scroll_Map *map) { map_load(map); sprites_set_objects(map); return sprite_get_object(map->rocco_index); }
//初期化 void init(void){ PG_Load();//自機のグラ読み込み map_load();//マップの読み込み //ミクの初期位置 miku.x = 320; miku.y = 240; miku.r_haba =32 ; miku.tate = 64; miku.haba = 48; miku.muki = 0;//初期の向き 下向き //スピード miku.spd = 4; miku.n_spd = 3; //アニメーション int aloop=10;//デフォルトアニメループカウンタ miku.anime_c = aloop; ////////////////////////// }
int cl_change_map(char *map_name, int gamemode) { client.screenpos.x = 0; client.screenpos.y = 0; client.health = 0; /* To make sure statusbar updates */ client.map_target_active = 0; draw_load_screen(client.loadscreen); /* Load the map */ if( !(map = map_load(client.map, L_BASE|L_OBJECT|L_TOPLEVEL|L_TEXT, MAP))){ printf("** ERROR LOADING MAP %s! **\n", client.map); cl_network_disconnect(); client.state = MENU; /* Go back to menu */ return 0; } /* Load tileset and store pixmap id's in tileset tables */ maptext_init(map->text_root); tileset_load(map->tileset); preload_entities(map_name, gamemode); client.state = GAME_JOIN; /* Status of JOINING on the server */ cl_netmsg_send_ready(); /* Request to be ACTIVE on the server */ cl_net_finish(); /* Clear the map buffer if map doesn't take up the entire buffer as there will still be stuff there from the last map */ if( map->width < client.view_w || map->height < client.view_h ) clear_area(win.map_buf, 0, 0, client.view_w, client.view_h, "black"); return 1; }
int main(int argc, char** argv) { map_config_t config; dataset_t* dataset; map_t* map; configure(&config, argc, argv); if(config.ot == OT_CREATE) { dataset = dataset_load(config.infile); if(dataset) { map = map_create(dataset, &config.level); if(config.print) map_print(map); map_save(config.outfile, map); map_destroy(map); } dataset_destroy(&dataset); } else if(config.ot == OT_READ) { map = map_load(config.infile); if(config.print) map_print(map); map_destroy(map); } 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(&gPlayer); map_load(&gPlayer,"plane1.dat"); Plane_init(&gPlayerObject,&gPlayer,17,10); 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"); } //gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch); gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch); } //타이밍계산 acc_tick += delta_tick; if(acc_tick > 0.1) { //puts("tick...\r"); gotoxy(0,0); map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]); gPlayerObject.fpDraw(&gPlayerObject,&gScreenBuf[1]); //Plane_Draw(&gPlayerObject,&gScreenBuf[1]); map_dump(&gScreenBuf[1],Default_Tilepalete); acc_tick = 0; } } return 0; }
void gameStart_Play() { for(int i=0;i<2;i++) { map_init(&gScreenBuf[i]); map_new(&gScreenBuf[i],35,22); } map_init(&gAlienModel); map_load(&gAlienModel,"alien.dat"); map_init(&gBulletModel); map_load(&gBulletModel,"bullet1.dat"); map_init(&gPlaneModel); map_load(&gPlaneModel,"plane1.dat"); map_init(&gLaserModel); map_load(&gLaserModel,"plasma.dat"); alien_init(&gTestAlienObject,&gAlienModel); bullet_init(&gTestBulletObject,0,0,0,&gBulletModel); Plane_init(&gPlaneObject,&gPlaneModel,0,0); laser_init(&gLaserObject,0,0,0,&gLaserModel); gTestAlienObject.m_pBullet = &gTestBulletObject; gPlaneObject.m_fXpos = 17; gPlaneObject.m_fYpos = 20; gPlaneObject.m_nFSM = 1; gTestAlienObject.m_fXpos = -10; gTestAlienObject.m_fYpos = 1; gTestAlienObject.m_nFSM = 1; system("clear"); }
int main() { char TilePalete[] = {'.','#'.'@'}; _S_MAP_OBJECT carObj; map_init(&carObj); map_load(&carObj,"car.dat"); puts("-----load complete----------------") //system("clear"); // map_dump(&carObj,TilePalete); return 0; }
int main() { char Tilepalette[] = {'.','#','@'}; _S_MAP_OBJECT screenBuffer; map_init(&screenBuffer); map_new(&screenBuffer,16,16); _S_MAP_OBJECT carObj;map_init(&carObj);map_load(&carObj,"car.dat"); puts("\r\n----------------"); { _S_MAP_OBJECT *pObj = &carObj; for(int iy=0;iy < pObj->m_header.m_nHeight;iy++) { for(int ix = 0; ix < pObj->m_header.m_nWidth;ix++) { map_PutTile(&screenBuffer,ix + 5,iy + 5, pObj->m_pBuf[iy*pObj->m_header.m_nWidth + ix]); } } for(int iy=0;iy < pObj->m_header.m_nHeight;iy++) { for(int ix = 0; ix < pObj->m_header.m_nWidth;ix++) { map_PutTile(&screenBuffer,iy+10,ix+10, pObj->m_pBuf[iy*pObj->m_header.m_nWidth + ix]); } } } //map_dump(&carObj,Tilepalette); map_dump(&screenBuffer,Tilepalette); return 0; }
void gamestate(GAMESTATE state) { DARNIT_KEYS k; switch(_gamestate) { case GAMESTATE_GAME: if(state!=GAMESTATE_PAUSE) map_cleanup(); case GAMESTATE_MENU: d_keymapping_set(game_keymap); break; default: break; } switch(state) { case GAMESTATE_MENU: if(platform.platform&DARNIT_PLATFORM_HANDHELD) d_keymapping_set(menu_keymap_handheld); else d_keymapping_set(menu_keymap_desktop); break; case GAMESTATE_GAME: memset(&k, 0xFF, sizeof(DARNIT_KEYS)); d_keys_set(k); if(_gamestate==GAMESTATE_PAUSE) break; _gamestate=state; map_load(0); score = 0; break; case GAMESTATE_HIGHSCORE: case GAMESTATE_INSTRUCTIONS: case GAMESTATE_GAMEOVER: case GAMESTATE_PAUSE: memset(&k, 0xFF, sizeof(DARNIT_KEYS)); d_keys_set(k); break; default: break; } _gamestate=state; }
int main(int argc, char* args[]) { if (init() == FALSE) { return 1; } if (load_files() == FALSE) { return 1; } message = TTF_RenderText_Solid(font, window_footer_str, font_color); if (message == NULL) { return 1; } Uint32 frameStart = 0; int rightMouseButtonDown = FALSE; int quit = FALSE; while (quit == FALSE) { frameStart = SDL_GetTicks(); while (SDL_PollEvent(&event)) { if (event.type == SDL_MOUSEBUTTONDOWN) { if (event.button.button == SDL_BUTTON_RIGHT) rightMouseButtonDown = TRUE; else if (event.button.button == SDL_BUTTON_LEFT) map_select_tile(event.button.x, event.button.y); } if (event.type == SDL_MOUSEBUTTONUP) { if (event.button.button == SDL_BUTTON_RIGHT) { rightMouseButtonDown = FALSE; map_move_reset(); } } if (event.type == SDL_MOUSEMOTION) { if (rightMouseButtonDown == TRUE) { map_move(event.button.x, event.button.y); } } if (event.type == SDL_KEYDOWN) { switch (event.key.keysym.sym) { case SDLK_g: map_toggle_grid(); break; case SDLK_PLUS: map_resize(1); break; case SDLK_MINUS: map_resize(-1); break; case SDLK_l: map_load(); break; default: ; } } if (event.type == SDL_QUIT) { quit = TRUE; } } SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0)); map_show(); apply_surface( screen_width - message->w, screen_height - message->h, message, screen ); if (SDL_Flip(screen) == -1) { return 1; } if ((SDL_GetTicks() - frameStart) < (1000 / FPS)) { SDL_Delay((1000 / FPS) - (SDL_GetTicks() - frameStart)); } } clean_up(); 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; 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() { 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; }
/* TODO: comment this more. Sorry --lk */ void map_editor_input(state_stack* stack, SDL_Event *sdlEvent) { state_desc *top = (state_desc*) table_ind(stack, stack->m_len-1); map_editor *mapEditor = (map_editor*) top->m_pData; if (sdlEvent->type == SDL_QUIT) { // TODO: Check for unsaved changes state_stack_kill(stack); } // Handle keys which do the same thing no matter what the current state is. if (_editor_handle_generic_event(mapEditor, sdlEvent)) { return; } // We may as well always check for this, because why not? if (sdlEvent->type == SDL_MOUSEMOTION) { mapEditor->m_iMouseX = sdlEvent->motion.x; mapEditor->m_iMouseY = sdlEvent->motion.y; } switch (mapEditor->m_iMapEditorState) { case MAPEDITOR_EDIT: if (sdlEvent->type == SDL_KEYDOWN) { // TODO: bounds checking. if (sdlEvent->key.keysym.sym == SDLK_LEFT) { mapEditor->m_iActiveTile--; } if (sdlEvent->key.keysym.sym == SDLK_RIGHT) { mapEditor->m_iActiveTile++; } } if (sdlEvent->type == SDL_MOUSEBUTTONDOWN) { // Drag map on right click & hold if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { mapEditor->m_bDragMap = true; } } if (sdlEvent->type == SDL_MOUSEBUTTONUP) { if (sdlEvent->button.button == 1) { // place tile rect tempSrc = _tile_rect(mapEditor->m_iActiveTile); rect tempDst = {((mapEditor->m_iMouseX + g_map.m_rectView.x) / 32) * 32, ((mapEditor->m_iMouseY + g_map.m_rectView.y) / 32) * 32, 32, 32}; g_map.m_map[(mapEditor->m_iMouseX + g_map.m_rectView.x) / 32][(mapEditor->m_iMouseY + g_map.m_rectView.y) / 32].m_iTileID = mapEditor->m_iActiveTile; image_draw_to(g_map.m_imageMap, g_map.m_imageTiles, &tempSrc, &tempDst); map_draw_view(); // Only redraw what's currently visible (unless the map maker is psychic the current view is what changed) if (mapEditor->m_bGrid == true) { map_draw_grid_view(); } } if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { // stop dragging map mapEditor->m_bDragMap = false; } } if (sdlEvent->type == SDL_MOUSEMOTION) { if (mapEditor->m_bDragMap == true) { map_move(sdlEvent->motion.xrel, sdlEvent->motion.yrel); } } break; /* Rename map. */ case MAPEDITOR_NAME: if (util_textInput(sdlEvent, &g_map.m_cName) == 1) { mapEditor->m_iMapEditorState = MAPEDITOR_EDIT; } break; /* Load map. */ case MAPEDITOR_LOAD: if (util_textInput(sdlEvent, &g_map.m_cName) == 1) { map_load(g_map.m_cName); map_draw(); mapEditor->m_iMapEditorState = MAPEDITOR_EDIT; } break; case MAPEDITOR_TILE: // Draw tilesheet // Input based on tile sheet, not map. // Choose tile on click // g_iMapEditorState = MAPEDITOR_EDIT break; /* collision editor. */ case MAPEDITOR_WALK: if (sdlEvent->type == SDL_KEYDOWN) { if (sdlEvent->key.keysym.sym == SDLK_LEFT) { if (mapEditor->m_cMapWalk > 0) { mapEditor->m_cMapWalk--; } } if (sdlEvent->key.keysym.sym == SDLK_RIGHT) { if (mapEditor->m_cMapWalk < WALK_MAX) { mapEditor->m_cMapWalk++; } } } if (sdlEvent->type == SDL_MOUSEBUTTONDOWN) { // Drag map on right click & hold if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { mapEditor->m_bDragMap = true; } } if (sdlEvent->type == SDL_MOUSEBUTTONUP) { if (sdlEvent->button.button == 1) { // place walk g_map.m_map[(mapEditor->m_iMouseX + g_map.m_rectView.x) / 32][(mapEditor->m_iMouseY + g_map.m_rectView.y) / 32].m_cWalk = mapEditor->m_cMapWalk; map_draw_view(); // Only redraw what's currently visible map_editor_draw_walk_view(); if (mapEditor->m_bGrid == true) { map_draw_grid_view(); } } if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { // stop dragging map mapEditor->m_bDragMap = false; } } if (sdlEvent->type == SDL_MOUSEMOTION) { if (mapEditor->m_bDragMap == true) { map_move(sdlEvent->motion.xrel, sdlEvent->motion.yrel); } } break; default: break; } return; }
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() { 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() { 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(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() { 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; 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(int argc, char **argv) { char val[4096]; char listener_name[80]; char backend_name[80]; const char *config_file = DEFAULT_CONFIG_FILE; config_object_t *config = NULL; map_object_t *map = NULL; const listener_plugin_t *lp; const backend_plugin_t *p; listener_context_t listener_ctx = NULL; backend_context_t backend_ctx = NULL; int debug_set = 0, foreground = 0, wait_for_init = 0; int opt, configure = 0; config = sc_init(); map = map_init(); if (!config || !map) { perror("malloc"); return -1; } while ((opt = getopt(argc, argv, "Ff:d:cwlh")) != EOF) { switch(opt) { case 'F': printf("Background mode disabled\n"); foreground = 1; break; case 'f': printf("Using %s\n", optarg); config_file = optarg; break; case 'd': debug_set = atoi(optarg); break; case 'c': configure = 1; break; case 'w': wait_for_init = 1; break; case 'l': plugin_dump(); return 0; case 'h': case '?': usage(); return 0; default: return -1; } } if (configure) { return do_configure(config, config_file); } if (sc_parse(config, config_file) != 0) { printf("Failed to parse %s\n", config_file); return -1; } if (debug_set) { snprintf(val, sizeof(val), "%d", debug_set); sc_set(config, "fence_virtd/@debug", val); } else { if (sc_get(config, "fence_virtd/@debug", val, sizeof(val))==0) debug_set = atoi(val); } dset(debug_set); if (!foreground) { if (sc_get(config, "fence_virtd/@foreground", val, sizeof(val)) == 0) foreground = atoi(val); } if (!wait_for_init) { if (sc_get(config, "fence_virtd/@wait_for_init", val, sizeof(val)) == 0) wait_for_init = atoi(val); if (!wait_for_init) { /* XXX compat */ if (sc_get(config, "fence_virtd/@wait_for_backend", val, sizeof(val)) == 0) wait_for_init = atoi(val); } } if (dget() > 3) sc_dump(config, stdout); if (sc_get(config, "fence_virtd/@backend", backend_name, sizeof(backend_name))) { printf("Failed to determine backend.\n"); printf("%s\n", val); return -1; } dbg_printf(1, "Backend plugin: %s\n", backend_name); if (sc_get(config, "fence_virtd/@listener", listener_name, sizeof(listener_name))) { printf("Failed to determine backend.\n"); printf("%s\n", val); return -1; } dbg_printf(1, "Listener plugin: %s\n", listener_name); #ifdef _MODULE if (sc_get(config, "fence_virtd/@module_path", val, sizeof(val))) { #ifdef MODULE_PATH snprintf(val, sizeof(val), MODULE_PATH); #else printf("Failed to determine module path.\n"); return -1; #endif } dbg_printf(1, "Searching %s for plugins...\n", val); opt = plugin_search(val); if (opt > 0) { dbg_printf(1, "%d plugins found\n", opt); } else { printf("No plugins found\n"); return 1; } #endif if (dget() > 3) plugin_dump(); lp = plugin_find_listener(listener_name); if (!lp) { printf("Could not find listener \"%s\"\n", listener_name); return 1; } p = plugin_find_backend(backend_name); if (!p) { printf("Could not find backend \"%s\"\n", backend_name); return 1; } daemon_init(basename(argv[0]), foreground); signal(SIGINT, exit_handler); signal(SIGTERM, exit_handler); signal(SIGQUIT, exit_handler); syslog(LOG_NOTICE, "fence_virtd starting. Listener: %s Backend: %s", backend_name, listener_name); while (p->init(&backend_ctx, config) < 0) { if (!wait_for_init) { if (foreground) { printf("Backend plugin %s failed to initialize\n", backend_name); } syslog(LOG_ERR, "Backend plugin %s failed to initialize\n", backend_name); return 1; } sleep(5); } if (map_load(map, config) < 0) { syslog(LOG_WARNING, "Failed to load static maps\n"); } /* only client we have now is mcast (fence_xvm behavior) */ while (lp->init(&listener_ctx, p->callbacks, config, map, backend_ctx) != 0) { if (!wait_for_init) { if (foreground) { printf("Listener plugin %s failed to initialize\n", listener_name); } syslog(LOG_ERR, "Listener plugin %s failed to initialize\n", listener_name); return 1; } sleep(5); } while (run && lp->dispatch(listener_ctx, NULL) >= 0); syslog(LOG_NOTICE, "fence_virtd shutting down"); map_release(map); sc_release(config); lp->cleanup(listener_ctx); p->cleanup(backend_ctx); daemon_cleanup(); 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() { 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; }
// loads or generate an map void map_new (char *filename) { int x, y; FILE *fmap; signed char old_maptype = map.type; int pl_cnt, pl; /* initialize the start_point array in the _map struct */ map_init_start_points(); if (filename) { fmap = fopen (filename, "r"); /* if we can't open the given filename for any reason, reverting to default value else, load the file map */ if (fmap) map_load (fmap); } else fmap = NULL; // Clean and create the field // if (fmap == NULL) map_genrandom (); /* Generate a More random map if requested */ if (map.map_selection == MAPS_morerand) map_genmorerandom(); if (map.type == -1) map.type = s_random (MAPT_max); if (map.type == MAPT_tunnel) { /* insert tunnels */ for (x = 0; x < GAME_MAX_TUNNELS; x++) map.tunnel[x].x = map.tunnel[x].y = -1; map.field[3][3].type = FT_tunnel; map.field[3][3].special = 0; map.field[map.size.x - 4][map.size.y - 4].type = FT_tunnel; map.field[map.size.x - 4][map.size.y - 4].special = 1; if (map.size.y > 12) { map.field[map.size.x - 4][3].type = FT_tunnel; map.field[map.size.x - 4][3].special = 2; map.field[3][map.size.y - 4].type = FT_tunnel; map.field[3][map.size.y - 4].special = 3; map.tunnel[0].x = map.size.x - 4; map.tunnel[0].y = 3; map.tunnel[1].x = 3; map.tunnel[1].y = map.size.y - 4; map.tunnel[2].x = map.size.x - 4; map.tunnel[2].y = map.size.y - 4; map.tunnel[3].x = 3; map.tunnel[3].y = 3; } else { map.tunnel[0].x = map.size.x - 4; map.tunnel[0].y = map.size.y - 4; map.tunnel[1].x = 3; map.tunnel[1].y = 3; } } /* delete the bfield data */ for (x = 0; x < MAX_FIELDSIZE_X; x++) for (y = 0; y < MAX_FIELDSIZE_Y; y++) map.bfield[x][y] = 0; /* count the number of players on this map so we know how many starting points * to find */ pl_cnt = 0; for (pl = 0; pl < MAX_PLAYERS; pl++) { if (PS_IS_used (players[pl].state)) { pl_cnt++; } } /* identify possible starting positions for players and store them in the * start_point array in the _map struct. This will always succeed. If * it cannot find starting points within the tolerance, it first attempts * to create start points within the tolerence and otherwise lowers the * tolerence until it can satisfy the proper number of start points. * eventually the tolerence reaches 0, so it can, in the worst case, start * all players at the same start point. */ map_find_and_add_start_points(pl_cnt - map_num_defined_start_points(), MAP_POSITION_TOLERENCE); /* Set the Playerinformation */ map_set_playerposition (fmap != NULL); /* put the fire powerups in the field */ map_fillitems (FT_fire, map.fire); /* put the bomb powerups in the field */ map_fillitems (FT_bomb, map.bombs); /* put the shoe powerup in the field */ map_fillitems (FT_shoe, map.shoes); /* put the death ?powerups? in the field */ map_fillitems (FT_death, map.death); /* put the mixed powerrup in the field */ map_fillitems (FT_mixed, map.mixed); /* put the trigger special in the field */ map_fillitems (FT_sp_trigger, map.sp_trigger); /* put the row special in the field */ map_fillitems (FT_sp_row, map.sp_row); /* put the push special in the field */ map_fillitems (FT_sp_push, map.sp_push); map_fillitems (FT_sp_liquid, map.sp_push); map_fillitems (FT_sp_moved, map.sp_push); /* put the push special in the field */ map_fillitems(FT_sp_kick,map.sp_kick); map.type = old_maptype; }
static void *ctor(renderer_t r, void *common) { struct _world *world = NULL; vec3_t spawn; world = calloc(1, sizeof(*world)); if ( NULL == world ) goto out; world->render = r; renderer_viewangles(r, 45.0, 45.0, 0.0); world->map = map_load(r, "data/maps/level1"); if ( NULL == world->map ) goto out_free; spawn[0] = 0.0; spawn[1] = CHOPPER_HEIGHT; spawn[2] = 0.0; world->apache = chopper_comanche(spawn, 0.785); if ( NULL == world->apache ) goto out_free_map; world->light = light_new(r, LIGHT_CAST_SHADOWS); if ( NULL == world->light ) { goto out_free_chopper; } world->font = font_load(r, "data/font/carbon.png", 16, 16); if ( NULL == world->font ) goto out_free_light; world->lightRate = 1440; world->light_ticks = 10; world->cvars = cvar_ns_new("world"); if ( NULL == world->cvars ) goto out_free_font; cvar_register_float(world->cvars, "time", CVAR_FLAG_SAVE_ALWAYS, &world->lightAngle); cvar_register_float(world->cvars, "lightRate", CVAR_FLAG_SAVE_NOTDEFAULT, &world->lightRate); cvar_register_uint(world->cvars, "tpf", CVAR_FLAG_SAVE_NOTDEFAULT, &world->light_ticks); cvar_ns_load(world->cvars); world->fcnt = (world->lightAngle / (M_PI / world->lightRate)); world->fcnt *= world->light_ticks; /* success */ goto out; out_free_font: font_free(world->font); out_free_light: light_free(world->light); out_free_chopper: chopper_free(world->apache); out_free_map: map_free(world->map); out_free: free(world); world = NULL; out: return world; }
int main(int argc, char** argv){ //flags for the window int flags = 0; //map default path char *map_load_path = "res/level.map"; char *map_save_path = "res/save.map"; //parse command line arguments int c; while ((c = getopt (argc, argv, "hfm:o:")) != -1){ switch (c) { case 'h': printf("Tilemap editor\n"); printf("h: print this menu and exit\n"); printf("f: launch in fullscreen\n"); printf("m <filename>: map name to load (default %s)\n", map_load_path); printf("o <filename>: file to save to (default %s)\n", map_save_path); return EXIT_SUCCESS; break; case 'f': flags = SDL_WINDOW_FULLSCREEN_DESKTOP; break; case 'm': map_load_path = optarg; break; case 'o': map_save_path = optarg; break; default: abort (); } } sdl_init(SDL_INIT_VIDEO); atexit(SDL_Quit); // create a new window SDL_Window* window = sdl_create_window("Tilemap Editor Isometric Depth", &WINDOW_WIDTH, &WINDOW_HEIGHT, flags); //create a renderer SDL_Renderer* renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT); //create a new game game o_game; //init game componants o_game.p_map = map_load(map_load_path, renderer); if(!o_game.p_map){ printf("Cannot load map named '%s'\n", map_load_path); return EXIT_FAILURE; } o_game.map_save_path = map_save_path; o_game.join_mode = false; o_game.tile_mode = TILE; o_game.tile_from_x = -1; o_game.tile_from_y = -1; o_game.tile_from_z = -1; o_game.tile_to_x = -1; o_game.tile_to_y = -1; o_game.tile_to_z = -1; //init fontmap fontmap o_fontmap; const char layout[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!-"; o_fontmap.size = 7; o_fontmap.layout = (char*)&layout; fontmap_init_from_img(&o_fontmap, "res/font.png", renderer); o_game.p_fontmap = &o_fontmap; o_game.p_map->p_fontmap = &o_fontmap; //game states game_status ret_code = IN_GAME; while(ret_code != QUIT){ switch(ret_code){ case IN_GAME: ret_code = state_in_game(renderer, &o_game); break; default: break; } } //free memory map_free(o_game.p_map); fontmap_free(&o_fontmap); SDL_Quit(); return EXIT_SUCCESS; }
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; }