コード例 #1
0
ファイル: lander.c プロジェクト: Eclipse001/LunarLander
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);
}
コード例 #2
0
ファイル: viewer_main.c プロジェクト: aquirel/morrigan
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;
}