int joker_next_player(int mode, int style) //mode=0 if first is not allowed, mode=1 if first is allowed { //下一个人是谁呢? int i,k; i=CURRENT_TABLEPOS; //牌桌上的位置 k=0; set_turn_time(); while ((!(PINFO(joker_getpos(i)).vnum > 0) || (PINFO(joker_getpos(i)).flag & PEOPLE_VOTED) || (mode==JOKER_NEXT_PLAYER_NOTALLOWFIRST) )&&!k) { mode=JOKER_NEXT_PLAYER_ALLOWFIRST; i++; if (i>=MAX_JOKER_PLAYER) i=0; //假如有人掉线,马上结束 if (PINFO(joker_getpos(i)).vnum >0 && (PINFO(joker_getpos(i)).style ==-1 || !(PINFO(joker_getpos(i)).flag & PEOPLE_ALIVE))) { k=check_win(); return -1; } //假如已经回到上一次出牌的人那里 if (joker_getpos(i)==CURRENT_LEADER) { if (CURRENT_JOKER_TYPE==-1) return -1; k=joker_next_round(style); } if (PINFO(joker_getpos(i)).flag & PEOPLE_VOTED && style == JOKER_NEXT_PLAYER_MAYPASS) joker_pass_msg(joker_getpos(i),JOKER_PASS_GIVEUP); if (PINFO(joker_getpos(i)).flag & PEOPLE_VOTED && style == JOKER_NEXT_PLAYER_BRIDGE_BID) joker_pass_msg(joker_getpos(i),JOKER_PASS_BRIDGE); } if (style == JOKER_NEXT_PLAYER_MAYPASS || CURRENT_JOKER_TYPE>=0) { CURRENT_POS=joker_getpos(i); CURRENT_TABLEPOS=i; send_msg3(-1, "轮到\33[33;1m", joker_getpos(i),"\33[m出牌"); if (style==JOKER_NEXT_PLAYER_MAYPASS) send_msg(joker_getpos(i), "\33[34mCtrl-T跳过,Ctrl-S在跳过和询问之间切换,Ctrl-U查看自己的牌。\33[m"); else if (style==JOKER_NEXT_PLAYER_MAYNOTPASS) send_msg(joker_getpos(i),"\33[34mCtrl-U查看自己的牌。\33[m"); else if (style==JOKER_NEXT_PLAYER_BRIDGE_BID) send_msg(joker_getpos(i), "\33[34mCtrl-T跳过,Ctrl-S在跳过和询问之间切换,Ctrl-U查看自己的牌。\33[m"); } else if (style ==JOKER_NEXT_PLAYER_MAYNOTPASS && CURRENT_JOKER_TYPE<0) { i=CURRENT_TABLEPOS; send_msg3(-1, "轮到\33[33;1m", joker_getpos(i),"\33[32;1m领先\33[m出牌"); send_msg(joker_getpos(i),"\33[34mCtrl-U查看自己的牌。\33[m"); } kill_msg(-1); return i; }
void jokerpig_showcurrent (int pos) { char scards[20]; char buf[200]; int i,j,k; long p; //显示当前一局未出的明牌的情况 //明牌的记录和得牌记录都在JOKERPIG_POINTCARD_LIST中 jokerpig_showcurrent_doubleflags(pos); //显示当前一局的得牌和得分 for (i=0;i<MAX_JOKER_PLAYER; i++) { for (j=0; j<20;j++) scards[j]=-1; k=0; for (j=0;j<16;j++) if (JOKERPIG_POINTCARD_LIST[j]==i) scards[k++]=jokerpig_pcsn2num(j+1); if (k>0) { send_msg3(pos, "\33[33;1m", POS_LIST[i], "\33[31;1m的得牌情况:"); joker_showdeck_common(scards,k,pos, JOKER_SHOWDECK_FULL); p=jokerpig_countpoint (scards, k, JOKERPIG_DOUBLE_FLAG); sprintf(buf,"总计得分:%ld", p); JOKER_POINT_RECORD_TMP[i]=p; send_msg(pos,buf); kill_msg(pos); } } //显示出了的牌 joker_ontable_showcurrent(pos, JOKER_ONTABLE_ROUND); send_msg3(pos, "\33[31;1m目前是\33[33;1m", CURRENT_POS, "\33[31;1m出牌。"); }
void jokerpig_showdeck(int i,int pos) { joker_ontable_showcurrent(pos, JOKER_ONTABLE_ROUND); send_msg3(pos, "\33[31;1m目前是\33[33;1m", CURRENT_POS, "\33[31;1m出牌。"); // jokerpig_showcurrent(pos); joker_showdeck(i,pos,RDECKS_COUNT(POS_LIST[i]),JOKER_SHOWDECK_BRIDGE); }
int aversive_get_motors_current(aversive_dev_t* dev, int16_t* r, int16_t* l) { int16_t values[3] = {0, 0, 0}; send_msg3(dev, 'I', values); *r = values[0]; *l = values[1]; return 0; }
int aversive_get_pos(aversive_dev_t* dev, int16_t* a, int16_t* x, int16_t* y) { int16_t values[3] = {0, 0, 0}; send_msg3(dev, 'W', values); *a = values[0]; *x = values[1]; *y = values[2]; return 0; }
void vote_result_jokerpig() { //谁赢了? char ontable[MAX_JOKER_PLAYER]; int i,j,k; //首先编制出牌列表 j=CURRENT_LEADER; for (i=0;i<MAX_JOKER_PLAYER;i++) { ontable[j++]=ONTABLE_LIST[i]; if (j>=MAX_JOKER_PLAYER) j=0; } //谁赢了? k=jokerpig_largest(ontable, MAX_JOKER_PLAYER); //把计分牌交给胜利者 jokerpig_winpoints(ontable, k); //显示一下战局 jokerpig_showcurrent(-1); send_msg3(-1, "\33[33;1m",POS_LIST[k], "\33[31;1m赢得这组牌。\33[m"); //由获得本轮胜利的人先出 CURRENT_TABLEPOS=k; CURRENT_POS=POS_LIST[CURRENT_TABLEPOS]; CURRENT_LEADER=CURRENT_POS; //拱猪的特别设定: 明牌不能首轮出的处理 switch (CURRENT_JOKER_TYPE) { case 0: JOKERPIG_DOUBLE_FIRSTROUND[JOKERPIG_DOUBLE_FLAG_PIG]=1; break; case 1: JOKERPIG_DOUBLE_FIRSTROUND[JOKERPIG_DOUBLE_FLAG_HEARTA]=1; JOKERPIG_DOUBLE_FIRSTROUND[JOKERPIG_DOUBLE_FLAG_HEART5]=1; break; case 2: JOKERPIG_DOUBLE_FIRSTROUND[JOKERPIG_DOUBLE_FLAG_SHEEP]=1; break; case 3: JOKERPIG_DOUBLE_FIRSTROUND[JOKERPIG_DOUBLE_FLAG_DOUBLE]=1; break; } }
int aversive_send_msg3(aversive_dev_t* dev, uint8_t cmd, uint16_t* values) { return send_msg3(dev, cmd, (int16_t*)values); }
int aversive_set_blocking_params2(aversive_dev_t* dev, int16_t a, int16_t b) { int16_t values[3] = {a, b, 0}; return send_msg3(dev, 'J', values); }
int aversive_set_blocking_params(aversive_dev_t* dev, int16_t a, int16_t b, int16_t c) { int16_t values[3] = {a, b, c}; return send_msg3(dev, 'S', values); }
int aversive_set_pos(aversive_dev_t* dev, int16_t a, int16_t x, int16_t y) { int16_t values[3] = {a, x, y}; return send_msg3(dev, 'P', values); }
int aversive_goto_forward_xy_abs(aversive_dev_t* dev, int16_t x, int16_t y) { int16_t values[3] = {x, y, 0}; return send_msg3(dev, 'F', values); }