int main(int argc,char *argv[]){ I=0; int argv_index=1; for(argv_index=1;argv_index<argc;argv_index++){ if(argv[argv_index][0]=='-'){ if(strlen(argv[argv_index])==2){ if((argv[argv_index][1])=='g'){ gravity=atof(argv[argv_index+1]); } else if((argv[argv_index][1])=='t'){ thrust=atof(argv[argv_index+1]); } else if((argv[argv_index][1])=='f'){ landscape=fopen(argv[argv_index+1],"r"); } else if((argv[argv_index][1])=='i'){ I=1; } } else if(strlen(argv[argv_index])>2){ if((argv[argv_index][1])=='g'){ gravity=atof(argv[argv_index]+2); } else if((argv[argv_index][1])=='t'){ thrust=atof(argv[argv_index]+2); } else if((argv[argv_index][1])=='f'){ landscape=fopen(argv[argv_index]+2,"r"); } } } } fuel=10; ship_degree=90; // curses set up------------------------------------------ setup_curses(); open_pipe(exec_name); move(5, 10); printw("Press any key to start.\n"); printw(" (Then press arrow keys to rotate, space for thust, 'q' to quit)"); refresh(); int cmd = getch(); nodelay(stdscr, true); erase(); move(5, 0); printw("left arrow key rotate counter-clockwise, right clockwise, space for thust, q to quit."); //set initial location of the ship----------------- //left_up point ship[0].x=315; ship[0].y=20; //right_up point ship[1].x=325; ship[1].y=20; //left_down point ship[2].x=305; ship[2].y=50; //right_down point ship[3].x=335; ship[3].y=50; //thrust point ship[4].x=320; ship[4].y=60; // set all switches----------------------------- over=0; thrust_sw=0; //set_velocity-------------------------------------- xV=0;yV=0; //draw the landscape draw_landscape(landscape); if(I==1){ draw_fuel_rec(); } //set_timer------------------------------------- sigemptyset(&block_mask_g); sigaddset(&block_mask_g, SIGALRM); struct sigaction handler; handler.sa_handler = handle_timeout; sigemptyset(&handler.sa_mask); handler.sa_flags = 0; if (sigaction(SIGALRM, &handler, NULL) == -1){ exit(EXIT_FAILURE); } struct itimerval timer; struct timeval time_delay; time_delay.tv_sec = 0; time_delay.tv_usec = 50000; timer.it_interval = time_delay; struct timeval start; start.tv_sec = 0; start.tv_usec = 50000; timer.it_value = start; if (setitimer(ITIMER_REAL, &timer, NULL) == -1){ exit(EXIT_FAILURE); } while(1){ cmd = getch(); if (cmd != ERR){ if (cmd == KEY_LEFT){ if(over==0){ blocking_signal_for_rotate(1); //rotate left } } else if(cmd == KEY_RIGHT){ if(over==0){ blocking_signal_for_rotate(0); //rotate right } } else if(cmd == ' '){ if(I==0){ thrust_sw=1; } else if(I==1){ if(fuel<=0){ move(8,10); refresh(); printw("Empty fuel tank ! ! ! !"); } else if(fuel>0){ thrust_sw=1; } } } else if(cmd == 'q'){ // block the signal sigset_t old_mask; if (sigprocmask(SIG_BLOCK, &block_mask_g, &old_mask) < 0){ exit(EXIT_FAILURE); } break; } } } if(executable!=NULL&&over==0){ fprintf(executable,"end\n"); } unset_curses(); //----------------------------------------------------------- fclose(landscape); close_pipe(); exit(EXIT_SUCCESS); }
int main(int argc, char *argv[]) { if (2 > argc) { fprintf(stderr, "Usage: %s <server-address> [<port>]\n", argv[0]); return -1; } unsigned short port = 0; if (2 < argc) { port = (unsigned short) atoi(argv[2]); if (!port) { port = PORT; } } check_mem(shoots = DYNAMIC_ARRAY_CREATE(NotViewerShellEvent *, 16)); check_mem(explosions = DYNAMIC_ARRAY_CREATE(NotViewerShellEvent *, 16)); check(client_net_start(), "Failed to initialize net.", ""); check(client_connect(&viewer_protocol, argv[1], port, false), "Failed to connect.", ""); puts("Connected to server."); l = client_get_landscape(&viewer_protocol); check(l, "Failed to get landscape.", ""); puts("Loaded landscape."); camera.x = camera.y = l->landscape_size / 2.0 * l->tile_size; check(__init_video(&camera), "Failed to init video.", ""); check(0 != (display_lists = glGenLists(DISPLAY_LISTS_COUNT)), "Failed to create display list.", ""); glNewList(display_lists + LANDSCAPE_DISPLAY_LIST, GL_COMPILE); check(GL_NO_ERROR == glGetError(), "Failed to create display list.", ""); draw_landscape(l); glEndList(); glNewList(display_lists + TANK_BODY_DISPLAY_LIST, GL_COMPILE); check(GL_NO_ERROR == glGetError(), "Failed to create display list.", ""); draw_tank_body(); glEndList(); glNewList(display_lists + TANK_TURRET_DISPLAY_LIST, GL_COMPILE); check(GL_NO_ERROR == glGetError(), "Failed to create display list.", ""); draw_tank_turret(); glEndList(); glNewList(display_lists + TANK_GUN_DISPLAY_LIST, GL_COMPILE); check(GL_NO_ERROR == glGetError(), "Failed to create display list.", ""); draw_tank_gun(); glEndList(); while (working) { bool need_redraw = false; if (!process_events(&need_redraw, &camera, tanks, &tanks_count, &viewer_protocol)) { break; } if (need_redraw) { draw(l, tanks, tanks_count, &camera, &display_lists, shoots, explosions); } } __cleanup(); return 0; error: __cleanup(); return -1; }