📄 billard3d.c
字号:
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 + -