1mj.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,606 行 · 第 1/5 页
C
1,606 行
"["+HIG+chinese_number(i=3+random(16))+NOR+ "]点。\n",this_object());
//玩家取牌一次取16只:Q
if (Play>0) P1Data["Mj"]=List[0..25]; //P1Data["Out"]="1w2w3w4w5w6w1t1t1t2t2teafa";
if (Play>1) P2Data["Mj"]=List[26..51];
if (Play>2) P3Data["Mj"]=List[52..77];
if (Play>3) P4Data["Mj"]=List[78..103]; //"1w2w3w4w5w6weaeaeafafafa9s";//
count=(Play*2*13);
if (Play>0) check_flower(P1Data);
if (Play>1) check_flower(P2Data);
if (Play>2) check_flower(P3Data);
if (Play>3) check_flower(P4Data);
List[end..end+1]="2t";
P1Data["Mj"] = sort_data(P1Data["Mj"]);
P2Data["Mj"] = sort_data(P2Data["Mj"]);
P3Data["Mj"] = sort_data(P3Data["Mj"]);
P4Data["Mj"] = sort_data(P4Data["Mj"]);
Playing=1;
/*for( i=0; i<3; i++) {
ob = next_data(NowPlayerId[0], i+1, "player");
if(userp(ob)) tell_object( ob, "以下是你的牌:\n" +show_mj(next_data(NowPlayerId[0], i+1, "Mj"), 5) );
}*/
get_attitudes(P1Data);get_attitudes(P2Data);get_attitudes(P3Data); //决定NPC的打牌态度
message_vision("$N说道:庄家"+HIY+NowPlayerId[0]+NOR+"请出牌。\n",this_object());
do_touch( 0, present(NowPlayerId[0]) ); //让庄家摸牌。
return 1;
}
int do_setmj(string str)
{
int check;
string numstr;
mapping who;
object me=this_player();
if (me->query("id")==P1Data["Id"]) who=P1Data;
else if (me->query("id")==P2Data["Id"]) who=P2Data;
else if (me->query("id")==P3Data["Id"]) who=P3Data;
else if (me->query("id")==P4Data["Id"]) who=P4Data;
else return 1;
if (!str){
numstr=this_object()->name()+"对着你说你设定的有:\n";
if (who["AutoTin"]!="") numstr+="遇到"+HIB+show_mj(who["AutoTin"],2)+NOR+"会自动"+HIB+"[胡牌]"+NOR+"。\n";
if (who["AutoGon"]!="") numstr+="遇到"+HIY+show_mj(who["AutoGon"],2)+NOR+"会自动"+HIY+"[杠牌]"+NOR+"。\n";
if (who["AutoPon"]!="") numstr+="遇到"+HIG+show_mj(who["AutoPon"],2)+NOR+"会自动"+HIG+"[碰牌]"+NOR+"。\n";
if (who["Show"]=="代码") numstr+="显示方式为"+HIY+"[代码]"+NOR+"方式。\n";
if (who["Show"]=="color") numstr+="显示方式为"+HIG+"[彩色]"+NOR+"。\n";
if (who["Auto"]=="auto") numstr+="你设定"+HIR+"[自动听牌]"+NOR+"。\n";
if (who["AutoTin"]==""&&who["AutoGon"]==""&&who["AutoPon"]==""&&who["Show"]==""&&who["Auto"]=="") numstr+="你没有任何设定。\n";
tell_room(environment(me),this_object()->name()+"在"+me->name()+"耳边说了一些话。\n",me);
tell_object(me,numstr);
return 1;
}
if (sscanf(str,"%s %s",str,numstr)!=2) return notify_fail("指令:setmj <tin>&<gon>&<pon> <代码>\n");
if (str=="tin"){
if (numstr=="none"){
who["AutoTin"]="";
return notify_fail("你取消自动胡牌设定。\n");
}
check=do_check_Mj(MjE,numstr);
if (check!=1) return notify_fail("没有["+numstr+"]这种牌。\n");
check=do_check_Mj(who["AutoTin"],numstr);
if (check){
who["AutoTin"]=do_delete_Mj(who["AutoTin"],numstr,1);
return notify_fail("你"+HIR+"删掉了"+NOR+"遇到"+do_check_num(numstr,0)+"会自动胡牌的设定。\n");
}
who["AutoTin"]+=numstr;
Auto_Tin=1;
write("你设定遇到"+do_check_num(numstr,0)+"时会自动胡牌。\n");
return 1;
}
else if (str=="gon"){
if (numstr=="none"){
who["AutoGon"]="";
return notify_fail("你取消自动 牌设定。\n");
}
check=do_check_Mj(who["Mj"],numstr);
if (check==0) return notify_fail("你没"+do_check_num(numstr,0)+"这张牌。\n");
if (check < 3) return notify_fail("你手中要有叁张"+do_check_num(numstr,0)+"才能设定杠此牌。\n");
check=do_check_Mj(who["AutoGon"],numstr);
if (check){
who["AutoGon"]=do_delete_Mj(who["AutoGon"],numstr,1);
return notify_fail("你"+HIR+"删掉了"+NOR+"遇到"+do_check_num(numstr,0)+"会自动杠牌的设定。\n");
}
who["AutoGon"]+=numstr;
Auto_Gon=1;
write("你设定遇到"+do_check_num(numstr,0)+"时会自动杠牌。\n");
return 1;
}
else if (str=="pon"){
if (numstr=="none"){
who["AutoPon"]="";
return notify_fail("你取消自动碰牌设定。\n");
}
check=do_check_Mj(who["Mj"],numstr);
if (check==0) return notify_fail("你没"+do_check_num(numstr,0)+"这张牌。\n");
if (check < 2) return notify_fail("你手中要有两张"+do_check_num(numstr,0)+"才能设定碰此牌。\n");
check=do_check_Mj(who["AutoPon"],numstr);
if (check){
who["AutoPon"]=do_delete_Mj(who["AutoPon"],numstr,1);
return notify_fail("你"+HIR+"删掉了"+NOR+"遇到"+do_check_num(numstr,0)+"会自动碰牌的设定。\n");
}
who["AutoPon"]+=numstr;
Auto_Pon=1;
write("你设定遇到"+do_check_num(numstr,0)+"时会自动碰牌。\n");
return 1;
}
else if (str=="show"){
if (numstr=="none"||numstr=="1"){
who["Show"]="";
return notify_fail("你取消显示设定。\n");
}
if (numstr=="代码"||numstr=="3"){
numstr="代码";
write("你设定只显示代码。\n");
}
else if (numstr=="color"||numstr=="2"){
numstr="color";
write("你设定彩色显示。\n");
}
else return 1;
who["Show"]=numstr;
return 1;
}
else if (str=="auto"){
if (numstr=="none"){
return notify_fail("不能取消自动听牌,要是设定错误等着诈胡吧!!:>。\n");
}
if (who["AutoTin"]=="") return notify_fail("请先设定要听的牌。\n");
if (!Touched) return notify_fail("请先摸牌再做此设定。\n");
if (numstr=="tin") write("你设定自动听牌。\n");
else return 1;
message_vision("\n$N大叫一声:"+HIW+"我听啦~~~"+NOR+"\n\n",me);
Auto=1;
who["Auto"]="auto";
return 1;
}
else return notify_fail("没有这种设定。\n");
}
int do_check_eat(string num1,string num2,string LastDump)
{
int A,B,C;
A=do_check_num(num1,1);
B=do_check_num(num2,1);
C=do_check_num(LastDump,1);
if (A<10){
if (B>10||C>10) return 0;
}
else if (A<19&&A>10){
if (B>19||C>19&&B<10||C<10) return 0;
}
else if (A<28&&A>19){
if (B<19||C<19) return 0;
}
A=do_check_num(num1,2);
B=do_check_num(num2,2);
C=do_check_num(LastDump,2);
if (A > 9 || B > 9 || C > 9) return 0;
if ((A+B)%2!=0){
if (A > B){
if (C==(A+1) || C==(A-2)) return 1;
}else{
if (C==(B+1) || C==(B-2)) return 1;
}
return 0;
}else{
if (A > B){
if (C==(A-1) || C==(B+1)) return 1;
}else{
if (C==(B-1) || C==(A+1)) return 1;
}
return 0;
}
}
string show_mj(string str,int flag)
{
string str1, str2;
string Mj="",Mj1="";
int size=strlen(str)+2,a,b;
if(sizeof(str)>60){
str1 = str[sizeof(str)-60..sizeof(str)-1];
str2 = str[0..sizeof(str)-61];
str = show_mj( str1, flag) + show_mj(str2, flag);
return str;
}
if (!str||str=="") return "";
if (flag!=3){
while(size--){
size--;
Mj+=do_check_num(str[size..size+1],0);
}
if (flag==2) Mj1=Mj;
else{
size=strlen(Mj);
Mj1="┌";
for (a=0;a<(size/2)-1;a++){
if (a%2==0) Mj1+="─";
else Mj1+="┬";
}
Mj1+="┐\n│";
for (a=0;a<size-1;a++){
if (flag==5 || flag==6){
if (Mj[a+2..a+3]=="万") Mj1+=HIR;
else if (Mj[a+2..a+3]=="筒") Mj1+=HIC;
else if (Mj[a+2..a+3]=="索") Mj1+=HIG;
else if (Mj[a+2..a+3]=="风") Mj1+=HIM;
else if (Mj[a+2..a+3]=="中") Mj1+=HIR;
else if (Mj[a+2..a+3]=="发") Mj1+=HIG;
else if (Mj[a+2..a+3]=="板") Mj1+=HIW;
else if (Mj[a+2..a+3]=="春"
|| Mj[a+2..a+3]=="夏"
|| Mj[a+2..a+3]=="秋"
|| Mj[a+2..a+3]=="冬") Mj1+=HIR;
else if (Mj[a+2..a+3]=="梅"
|| Mj[a+2..a+3]=="兰"
|| Mj[a+2..a+3]=="竹"
|| Mj[a+2..a+3]=="菊") Mj1+="[1;30m";
}
Mj1+=Mj[a..a+1];
a+=3;
Mj1+=NOR+"│";
}
Mj1+="\n│";
for (a=2;a<size;a++){
if (flag==5 || flag==6){
if (Mj[a..a+1]=="万") Mj1+=HIR;
else if (Mj[a..a+1]=="索") Mj1+=HIG;
else if (Mj[a..a+1]=="筒") Mj1+=HIC;
else if (Mj[a..a+1]=="风") Mj1+=HIM;
else if (Mj[a..a+1]=="中") Mj1+=HIR;
else if (Mj[a..a+1]=="发") Mj1+=HIG;
else if (Mj[a..a+1]=="白") Mj1+=HIW;
else if (Mj[a..a+1]=="春") Mj1+=HIG;
else if (Mj[a..a+1]=="夏") Mj1+=HIB;
else if (Mj[a..a+1]=="秋") Mj1+=HIY;
else if (Mj[a..a+1]=="冬") Mj1+=HIW;
else if (Mj[a..a+1]=="梅") Mj1+=HIW;
else if (Mj[a..a+1]=="兰") Mj1+=HIR;
else if (Mj[a..a+1]=="竹") Mj1+=HIG;
else if (Mj[a..a+1]=="菊") Mj1+=HIY;
}
Mj1+=Mj[a..a+1];
a+=3;
Mj1+=NOR+"│";
}
Mj1+="\n└";
for (a=(size/2)-1;a>0;a--){
if (a%2!=0){
if (flag==0 || flag==5) Mj1+=str[a-1..a];
else Mj1+="─";
}
else Mj1+="┴";
}
Mj1+="┘\n";
}
return Mj1;
}else{
size*=2;
for (a=(size/2)-1;a>0;a--){
if (a%2!=0) Mj1+=str[a-1..a];
else Mj1+=" ";
}
Mj1+="\n";
}
return Mj1;
}
string check_id(string str,string kind)
{
int check,i;
if (!str) return "";
if (kind=="tin"){
check=NowPlayer;
for (i=0;i<Play-1;i++) {
if (NowPlayerId[check]==P1Data["Id"] && do_check_Mj(P1Data["AutoTin"],str)!=0) return P1Data["Id"];
if (NowPlayerId[check]==P2Data["Id"] && do_check_Mj(P2Data["AutoTin"],str)!=0) return P2Data["Id"];
if (NowPlayerId[check]==P3Data["Id"] && do_check_Mj(P3Data["AutoTin"],str)!=0) return P3Data["Id"];
if (NowPlayerId[check]==P4Data["Id"] && do_check_Mj(P4Data["AutoTin"],str)!=0) return P4Data["Id"];
check++;
check%=Play;
}
return "";
}
if (kind=="gon"){
check=do_check_Mj(P1Data["AutoGon"],str);
if (check!=0){
check=do_check_Mj(P1Data["Mj"],str);
if (check < 3) return "";
else return P1Data["Id"];
}
check=do_check_Mj(P2Data["AutoGon"],str);
if (check!=0){
check=do_check_Mj(P2Data["Mj"],str);
if (check < 3) return "";
else return P2Data["Id"];
}
check=do_check_Mj(P3Data["AutoGon"],str);
if (check!=0){
check=do_check_Mj(P3Data["Mj"],str);
if (check < 3) return "";
else return P3Data["Id"];
}
check=do_check_Mj(P4Data["AutoGon"],str);
if (check!=0){
check=do_check_Mj(P4Data["Mj"],str);
if (check < 3) return "";
else return P4Data["Id"];
}
return "";
}
if (kind=="pon"){
check=do_check_Mj(
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?