Пример #1
0
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;
}	
Пример #2
0
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出牌。");
}
Пример #3
0
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);
}			
Пример #4
0
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;
}
Пример #5
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;
}
Пример #6
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;
	}	
}
Пример #7
0
int aversive_send_msg3(aversive_dev_t* dev, uint8_t cmd, uint16_t* values)
{
  return send_msg3(dev, cmd, (int16_t*)values);
}
Пример #8
0
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);
}
Пример #9
0
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);
}
Пример #10
0
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);
}
Пример #11
0
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);
}