⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 billard3d.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
                write_rc(f,opt,"v"); break;            }            break;        case OPT_RGSTEREO:    if(options_rgstereo_on) write_rc(f,opt,NULL); break;        case OPT_RGAIM:            if( options_rgaim==1 ) write_rc(f,opt,"l");            if( options_rgaim==2 ) write_rc(f,opt,"r");            if( options_rgaim==0 ) write_rc(f,opt,"m");            break;        case OPT_HOSTADDR:    write_rc(f,opt,options_net_hostname); break;        case OPT_PORTNUM:     sprintf(str,"%d",options_net_portnum); write_rc(f,opt,str); break;        case OPT_GEOMETRY:    sprintf(str,"%dx%d",win_width,win_height); write_rc(f,opt,str); break;        case OPT_FULLSCREEN:  if (sys_get_fullscreen()) write_rc(f,opt,NULL); break;        case OPT_FREEMOVE:    write_rc(f,opt, options_free_view_on?"on":"off"); break;        case OPT_CUBEREF:     write_rc(f,opt, options_cuberef?"on":"off"); break;        case OPT_CUBERES:     sprintf(str,"%d", options_cuberef_res); write_rc(f,opt,str); break;        case OPT_BUMPREF:     write_rc(f,opt, options_bumpref?"on":"off"); break;        case OPT_BUMPWOOD:    write_rc(f,opt, options_bumpwood?"on":"off"); break;        case OPT_BALLTRACE:   write_rc(f,opt, options_balltrace?"on":"off"); break;        case OPT_GAMEMODE:    switch(options_gamemode){                                 case options_gamemode_match:                                         write_rc(f,opt,"match"); break;                                 case options_gamemode_training:                                         write_rc(f,opt,"training"); break;                                 case options_gamemode_tournament:                                         write_rc(f,opt,"tournament"); break;                              }                              break;        case OPT_BALL_FRESNEL:write_rc(f,opt, options_ball_fresnel_refl?"on":"off"); break;        case OPT_AVATAR:      write_rc(f,opt, options_avatar_on?"on":"off"); break;        case OPT_TOURFAST:    sprintf(str,"%f",options_tourfast); write_rc(f,opt,str); break;        case OPT_CLOTHTEX:    write_rc(f,opt, options_cloth_tex?"on":"off"); break;/*      case OPT_HELP:        exit(1);   break;      case OPT_DUMMY:       break;*/       }    }    fclose(f);}#endif  // not WIN32/*int my_time(void){struct timeb ts;      ftime(&ts);      return(ts.time*1000+ts.millitm);}*/void set_gametype( int gtype ){    gametype=gtype;    if       ( gametype==GAME_8BALL ){        setfunc_evaluate_last_move( evaluate_last_move_8ball );        setfunc_create_scene( create_8ball_scene );        setfunc_create_walls( create_6hole_walls );        setfunc_ai_get_stroke_dir( ai_get_stroke_dir_8ball );        player[0].cue_ball=0;   player[1].cue_ball=0;        player[act_player].place_cue_ball=1;        human_player_roster.player[0].cue_ball=0;   human_player_roster.player[1].cue_ball=0;        human_player_roster.player[act_player].place_cue_ball=1;    } else if( gametype==GAME_9BALL ){        setfunc_evaluate_last_move( evaluate_last_move_9ball );        setfunc_create_scene( create_9ball_scene );        setfunc_create_walls( create_6hole_walls );        setfunc_ai_get_stroke_dir( ai_get_stroke_dir_9ball );        player[0].cue_ball=0;   player[1].cue_ball=0;        player[act_player].place_cue_ball=1;        human_player_roster.player[0].cue_ball=0;   human_player_roster.player[1].cue_ball=0;        human_player_roster.player[act_player].place_cue_ball=1;    } else if( gametype==GAME_CARAMBOL ){        setfunc_evaluate_last_move( evaluate_last_move_carambol );        setfunc_create_scene( create_carambol_scene );        setfunc_create_walls( create_0hole_walls );        setfunc_ai_get_stroke_dir( ai_get_stroke_dir_carambol );        player[0].cue_ball=0;   player[1].cue_ball=1;        player[act_player].place_cue_ball=0;        human_player_roster.player[0].cue_ball=0;   human_player_roster.player[1].cue_ball=1;        human_player_roster.player[act_player].place_cue_ball=0;    } else if( gametype==GAME_SNOOKER ){        setfunc_evaluate_last_move( evaluate_last_move_snooker );        setfunc_create_scene( create_snooker_scene );        setfunc_create_walls( create_6hole_walls );        setfunc_ai_get_stroke_dir( ai_get_stroke_dir_snooker );/*        options_table_size = 9.0*2.54*12.0/100.0;        if( table_obj!=0 )  table_obj=create_table( spheretexbind, &walls );*/        player[0].cue_ball=0;   player[1].cue_ball=0;        player[act_player].place_cue_ball=1;        human_player_roster.player[0].cue_ball=0;   human_player_roster.player[1].cue_ball=0;        human_player_roster.player[act_player].place_cue_ball=1;    }}double angle_pm180(double ang){    while ( ang >  180.0 ) ang-=360.0;    while ( ang < -180.0 ) ang+=360.0;    return ang;}void toggle_queue_view(){    queue_view = (queue_view==0)?1:0;    if( queue_view ){        Xrot_offs=angle_pm180(Xrot-Xque);  Xrot=Xque;        Zrot_offs=angle_pm180(Zrot-Zque);  Zrot=Zque;    } else {        double th=Xrot/180.0*M_PI;        double ph=Zrot/180.0*M_PI;        free_view_pos_aim = vec_scale(vec_xyz(sin(th)*sin(ph),sin(th)*cos(ph),cos(th)), cam_dist);        free_view_pos_aim = vec_add( free_view_pos_aim, CUE_BALL_XYPOS );        free_view_pos = free_view_pos_aim ;    }}void birdview(){        if(options_free_view_on==0) options_free_view_on=1;        if(queue_view) toggle_queue_view();        if( (!queue_view) && options_free_view_on ){            double Xoffs=0.0-Xrot;            double Zoffs=-90.0-Zrot;            free_view_pos_aim = vec_xyz(0,0,3.5*options_table_size/2.1336);            free_view_pos = free_view_pos_aim ;            Xrot += Xoffs;            Zrot += Zoffs;            Xrot_offs -= Xoffs;            Zrot_offs -= Zoffs;            Xrot = 0.0;            Zrot = -90.0;            Xrot_offs = 0.0;            Zrot_offs = 0.0;        }        old_queue_view = queue_view;}void player_copy(struct Player * player, struct Player src){    player->is_AI          = src.is_AI;    player->is_net         = src.is_net;    player->half_full      = src.half_full;    printf("player_copy1\n");    strcpy(player->name,src.name);    printf("player_copy2\n");    player->Xque           = src.Xque;    player->Zque           = src.Zque;    player->cue_x          = src.cue_x;    player->cue_y          = src.cue_y;    player->strength       = src.strength;    player->queue_view     = src.queue_view;    player->place_cue_ball = src.place_cue_ball;    player->winner         = src.winner;    player->err            = src.err;    printf("player_copy3\n");    printf("%s\n", player->name);    if(player->text) textObj_setText(player->text, player->name);    printf("player_copy3.5\n");    if(player->score_text) textObj_setText(player->score_text, "0");    printf("player_copy4\n");    player->snooker_on_red = src.snooker_on_red;    player->score          = src.score;    player->cue_ball       = src.cue_ball;}void init_player(struct Player * player, int ai){    player->is_AI=ai;    player->is_net=0;    player->half_full=BALL_ANY;    strcpy(player->name,ai?"AI-Player":"Human");    player->Xque=-83.0;    player->Zque=0.0;    player->cue_x=0.0;    player->cue_y=0.0;    player->strength=0.7;    player->queue_view=ai?0:1;    player->place_cue_ball=0;    player->winner=0;    player->err=0;    player->text = 0;    player->score_text = 0;    player->snooker_on_red=1;    player->score=0;    player->cue_ball=0;//    player[0].free_view_pos=vec_xyz(0,-1.0,1.5);//    player[1].free_view_pos=vec_xyz(0,-1.0,1.5);}void init_players(){    init_player(&player[0],0);    init_player(&player[1],human_human_mode?0:1);/*    player[0].is_AI=0;    player[1].is_AI=human_human_mode?0:1;    player[0].is_net=0;    player[1].is_net=0;    player[0].half_full=BALL_ANY;    player[1].half_full=BALL_ANY;*/    strcpy(player[0].name,player_names[0]);    strcpy(player[1].name,player_names[human_human_mode?2:1]);/*    player[0].Xque=-83.0;    player[1].Xque=-83.0;    player[0].Zque=0.0;    player[1].Zque=0.0;    player[0].cue_x=0.0;    player[1].cue_x=0.0;    player[0].cue_y=0.0;    player[1].cue_y=0.0;    player[0].strength=0.7;    player[1].strength=0.7;    player[0].queue_view=1;    player[1].queue_view=human_human_mode?1:0;    player[0].place_cue_ball=0;    player[1].place_cue_ball=0;    player[0].winner=0;    player[1].winner=0;    player[0].err=0;    player[1].err=0;    player[0].text = 0;    player[1].text = 0;    player[0].score_text = 0;    player[1].score_text = 0;    player[0].snooker_on_red=1;    player[1].snooker_on_red=1;    player[0].score=0;    player[1].score=0;    player[0].cue_ball=0;    player[1].cue_ball=0;*///    player[0].free_view_pos=vec_xyz(0,-1.0,1.5);//    player[1].free_view_pos=vec_xyz(0,-1.0,1.5);}void init_ai_player_roster(struct PlayerRoster * roster){    int i;    for(i=0;i<roster->nr;i++){        init_player(&(roster->player[i]),1);        if (i==roster->nr-1) { /* human player */            roster->player[i]=human_player_roster.player[0];        } else if (i==0){            strcpy(roster->player[i].name,"billardo bill");            roster->player[i].err=0.0;        } else if (i==1) {            strcpy(roster->player[i].name,"suzy cue");            roster->player[i].err=0.02;        } else if (i==2) {            strcpy(roster->player[i].name,"pooledo pete");            roster->player[i].err=0.05;        } else if (i==3) {            strcpy(roster->player[i].name,"billie ball");            roster->player[i].err=0.1;        } else if (i==4) {            strcpy(roster->player[i].name,"snookie");            roster->player[i].err=0.2;        } else if (i==5) {            strcpy(roster->player[i].name,"diamond dan");            roster->player[i].err=0.4;        } else if (i==6) {            strcpy(roster->player[i].name,"tom tuxedo");            roster->player[i].err=0.6;        } else if (i==7) {            strcpy(roster->player[i].name,"sally silver");            roster->player[i].err=0.7;        } else if (i==8) {            strcpy(roster->player[i].name,"wicked wendy");            roster->player[i].err=0.8;        } else if (i==9) {            strcpy(roster->player[i].name,"bald ben");            roster->player[i].err=0.9;        } else if (i==10) {            strcpy(roster->player[i].name,"badino buck");            roster->player[i].err=0.10;        } else if (i==11) {            strcpy(roster->player[i].name,"worse will");            roster->player[i].err=0.11;        } else if (i==12) {            strcpy(roster->player[i].name,"rita rookie");            roster->player[i].err=0.12;        } else if (i==13) {            strcpy(roster->player[i].name,"don dumb");            roster->player[i].err=0.15;        } else if (i==14) {            strcpy(roster->player[i].name,"dana dummy");            roster->player[i].err=0.19;        } else {            char str[256];            sprintf(str,"dumb for %d",i-13);            strcpy(roster->player[i].name,str);            roster->player[i].err=0.1*(double)(i-13);        }        roster->player[i].text = textObj_new(roster->player[i].name, options_roster_fontname, 28);    }}void init_human_player_roster(struct PlayerRoster * roster){    int i;    roster->nr=2;    for(i=0;i<roster->nr;i++){        init_player(&(roster->player[i]),0);        {            char str[256];            sprintf(str,"human player %d",i+1);            strcpy(roster->player[i].name,str);            roster->player[i].err=(double)i/10.0;        }        roster->player[i].text = 0;    }}void create_human_player_roster_text(struct PlayerRoster * roster){    int i;    for(i=0;i<roster->nr;i++){        if(roster->player[i].text == 0){            roster->player[i].text = textObj_new(roster->player[i].name, options_roster_fontname, 28);        } else {            textObj_setText(roster->player[i].text, roster->player[i].name);        }    }}void init_tournament_state( struct TournamentState_ * ts ){    static int init_me=1;    int i,j,k, dummy, game;    int players[100];    ts->round_num=TOURNAMENT_ROUND_NUM;    ts->game_ind=0;    ts->round_ind=0;    ts->wait_for_next_match=1;    ts->tournament_over=0;    ts->overall_winner=-1;    ts->ai_fast_motion=options_tourfast;    for( i=0 ; i<(1<<ts->round_num) ; i++ ) players[i]=i;    /* mix players for tournament */    for( k=0 ; k<1000 ; k++ ){        i =   k   %(1<<ts->round_num);        j = rand()%(1<<ts->round_num);        dummy=players[i];        players[i]=players[j];        players[j]=dummy;    }    /* set up pairings */    for( game=0 ; game<(1<<(ts->round_num-1)) ; game++ ){        ts->game[0][game].roster_player1 = players[(game*2)];        ts->game[0][game].roster_player2 = players[(game*2)+1];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -