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

📄 piggy2.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 4 页
字号:
string  display_suit(string  dir,  string  suit){        string  str="",  toreturn;        int  i=13,  base,  count=0;        mapping  card;        switch  (suit)        {	case  "spade":	        str  +=  "\n  "+HIB"黑桃:"NOR;	        base=1;	        break;	case  "heart":	        str  +=  "\n  "+HIR"红桃:"NOR;	        base=14;	        break;	case  "diamond":	        str  +=  "\n  "+HIR"方片:"NOR;	        base=27;	        break;	case  "club":	        str  +=  "\n  "+HIB"草花:"NOR;	        base=40;	        break;	default:	        return  "函数错误:display_suit。\n";        }        while  (i--)        {	card=CARDS[i+base];	if  (dir  ==  card["status"])	{	        count++;	        str  +=  CNUM[card["rank"]]+",";	}	continue;        }        if  (!count  ||  !str)	return  "";        toreturn=str[0..(strlen(str)-3)];        return  toreturn;}int  search_suit(object  me,  string  suit){        int  count=0,  i=13,  base;        string  dir=search_my_dir(me);        switch  (suit)        {	case  "spade":	        base=1;	        break;	case  "heart":	        base=14;	        break;	case  "diamond":	        base=27;	        break;	case  "club":	        base=40;	        break;	default:	        return  notify_fail("函数错误:search_suit。\n");        }        while(i--)        {	if(CARDS[i+base]["status"]==dir)	{//	        tell_room(HERE,  "you  have  "+CARDS[i+base]["name"]+"\n");	        count++;	}	continue;        }        return  count;}/******************************************************************************///  some  functions  for  others  to  use.void  renew(string  type){        int  i  =  NUM,  j=CARDNO;        switch  (type)        {	case  "round":	        GAMEINFO["round"]++;	        all_have("played_card");	        GAMEINFO["suit"]="";	        break;	case  "hand":	        TABLE["cond"]="等发牌";	        GAMEINFO["round"]=0;	        GAMEINFO["suit"]  =  "";	        GAMEINFO["rlead"]  =  PIG_OWNER;	        GAMEINFO["next"]  =  "";	        CLAIM["claimer"]  =  "";	        SOLD=([  "pig":  ({"not"}),  "blood":  ({"not"}),			"sheep":  ({"not"}),  "doubler":  ({"not"}),  ]);	        FULL="";	        PIG_OWNER="";	        while(j--)		CARDS[j+1]["status"]  =  "undealt";	        while  (i--)	        {		GAMEINFO[SUIT[i]]  =  0;		CLAIM[DIR[i]]  =  "no";		TABLE[DIR[i]]["card"]=0;		TABLE[DIR[i]]["collected"]=({});		TABLE[DIR[i]]["sold"]=({});		TABLE[DIR[i]]["status"]="filled";		SCORING["hand"][DIR[i]]=0;	        }	        break;	case  "sitting":	        renew("hand");	        PIGHEAD=({});	        while(i--)	        {		SCORING["sitting"][DIR[i]]  =  0;		SCORING["hand"][DIR[i]]  =  0;	        }	        break;	case  "all":	        renew("sitting");	        while(i--)		if  (TABLE[DIR[i]]["player_id"]  ==  "no  one")		        TABLE[DIR[i]]["status"]  =  "empty";	        TABLE["cond"]  =  "等人";	        GAMEINFO["rlead"]  =  "";	        break;	default:	        tell_room(HERE,"函数用法错误:renew。\n");	        break;        }        return;}int  all_have(string  arg){        int  value=1,  i=NUM;        object  me;        switch  (arg)        {	case  "players":	        while(i--)	        {		if  (TABLE[DIR[i]]["player_name"]  ==  "「空」"		  ||  !present(TABLE[DIR[i]]["player_id"],  HERE))		        value  =  0;	  	continue;	        }	        break;	case  "played_card":	        while(i--)	        {		CARDS[TABLE[DIR[i]]["card"]]["status"]="played";		TABLE[DIR[i]]["card"]=0;		continue;	        }	        break;	case  "agreed_claim":	        while(i--)	        {		if  (CLAIM[DIR[i]]  !=  "yes")		        value  =  0;		continue;	        }	        break;	case  "cards":	        while(i--)	        {		if  (!TABLE[DIR[i]]["card"])		        value  =  0;		continue;	        }	        break;	case  "given_head":	        while(i--)	        {		me=find_me(DIR[i]);		me->add("piggy/head_given",  sizeof(PIGHEAD));		continue;	        }	        break;	case  "req_deal":	        while(i--)	        {		if  (TABLE[DIR[i]]["status"]  !=  "asked_for_deal")		        value  =  0;		continue;	        }	        break;	case  "pass":	        while(i--)	        {		if  (TABLE[DIR[i]]["status"]  !=  "passed")		        value  =  0;		continue;	        }	        break;	        	default:	        tell_room(HERE,"函数用法错误:all_have。\n");	        value  =  0;	        break;        }        return  value;}/******************************************************************************///  functions  to  look.  look  table,  of  course,  checks  the  table.//  look  gaoshi  reviews  the  rules  of  this  game......string  look_table(){        string  cond=this_player()->query("env/brief_message");        if(is_dir(cond))	cond="YES";        return  display_table(cond);}string  look_collected(){        string  str;        int  i=NUM;        if  (TABLE["cond"]  !=  "出牌"  &&  TABLE["cond"]  !=  "算分")	return  "现在没在打牌,桌子上空着。\n";        str  =  display_sell();        while  (i--)        {	str  +=  "\n"+CDIR[DIR[i]]+"家"+TABLE[DIR[i]]["player_name"]+"收了如下的牌:";	str  +=  check_collected(DIR[i],  "spade");	str  +=  check_collected(DIR[i],  "heart");	str  +=  check_collected(DIR[i],  "diamond");	str  +=  check_collected(DIR[i],  "club");        }        return  str+"\n";}string  look_hand(){        object  me=this_player();        string  str="",  dir;        if  (!in_table(me))	return  "对不起,你并不在拱猪。\n";        if  (TABLE["cond"]  ==  "算分")	return  "这把已经打完了。\n";        if  (TABLE["cond"]  ==  "等人"  ||  TABLE["cond"]  ==  "等发牌")	return  "你手中还没有牌。\n";        dir=search_my_dir(me);        str  +=  "\n你手中的牌如下:\n";        str  +=  display_suit(dir,  "spade");        str  +=  display_suit(dir,  "heart");        str  +=  display_suit(dir,  "diamond");        str  +=  display_suit(dir,  "club");        return  str+"\n\n";}string  look_note(){        string  str;        object  me=this_player();        if  (TABLE["cond"]  ==  "等人")	return  "纸上画着一个猪头,旁边的名字被人擦去了。下面是个表格,画得歪七扭八的。\n";        return  display_score();}string  display_score(){        int  i  =  NUM;        string  format  =  "│%2s家:%-12s   %6d  %6d   %2s│\n";        string  str  =  "\n┌────────────────────────┐\n"		+    "│方向 玩家        盘分   总分   猪│\n"		+    "├────────────────────────┤\n";        while  (i--)        {	str  +=  sprintf(format,  CDIR[DIR[i]],  TABLE[DIR[i]]["player_name"],			SCORING["hand"][DIR[i]],  SCORING["sitting"][DIR[i]],			(member_array(DIR[i],  PIGHEAD)  ==  -1  ?  " ":  "√"));	continue;        }        str  +=  "└────────────────────────┘\n";        return  str;}string  display_sell(){        int  counta=0,  count=0,  countm=0,  i=NUM,  j;        string  card,  *asell=({}),  str="",  dir;        if  (SOLD["pig"][0]  ==  "a")                counta++;        else  if  (SOLD["pig"][0]  ==  "m")                countm++;        if  (SOLD["blood"][0]  ==  "a")                counta++;        else  if  (SOLD["blood"][0]  ==  "m")                countm++;        if  (SOLD["sheep"][0]  ==  "a")                counta++;        else  if  (SOLD["sheep"][0]  ==  "m")                countm++;        if  (SOLD["doubler"][0]  ==  "a")                counta++;        else  if  (SOLD["doubler"][0]  ==  "m")                countm++;        if  (!(countm+counta))  str  +=  "这把没人卖牌。\n";        else        {                str  +=  "卖牌情况如下:\n";                while(i--)                {        	        dir=DIR[i];        	        if  (!(j=sizeof(TABLE[dir]["sold"])))        		continue;        	        str  +=  "  "+CDIR[dir]+"家"+HIC+TABLE[dir]["player_name"]+NOR;        	        count=0;        	        while  (j--)        	        {        		card=TABLE[dir]["sold"][j];        		if  (SOLD[card][0]=="a")  count++;        		else  str  +=  "明卖"+CCARD[card]+",";        	        }        	        if  (!count)  str  =  str[0..(strlen(str)-3)]+"。";        	        else  str  +=  "暗卖"+chinese_number(count)+"张。";        	        str  +=  "\n";                }        }        return  str;}string  display_table(string  cond){        int  i,  index,  j,  size,  cnt;        string  str,  dir,  state;        mapping  status=allocate_mapping(4),  tmp  =  allocate_mapping(3);        mapping  sell=allocate_mapping(4);        sell=([	"east":  ({" "," ",  " ",  " ",}),	"north":  "",	"west":  ({" "," ",  " ",  " ",}),	"south":  "",]);        status=([	"east":  ([  "card":  "   ",		      "player":  "「空」",  ]),	"north":  ([  "card":  "   ",		      "player":  "「空」",  ]),	"west":  ([  "card":  "   ",		      "player":  "「空」",  ]),	"south":  ([  "card":  "   ",		      "player":  "「空」",  ]),]);        i  =  NUM;        while(i--)        {	dir  =  DIR[i];	if  (!is_empty(dir))	        status[dir]["player"]=TABLE[dir]["player_name"];	if  (index=TABLE[dir]["card"])	        status[dir]["card"]  =  CARDS[index]["name"];	continue;        }        if(is_dir(cond))	state="第"+chinese_number(GAMEINFO["round"])+"轮结束,"+TABLE[cond]["player_name"]+"的牌最大。";        else	state  =  (TABLE["cond"]  ==  "出牌"  ?	        "现在是第"+chinese_number(GAMEINFO["round"])+"轮,该"		+TABLE[GAMEINFO["next"]]["player_name"]+"出牌:"  :  "");        if  ((cond  ||  TABLE["cond"]  !=  "出牌")  &&  !is_dir(cond))	str  =  sprintf(PIGSTATE_SHORT,  state,	        status["north"]["player"],  status["north"]["card"],	        status["west"]["player"],  status["west"]["card"],	        status["east"]["card"],  status["east"]["player"],	        status["south"]["card"],  status["south"]["player"]);        else        {	if  (j=sizeof(TABLE["north"]["sold"]))	{	        cnt=j;	        size=j;	        while(j--)		sell["north"]  +=  sold_display("north",  j,  1);	        sell["north"]  =  treat_sold(sell["north"],  size);//	        sell["north"]  =  sell["north"][0..(strlen(sell["north"])-3)];	}	else  sell["north"]="        ";	if  (cnt  <  4  &&  j=sizeof(TABLE["south"]["sold"]))	{	        cnt+=j;	        size=j;	        while(j--)		sell["south"]  +=  sold_display("south",  j,  1);	        sell["south"]  =  treat_sold(sell["south"],  size);//	        sell["south"]  =  sell["south"][0..(strlen(sell["south"])-3)];	}	else  sell["south"]="        ";	if  (cnt  <  4  &&  j=sizeof(TABLE["east"]["sold"]))	{	        cnt  +=  j;	        switch(j)	        {	            case  1:		sell["east"][1]=sold_display("east",  0,  0);		break;	            case  2:		sell["east"][1]=sold_display("east",  0,  0);		sell["east"][2]=sold_display("east",  1,  0);		break;	            case  3:		sell["east"][0]=sold_display("east",  0,  0);		sell["east"][1]=sold_display("east",  1,  0);		sell["east"][2]=sold_display("east",  2,  0);		break;	            case  4:		sell["east"][0]=sold_display("east",  0,  0);		sell["east"][1]=sold_display("east",  1,  0);		sell["east"][2]=sold_display("east",  1,  0);		sell["east"][3]=sold_display("east",  3,  0);		break;	        }	}	if  (cnt  <  4  &&  j=sizeof(TABLE["west"]["sold"]))	{	        cnt  +=  j;	        switch(j)	        {	            case  1:		sell["west"][1]=sold_display("west",  0,  0);		break;	            case  2:		sell["west"][1]=sold_display("west",  0,  0);		sell["west"][2]=sold_display("west",  1,  0);		break;	            case  3:		sell["west"][0]=sold_display("west",  0,  0);		sell["west"][1]=sold_display("west",  1,  0);		sell["west"][2]=sold_display("west",  2,  0);		break;	            case  4:		sell["west"][0]=sold_display("west",  0,  0);		sell["west"][1]=sold_display("west",  1,  0);		sell["west"][2]=sold_display("west",  1,  0);		sell["west"][3]=sold_display("west",  3,  0);		break;	        }	}	str  =  sprintf(PIGSTATE_FULL,  state,	        status["north"]["player"],	        sell["north"],	        sell["west"][0],	        status["north"]["card"],	        sell["east"][0],	        sell["west"][1],	        sell["east"][1],	        status["west"]["player"],	        status["west"]["card"],	        status["east"]["card"],	        status["east"]["player"],	        sell["west"][2],	        sell["east"][2],	        sell["west"][3],	        status["south"]["card"],	        sell["east"][3],	        sell["south"],	        status["south"]["player"]);        }        return  str;}string  treat_sold(string  sold,  int  cnt){        string  str="";        switch  (cnt)        {	case  4:  str  =  sold;break;	case  3:  str  =  " "+sold+" ";break;	case  2:  str  =  "  "+sold+"  ";break;	case  1:  str  =  "   "+sold+"   ";break;        }        return  str;}string  sold_display(string  dir,  int  index,  int  flag){        string  str="";        str  +=  (SOLD[TABLE[dir]["sold"][index]][0]  ==  "m"  ?	(CARDS[NCARD[TABLE[dir]["sold"][index]]]["status"]  !=  "played"?	SCARD[TABLE[dir]["sold"][index]]	        +(CCARD[TABLE[dir]["sold"][index]][0..1])  :  "○")+NOR  :	(CARDS[NCARD[TABLE[dir]["sold"][index]]]["status"]  ==  "played"?		GRN"□"NOR:GRN"■"NOR));        if  (flag)  str  +=  " ";        return  str;}string  read_rules(){        string  str="";        str  +=  "如果您不会打拱猪,请用  help  pigrules  来查看。\n\n";        str  +=  "具体打牌方法请用  help  pigcmds  来查看。\n\n";        return  str;}/******************************************************************************/

⌨️ 快捷键说明

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