亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aiplayer.c

?? 這是一個相當棒的Linux下的臺球游戲
?? C
?? 第 1 頁 / 共 2 頁
字號:
            !ball_in_way(minind,hole->aim,balls) ){            angle = fabs( vec_angle( vec_diff(r_hit,bcue->r), vec_diff(hole->aim,r_hit) ) );            if( angle<minangle ){                minhole = j;  minangle = angle;                DPRINTF("aiplayer: hole:%d\n",minhole);            }        } else {            DPRINTF("aiplayer: hole:%d - no! inway1=%d, inway2=%d\n",                    j,ball_in_way(0,r_hit,balls),ball_in_way(i,hole->aim,balls));        }    }    if(minhole!=-1){        hole = &walls->hole[minhole];        r_hit = vec_scale(vec_unit(vec_diff(bhit->r,hole->aim)),(bcue->d+bhit->d)/2.0);        r_hit = vec_diff(vec_add(bhit->r,r_hit),bcue->r);    } else {  /* no proper ball found */        DPRINTF("aiplayer: no proper hole found\n");        r_hit = vec_diff(bhit->r,bcue->r);    }    r_hit=vec_add(r_hit,vec_scale(vec_xyz(my_rand01()-0.5,my_rand01()-0.5,my_rand01()-0.5),0.02*ai_err*vec_abs(r_hit)));    return vec_unit(r_hit);}#define IS_RED(x) ( x==1 || x>=8 )int snooker_ball_legal(int ball,struct Player *player){    return ((IS_RED(ball) && player->snooker_on_red)          ||(!IS_RED(ball) && !player->snooker_on_red && player->snooker_next_color<=1)          ||(player->snooker_on_red==0 && ball==player->snooker_next_color && player->snooker_next_color>1));}#define CUE_OBJ_WEIGHT 0.2#define OBJ_HOLE_WEIGHT 0.7#define POINT_WEIGHT 0.3#define CENTERHOLE_ANGLE_WEIGHT 1#define CORNERHOLE_ANGLE_WEIGHT 1#define ANGLE_WEIGHT 1VMvect ai_get_stroke_dir_snooker( BallsType * balls, BordersType * walls, struct Player * pplayer ){   //return vec_xyz(1,1,0);;    VMvect r_hit,hole_aim,hole_aim_def,min_r_hit;    VMfloat angle, minweight,hole_angle,weight,corner_acentrism;    BallType *bhit, *bcue;    HoleType *hole;    int minball;    int minhole;    int i,j;    int legal_ball=1;    fprintf(stderr,"aiplayer: start player[%s]\n",pplayer->name);    minball=0;    minhole=-1;    minweight=12;    bcue = &balls->ball[0];    for( i=balls->nr-1;i>=1; i-- ) if ( balls->ball[i].in_game ){        if(snooker_ball_legal(i,pplayer))        {            bhit = &balls->ball[i];            for( j=0; j<walls->holenr; j++ ){                hole = &walls->hole[j];                if(j>1)                {                    hole_aim=hole->aim;                    if(hole_aim.x>0) hole_aim.x-=0.007;                    if(hole_aim.x<0) hole_aim.x+=0.007;                    if(hole_aim.y>0) hole_aim.y-=0.007;                    if(hole_aim.y<0) hole_aim.y+=0.007;                }                else                {                    hole_aim=vec_scale(hole->aim,1.02);                }                r_hit = vec_scale(vec_unit(vec_diff(bhit->r,hole_aim)),(bcue->d+bhit->d)/2.0);                r_hit = vec_add(bhit->r,r_hit);                if( !ball_in_way(0,r_hit,balls) &&                    !ball_in_way(i,hole_aim,balls) ){                    angle = fabs( vec_angle( vec_diff(r_hit,bcue->r), vec_diff(hole_aim,r_hit) ) );                    hole_angle = vec_angle(vec_diff(hole_aim,bhit->r),vec_diff(vec_xyz(2*hole_aim.x,hole_aim.y,0),hole_aim));                    corner_acentrism=fabs(hole_angle-M_PI/4);                    /*fprintf(stderr,"aiplayer: ball:%d hole:%d raw hole_angle %f\n",balls->ball[i].nr,j, hole_angle*180/M_PI);*/                    /* normalized to give an unweighted maximum of +- 2.5 per item */                    weight = 0.64 * ANGLE_WEIGHT * pow(angle,3)                             +(j<=1)*0.64 * CENTERHOLE_ANGLE_WEIGHT * pow(hole_angle,3)                             +(j>1) * 5.0 * CORNERHOLE_ANGLE_WEIGHT * pow(corner_acentrism,3)                             +0.04 * OBJ_HOLE_WEIGHT * vec_abssq(vec_diff(bhit->r,hole_aim))                             +0.15 * CUE_OBJ_WEIGHT * vec_abs(vec_diff(bhit->r,bcue->r))                             -1.5 * POINT_WEIGHT *(i>=2||i<=7?i-2:0)                              ;                     if(weight <minweight){                         minball = i; minhole = j;  minweight = weight;hole_aim_def=hole_aim;                        fprintf(stderr,"aiplayer: ball:%d hole:%d\n",i,minhole);                    }                }            }        }    }    /*fprintf(stderr,"aiplayer: 1\n");*/    if( minball==0 )  /* no pottable ball found, hit any legal ball */    {        //for( i=1;i<balls->nr && minball==0;i++) if ( balls->ball[i].in_game ){        for( i=balls->nr-1;i>=1 && minball==0;i--) if ( balls->ball[i].in_game ){            if(snooker_ball_legal(i,pplayer))            {                VMfloat d;                for(d=-(balls->ball[0].d-0.001);d<(balls->ball[0].d-0.001) && minball==0;d+=0.005)                {                   VMvect offset,new_r_hit;                   bhit = &balls->ball[i];                   r_hit = vec_diff(bhit->r,bcue->r);                   /*r_hit=vec_rotate(r_hit,vec_xyz(0,0,asin(d/vec_abs(r_hit))));*/                   offset=vec_scale(vec_unit(vec_rotate(r_hit,vec_xyz(0,0,M_PI/2))),d);                   new_r_hit = vec_diff(vec_add(bhit->r,offset),bcue->r);                   new_r_hit = vec_diff(new_r_hit,vec_scale(vec_unit(new_r_hit),balls->ball[i].d/1.99));                                      if( !ball_in_way(0,vec_add(balls->ball[0].r,new_r_hit),balls))                   {                       fprintf(stderr,"ball found\n");                       minball=i;                       min_r_hit=new_r_hit;                   }               }            }        }    }    if( minball==0 )  /* no legal ball found, just play anything */    {        legal_ball=0;        minball=0;        if (pplayer->snooker_on_red)        {           minball=2+my_rand(6);        }        else if (pplayer->snooker_on_red==0 && pplayer->snooker_next_color<2)        {           minball=7+my_rand(15);           if(minball==21) minball=1;        }        else        {           minball=pplayer->snooker_next_color;        }    }    /*fprintf(stderr,"aiplayer: 2\n");*/    bhit = &balls->ball[minball];    if(minhole!=-1){        hole = &walls->hole[minhole];        r_hit = vec_scale(vec_unit(vec_diff(bhit->r,hole_aim_def)),(bcue->d+bhit->d)/2.0);        r_hit = vec_diff(vec_add(bhit->r,r_hit),bcue->r);    } else {  /* no proper ball found */        if(legal_ball==0)        {           fprintf(stderr,"aiplayer: no proper ball found\n");           r_hit = vec_diff(bhit->r,bcue->r);        }        else        {           fprintf(stderr,"aiplayer: can hit legal ball : %d\n",minball);           r_hit=min_r_hit;        }    }    r_hit=vec_add(r_hit,vec_scale(vec_xyz(my_rand01()-0.5,my_rand01()-0.5,my_rand01()-0.5),0.02*ai_err/vec_abs(r_hit)));    fprintf(stderr,"aiplayer: done\n");    return vec_unit(r_hit);}#undef IS_REDVMvect ai_get_stroke_dir_carambol( BallsType * balls, BordersType * walls, struct Player * pplayer ){#define CUE_BALL_IND (pplayer->cue_ball)    int i,j,k, foundshot;    VMvect wc;    /* way of cueball to objectball 1 */    VMvect w12;   /* way of cueball from objectball 1 to objectball 2 */    VMvect d12;   /* vec from objectball 1 to objectball 2 */    VMvect p1;    /* vec from ball1 to cueball at hit */    VMvect min_wc;    double min_angle;    double th;    foundshot=0;    min_angle=M_PI;    for(i=0;i<balls->nr;i++) if(i!=CUE_BALL_IND){             /* i = objectball 1 */        for( j=0 ; j<balls->nr ; j++ ){                       /* j = objectball 2 */            if(j!=CUE_BALL_IND && j!=i) break;        }        DPRINTF("ai_get_stroke_dir_carambol:i=%d,j=%d\n",i,j);        d12 = vec_diff( balls->ball[j].r, balls->ball[i].r );        th = acos(BALL_D/vec_abs(d12));        for(k=0;k<2;k++){  /* the two possible tangents */            p1  = vec_scale( vec_unit( vec_rotate(d12,vec_xyz(0,0,(k==0)?th:-th)) ), BALL_D );            wc  = vec_diff( vec_add(balls->ball[i].r,p1), balls->ball[CUE_BALL_IND].r );            w12 = vec_diff( balls->ball[j].r, vec_add(balls->ball[i].r,p1) );            if( vec_mul(wc,w12)>0.0 && vec_mul(wc,p1)<0.0 ){  /* conditions for possible shot */                foundshot=1;                if( vec_angle( wc, w12 ) < min_angle ){                    min_angle = vec_angle( wc, w12 );                    min_wc = wc;                }            }        }    }    if(foundshot){        return vec_unit(min_wc);    } else {        return vec_unit( vec_diff(balls->ball[(CUE_BALL_IND+1+(rand()%2))%3].r, balls->ball[CUE_BALL_IND].r) );    }#undef CUE_BALL_IND}void setfunc_ai_get_stroke_dir(VMvect (*func)( BallsType * balls, BordersType * walls, struct Player * pplayer )){    ai_get_stroke_dir=func;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷激情综合网| 色综合久久久久久久久久久| 成人午夜精品一区二区三区| 91黄色小视频| 国产亚洲制服色| 日本不卡高清视频| 91久久精品网| 欧美国产在线观看| 久久er精品视频| 欧美日韩另类国产亚洲欧美一级| 久久色在线观看| 日本亚洲天堂网| 精品视频资源站| 亚洲卡通欧美制服中文| 粉嫩绯色av一区二区在线观看| 欧美福利一区二区| 一区2区3区在线看| 色综合久久久久久久久| 国产精品乱码久久久久久| 蜜臀久久99精品久久久久宅男| 在线观看亚洲专区| 亚洲欧美激情一区二区| 成人av电影免费在线播放| 久久久久久久性| 国产乱码精品一区二区三区忘忧草 | 蜜臀av性久久久久蜜臀aⅴ| 91在线观看视频| 中文字幕在线一区| 99视频在线精品| 亚洲色图一区二区三区| 顶级嫩模精品视频在线看| 久久久精品一品道一区| 国产一区二区主播在线| 26uuu欧美日本| 韩国v欧美v日本v亚洲v| 2020国产精品久久精品美国| 精品在线你懂的| 2024国产精品| 国内精品久久久久影院色| 久久综合色播五月| 国产麻豆精品95视频| 国产婷婷一区二区| 暴力调教一区二区三区| 亚洲美女一区二区三区| 欧美色成人综合| 日日夜夜精品视频免费| 精品入口麻豆88视频| 国产一区二区三区精品视频| 久久久久久亚洲综合影院红桃| 国产精品香蕉一区二区三区| 国产精品三级av在线播放| 一本色道久久综合精品竹菊 | 2020国产成人综合网| 国内成人自拍视频| 国产精品国产三级国产aⅴ中文| 99久久99久久精品免费看蜜桃| 亚洲免费观看高清| 欧美精品在线视频| 国内精品自线一区二区三区视频| 国产三级精品视频| 在线免费观看日本一区| 日本女优在线视频一区二区| 国产网站一区二区三区| 色网站国产精品| 蜜桃精品在线观看| 国产欧美精品区一区二区三区 | 极品少妇一区二区| 欧美国产精品一区二区| 欧美三区在线观看| 国产精品一级在线| 亚洲国产精品久久人人爱| 337p日本欧洲亚洲大胆精品| 91蜜桃在线免费视频| 蜜桃av一区二区三区| 亚洲日本乱码在线观看| 欧美大片免费久久精品三p| 91在线丨porny丨国产| 日本不卡一区二区三区高清视频| 国产精品久久久久永久免费观看| 欧美精品精品一区| 92精品国产成人观看免费| 久久99久久久久| 亚洲成人一区二区| 日韩美女视频一区二区 | 美女精品自拍一二三四| 亚洲欧美韩国综合色| 欧美v日韩v国产v| 在线观看中文字幕不卡| 成人午夜视频网站| 精品一区二区三区免费视频| 一区二区三区欧美激情| 中文成人av在线| 日韩欧美国产麻豆| 欧美日韩精品一区二区三区四区| 成人av在线播放网站| 久久av中文字幕片| 欧美aⅴ一区二区三区视频| 亚洲国产综合91精品麻豆| 自拍偷拍亚洲激情| 国产欧美一区二区在线观看| 日韩欧美你懂的| 欧美一区午夜视频在线观看| 欧美性videosxxxxx| 色婷婷精品大在线视频| 91女厕偷拍女厕偷拍高清| 成人免费视频一区二区| 国产精品亚洲综合一区在线观看| 国内精品国产成人| 狠狠色丁香九九婷婷综合五月| 石原莉奈一区二区三区在线观看| 一区二区在线观看免费| 亚洲激情男女视频| 一区二区三区四区乱视频| 亚洲精品高清视频在线观看| 亚洲区小说区图片区qvod| 亚洲欧美另类小说| 亚洲一本大道在线| 午夜视黄欧洲亚洲| 青青草精品视频| 精品一区二区三区日韩| 国产一区二区网址| 国产91在线观看丝袜| 成人永久免费视频| 日韩一级二级三级| 精品国产成人在线影院 | 欧美日韩精品一区二区三区四区| 欧美色视频一区| 欧美一卡二卡在线| 久久中文字幕电影| 中文字幕在线观看一区二区| 亚洲视频在线一区观看| 亚洲图片有声小说| 蜜臀av一区二区在线观看| 国产剧情一区二区| 99久久精品久久久久久清纯| 在线日韩一区二区| 日韩午夜激情免费电影| 久久精品人人做人人综合| 中文字幕一区二区三区不卡在线| 亚洲精品一二三| 奇米色一区二区| 成人国产精品免费网站| 欧洲亚洲精品在线| 欧美成人精品3d动漫h| 国产免费成人在线视频| 一级精品视频在线观看宜春院| 日韩—二三区免费观看av| 国产激情一区二区三区| 色噜噜偷拍精品综合在线| 欧美一级专区免费大片| 国产精品国产三级国产有无不卡 | 亚洲色图欧洲色图婷婷| 日日摸夜夜添夜夜添国产精品| 经典三级在线一区| 在线观看日韩一区| 久久久噜噜噜久久中文字幕色伊伊| 综合精品久久久| 狠狠色综合日日| 91黄色免费观看| 国产色产综合产在线视频| 亚洲一区二区av在线| 粉嫩久久99精品久久久久久夜| 欧美日韩你懂得| 国产精品国产三级国产普通话蜜臀 | 婷婷夜色潮精品综合在线| 国内精品免费在线观看| 欧美日韩精品一区二区天天拍小说| 久久久综合精品| 日韩精品一级二级 | 在线不卡的av| 国产精品黄色在线观看| 麻豆国产一区二区| 欧美三级乱人伦电影| 亚洲国产精品成人综合 | 亚洲国产精品嫩草影院| 成人开心网精品视频| 欧美本精品男人aⅴ天堂| 亚洲国产sm捆绑调教视频| 不卡的av电影在线观看| 亚洲精品在线观看网站| 蜜桃视频一区二区三区在线观看| 日本高清不卡一区| 中文字幕日韩精品一区 | 狠狠色综合日日| 欧美一卡2卡三卡4卡5免费| 亚洲午夜久久久久中文字幕久| av在线播放一区二区三区| 国产亚洲人成网站| 激情综合亚洲精品| 欧美一区二区免费视频| 五月天一区二区三区| 精品视频一区 二区 三区| 一区二区三区在线看| 91麻豆精品视频| 亚洲日本一区二区| 色噜噜狠狠成人中文综合| 亚洲黄一区二区三区| 在线精品亚洲一区二区不卡| 伊人夜夜躁av伊人久久| 在线国产亚洲欧美|