/** * @brief Performs an appropriate action when a jump point is clicked. * * @param jp Index of the jump point. * @param autonav Whether to autonav to the target. * @return Whether the click was used. */ int input_clickedJump( int jump, int autonav ) { JumpPoint *jp; jp = &cur_system->jumps[ jump ]; if (!jp_isUsable(jp)) return 0; /* Update map path. */ if (player.p->nav_hyperspace != jump) map_select( jp->target, 0 ); if (autonav) { player_targetHyperspaceSet( jump ); player_autonavStart(); return 1; } if (jump == player.p->nav_hyperspace && input_isDoubleClick( (void*)jp )) { if (space_canHyperspace(player.p)) player_jump(); } else player_targetHyperspaceSet( jump ); input_clicked( (void*)jp ); return 1; }
int key_hook(int keycode, t_mlx *mlx) { if (keycode == 53) { if (mlx->init == 1) free(mlx->map); mlx_destroy_image(mlx->mlx, mlx->img); mlx_destroy_window(mlx->mlx, mlx->win); free(mlx); exit(0); } if (keycode >= 83 && keycode <= 86) { switch_map(mlx, keycode); if (mlx->init == 0 || (mlx->init == -1 && keycode == 83)) { mlx->map = map_select(mlx); draw_map(mlx); } } if (mlx->init == 1) move(mlx, keycode); if (keycode == 17) respawn(mlx); return (0); }
/** * @brief Map custom widget mouse handling. * * @param wid Window sending events. * @param event Event window is sending. * @param mx Mouse X position. * @param my Mouse Y position. * @param w Width of the widget. * @param h Height of the widget. */ static void map_mouse( unsigned int wid, SDL_Event* event, double mx, double my, double w, double h ) { (void) wid; int i; double x,y, t; StarSystem *sys; t = 15.*15.; /* threshold */ mx -= w/2 - map_xpos; my -= h/2 - map_ypos; switch (event->type) { case SDL_MOUSEBUTTONDOWN: /* zooming */ if (event->button.button == SDL_BUTTON_WHEELUP) map_buttonZoom( 0, "btnZoomIn" ); else if (event->button.button == SDL_BUTTON_WHEELDOWN) map_buttonZoom( 0, "btnZoomOut" ); /* selecting star system */ else { for (i=0; i<systems_nstack; i++) { sys = system_getIndex( i ); /* must be reachable */ if (!space_sysReachable(sys)) continue; /* get position */ x = sys->pos.x * map_zoom; y = sys->pos.y * map_zoom; if ((pow2(mx-x)+pow2(my-y)) < t) { map_select( sys ); break; } } map_drag = 1; } break; case SDL_MOUSEBUTTONUP: if (map_drag) map_drag = 0; break; case SDL_MOUSEMOTION: if (map_drag) { /* axis is inverted */ map_xpos -= event->motion.xrel; map_ypos += event->motion.yrel; } break; } }
int main() { map_type(); map_select(); return 0; }
void game_start() //게임 실행 { system("cls"); //게임 시작전 화면 초기화 char c; init(); print_map(map_select()); //현준이 메뉴이동을 리턴값으로 수정 요망 while(1) //개임 시작중 { if (kbhit()) { //키 받기 //gotoxy(get_x(p1.x),get_y(p1.y)); //printf("%s",get_shape(GROUND)); c=getch(); if(c==P1_UP) { if(map[p1.y-1][p1.x]==GROUND || map[p1.y-1][p1.x]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y-1][p1.x]; --p1.y; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_DOWN) { if(map[p1.y+1][p1.x]==GROUND || map[p1.y+1][p1.x]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y+1][p1.x]; ++p1.y; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_RIGHT) { if(map[p1.y][p1.x+1]==GROUND || map[p1.y][p1.x+1]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y][p1.x+1]; ++p1.x; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_LEFT) { if( map[p1.y][p1.x-1]==GROUND || map[p1.y][p1.x-1]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y][p1.x-1]; --p1.x; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P2_UP) { if(map[p2.y-1][p2.x]==GROUND || map[p2.y-1][p2.x]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y-1][p2.x]; --p2.y; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_DOWN) { if(map[p2.y+1][p2.x]==GROUND || map[p2.y+1][p2.x]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y+1][p2.x]; ++p2.y; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_RIGHT) { if(map[p2.y][p2.x+1]==GROUND || map[p2.y][p2.x+1]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y][p2.x+1]; ++p2.x; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_LEFT) { if( map[p2.y][p2.x-1]==GROUND || map[p2.y][p2.x-1]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y][p2.x-1]; --p2.x; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==BULLET_P1_UP) { bp1.count = 0; bp1.vector=BULLET_P1_UP; bp1.on=1; bp1.x = p1.x; bp1.y = p1.y-1; } else if(c==BULLET_P1_DOWN) { bp1.count = 0; bp1.vector=BULLET_P1_DOWN; bp1.on=1; bp1.x = p1.x; bp1.y = p1.y+1; } else if(c==BULLET_P1_LEFT) { bp1.count = 0; bp1.vector=BULLET_P1_LEFT; bp1.on=1; bp1.x = p1.x-1; bp1.y = p1.y; } else if(c==BULLET_P1_RIGHT) { bp1.count = 0; bp1.vector=BULLET_P1_RIGHT; bp1.on=1; bp1.x = p1.x+1; bp1.y = p1.y; } else if(c==BULLET_P2_UP) { bp2.count = 0; bp2.vector=BULLET_P2_UP; bp2.on=1; bp2.x = p2.x; bp2.y = p2.y-1; } else if(c==BULLET_P2_DOWN) { bp2.count = 0; bp2.vector=BULLET_P2_DOWN; bp2.on=1; bp2.x = p2.x; bp2.y = p2.y+1; } else if(c==BULLET_P2_LEFT) { bp2.count = 0; bp2.vector=BULLET_P2_LEFT; bp2.on=1; bp2.x = p2.x-1; bp2.y = p2.y; } else if(c==BULLET_P2_RIGHT) { bp2.count = 0; bp2.vector=BULLET_P2_RIGHT; bp2.on=1; bp2.x = p2.x+1; bp2.y = p2.y; } } if(bp1.on == 1 ) { bp1.count++; if(bp1.count==2000) { bp1.count = 0; if(bp1.vector==BULLET_P1_UP) { if(map[bp1.y][bp1.x]==BUILDING1) continue; else if(map[bp1.y-1][bp1.x]==GROUND || map[bp1.y-1][bp1.x]==GRASS) { bp1.origin=map[bp1.y-1][bp1.x]; --bp1.y; map[bp1.y][bp1.x]=BULLET; map[bp1.y+1][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); gaming_print_map(bp1.y+1,bp1.x); //map[p1.y][p1.x]=p1.origin; //gaming_print_map(p1.y,p1.x); //p1.origin=map[p1.y-1][p1.x]; //--p1.y; //map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); if(map[bp1.y-1][bp1.x]==PLAYER_P2) break; if(map[bp2.y-1][bp2.x]==PLAYER_P1) break; if(map[bp1.y-1][bp1.x]==BUILDING1) { bp1.on=0; map[bp1.y][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); } } } else if(bp1.vector==BULLET_P1_DOWN) { if(map[bp1.y][bp1.x]==BUILDING1) continue; else if(map[bp1.y+1][bp1.x]==GROUND || map[bp1.y+1][bp1.x]==GRASS) { bp1.origin=map[bp1.y+1][bp1.x]; ++bp1.y; map[bp1.y][bp1.x]=BULLET; map[bp1.y-1][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); gaming_print_map(bp1.y-1,bp1.x); if(map[bp1.y+1][bp1.x]==PLAYER_P2) break; if(map[bp2.y+1][bp2.x]==PLAYER_P1) break; if(map[bp1.y+1][bp1.x]==BUILDING1) { bp1.on=0; map[bp1.y][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); } } } else if(bp1.vector==BULLET_P1_LEFT) { if(map[bp1.y][bp1.x]==BUILDING1) continue; if(map[bp1.y][bp1.x-1]==GROUND || map[bp1.y][bp1.x-1]==GRASS) { bp1.origin=map[bp1.y][bp1.x-1]; --bp1.x; map[bp1.y][bp1.x]=BULLET; map[bp1.y][bp1.x+1]=bp1.origin; gaming_print_map(bp1.y,bp1.x); gaming_print_map(bp1.y,bp1.x+1); if(map[bp1.y][bp1.x-1]==PLAYER_P2) break; if(map[bp2.y][bp2.x-1]==PLAYER_P1) break; if(map[bp1.y][bp1.x-1]==BUILDING1) { bp1.on=0; map[bp1.y][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); } } } else if(bp1.vector==BULLET_P1_RIGHT) { if(map[bp1.y][bp1.x]==BUILDING1) continue; else if(map[bp1.y][bp1.x+1]==GROUND || map[bp1.y][bp1.x+1]==GRASS) { bp1.origin=map[bp1.y][bp1.x+1]; ++bp1.x; map[bp1.y][bp1.x]=BULLET; map[bp1.y][bp1.x-1]=bp1.origin; gaming_print_map(bp1.y,bp1.x-1); gaming_print_map(bp1.y,bp1.x); if(map[bp1.y][bp1.x+1]==PLAYER_P2) break; if(map[bp2.y][bp2.x+1]==PLAYER_P1) break; if(map[bp1.y][bp1.x+1]==BUILDING1) { bp1.on=0; map[bp1.y][bp1.x]=bp1.origin; gaming_print_map(bp1.y,bp1.x); } } } } } else if(bp2.on == 1) { bp2.count++; if(bp2.count==2000) { bp2.count = 0; if(bp2.vector==BULLET_P2_UP) { if(map[bp2.y][bp2.x]==BUILDING1) continue; else if(map[bp2.y-1][bp2.x]==GROUND || map[bp2.y-1][bp2.x]==GRASS) { bp2.origin=map[bp2.y-1][bp2.x]; --bp2.y; map[bp2.y][bp2.x]=BULLET; map[bp2.y+1][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); gaming_print_map(bp2.y+1,bp2.x); if(map[bp2.y-1][bp2.x]==PLAYER_P1) break; else if(map[bp1.y-1][bp1.x]==PLAYER_P2) break; else if(map[bp2.y-1][bp2.x]==BUILDING1) { bp2.on=0; map[bp2.y][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); } } } else if(bp2.vector==BULLET_P2_DOWN) { if(map[bp2.y][bp2.x]==BUILDING1) continue; else if(map[bp2.y+1][bp2.x]==GROUND || map[bp2.y+1][bp2.x]==GRASS) { bp2.origin=map[bp2.y+1][bp2.x]; ++bp2.y; map[bp2.y][bp2.x]=BULLET; map[bp2.y-1][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); gaming_print_map(bp2.y-1,bp2.x); if(map[bp2.y+1][bp2.x]==PLAYER_P1) break; else if(map[bp1.y+1][bp1.x]==PLAYER_P2) break; else if(map[bp2.y+1][bp2.x]==BUILDING1) { bp2.on=0; map[bp2.y][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); } } } else if(bp2.vector==BULLET_P2_LEFT) { if(map[bp2.y][bp2.x]==BUILDING1) continue; else if(map[bp1.y][bp2.x-1]==GROUND || map[bp2.y][bp2.x-1]==GRASS) { bp2.origin=map[p2.y][p2.x-1]; --bp2.x; map[bp2.y][bp2.x]=BULLET; map[bp2.y][bp2.x+1]=bp2.origin; gaming_print_map(bp2.y,bp2.x+1); gaming_print_map(bp2.y,bp2.x); if(map[bp2.y][bp2.x-1]==PLAYER_P1) break; else if(map[bp1.y][bp1.x-1]==PLAYER_P2) break; else if(map[bp2.y][bp2.x-1]==BUILDING1) { bp2.on=0; map[bp2.y][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); } } } else if(bp2.vector==BULLET_P2_RIGHT) { if(map[bp2.y][bp2.x]==BUILDING1) continue; else if(map[bp2.y][bp2.x+1]==GROUND || map[bp2.y][bp2.x+1]==GRASS) { bp2.origin=map[bp2.y][bp2.x+1]; ++bp2.x; map[bp2.y][bp2.x]=BULLET; map[bp2.y][bp2.x-1]=bp2.origin; gaming_print_map(bp2.y,bp2.x-1); gaming_print_map(bp2.y,bp2.x); if(map[bp2.y][bp2.x+1]==PLAYER_P1) break; else if(map[bp1.y][bp1.x+1]==PLAYER_P2) break; else if(map[bp2.y][bp2.x+1]==BUILDING1) { bp2.on=0; map[bp2.y][bp2.x]=bp2.origin; gaming_print_map(bp2.y,bp2.x); } } } } } } }
/** * @brief Map custom widget mouse handling. * * @param wid Window sending events. * @param event Event window is sending. * @param mx Mouse X position. * @param my Mouse Y position. * @param w Width of the widget. * @param h Height of the widget. */ static void map_mouse( unsigned int wid, SDL_Event* event, double mx, double my, double w, double h, void *data ) { (void) wid; (void) data; int i; double x,y, t; StarSystem *sys; t = 15.*15.; /* threshold */ switch (event->type) { case SDL_MOUSEBUTTONDOWN: /* Must be in bounds. */ if ((mx < 0.) || (mx > w) || (my < 0.) || (my > h)) return; /* Zooming */ if (event->button.button == SDL_BUTTON_WHEELUP) map_buttonZoom( 0, "btnZoomIn" ); else if (event->button.button == SDL_BUTTON_WHEELDOWN) map_buttonZoom( 0, "btnZoomOut" ); /* selecting star system */ else { mx -= w/2 - map_xpos; my -= h/2 - map_ypos; for (i=0; i<systems_nstack; i++) { sys = system_getIndex( i ); /* must be reachable */ if (!sys_isFlag(sys, SYSTEM_MARKED | SYSTEM_CMARKED) && !space_sysReachable(sys)) continue; /* get position */ x = sys->pos.x * map_zoom; y = sys->pos.y * map_zoom; if ((pow2(mx-x)+pow2(my-y)) < t) { map_select( sys, (SDL_GetModState() & KMOD_SHIFT) ); break; } } map_drag = 1; } break; case SDL_MOUSEBUTTONUP: if (map_drag) map_drag = 0; break; case SDL_MOUSEMOTION: if (map_drag) { /* axis is inverted */ map_xpos -= event->motion.xrel; map_ypos += event->motion.yrel; } break; } }
void game_start() { system("cls"); //게임 시작전 화면 초기화 char c; init(); print_map(map_select()); //현준이 메뉴이동을 리턴값으로 수정 요망 while(1) //개임 시작중 { //print_status(); //print_monster(); //시간조건필요 //print_player(); //print_potion(); //시간조건필요 if (kbhit()) { //키 받기 //gotoxy(get_x(p1.x),get_y(p1.y)); //printf("%s",get_shape(GROUND)); c=getch(); if(c==P1_UP) { if(map[p1.y-1][p1.x]==GROUND || map[p1.y-1][p1.x]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y-1][p1.x]; --p1.y; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_DOWN) { if(map[p1.y+1][p1.x]==GROUND || map[p1.y+1][p1.x]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y+1][p1.x]; ++p1.y; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_RIGHT) { if(map[p1.y][p1.x+1]==GROUND || map[p1.y][p1.x+1]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y][p1.x+1]; ++p1.x; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } else if(c==P1_LEFT) { if( map[p1.y][p1.x-1]==GROUND || map[p1.y][p1.x-1]==GRASS) { map[p1.y][p1.x]=p1.origin; gaming_print_map(p1.y,p1.x); p1.origin=map[p1.y][p1.x-1]; --p1.x; map[p1.y][p1.x]=PLAYER_P1; if(p1.origin!=GRASS) gaming_print_map(p1.y,p1.x); } } if(c==P2_UP) { if(map[p2.y-1][p2.x]==GROUND || map[p2.y-1][p2.x]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y-1][p2.x]; --p2.y; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_DOWN) { if(map[p2.y+1][p2.x]==GROUND || map[p2.y+1][p2.x]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y+1][p2.x]; ++p2.y; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_RIGHT) { if(map[p2.y][p2.x+1]==GROUND || map[p2.y][p2.x+1]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y][p2.x+1]; ++p2.x; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } else if(c==P2_LEFT) { if( map[p2.y][p2.x-1]==GROUND || map[p2.y][p2.x-1]==GRASS) { map[p2.y][p2.x]=p2.origin; gaming_print_map(p2.y,p2.x); p2.origin=map[p2.y][p2.x-1]; --p2.x; map[p2.y][p2.x]=PLAYER_P2; if(p2.origin!=GRASS) gaming_print_map(p2.y,p2.x); } } } if (kbhit()) { c=getch(); if(c==BULLET_P1_UP) { while(map[p1.y-1][p1.x]!=BUILDING1) { bp1.y=p1.y; bp1.x=p1.x; map[bp1.y][bp1.x]=BULLET; // gaming_print_map(p1.y,p1.x); bp1.origin=map[bp1.y-1][bp1.x]; --bp1.y; map[bp1.y][bp1.x]=BULLET; if(bp1.origin!=GRASS) gaming_print_map(bp1.y,bp1.x); } } else if(c==BULLET_P1_DOWN) { } else if(c==BULLET_P1_LEFT) { } else if(c==BULLET_P1_RIGHT) { } } } }