mj.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,663 行 · 第 1/5 页
C
1,663 行
return 1;
}
}
message_vision("$N把牌局重新设定。\n",me);
message_vision("$N说道:牌局重新设定请用"+HIR+" addin "+NOR+"加入牌局。\n",this_object());
NowPlayerId[0]="";
NowPlayerId[1]="";
NowPlayerId[2]="";
NowPlayerId[3]="";
P1Data["Id"]="";
P2Data["Id"]="";
P3Data["Id"]="";
P4Data["Id"]="";
Count=0;
LookP ="";
Play=START;
Times=START;
end=END;
count=START;
Playing=START;
return 1;
}
int wash_mj(int amount)
{
int i,x;
string str,countstr="";
mixed *X,MjE_Data = ([
"1w" : 0,"2w" : 0,"3w" : 0,"4w" : 0,"5w" : 0,"6w" : 0,"7w" : 0,"8w" : 0,"9w" : 0,
"1s" : 0,"2s" : 0,"3s" : 0,"4s" : 0,"5s" : 0,"6s" : 0,"7s" : 0,"8s" : 0,"9s" : 0,
"1t" : 0,"2t" : 0,"3t" : 0,"4t" : 0,"5t" : 0,"6t" : 0,"7t" : 0,"8t" : 0,"9t" : 0,
"ea" : 0,"so" : 0,"we" : 0,"no" : 0,"jo" : 0,"fa" : 0,"ba" : 0,
"f1" : 0,"f2" : 0,"f3" : 0,"f4" : 0,"f5" : 0,"f6" : 0,"f7" : 0,"f8" : 0
]);
if (!Play){
command("say 没有玩家要我白洗牌!!门都没有。");
return 1;
}
if (Playing){
command("say 牌局正在进行中。");
return 1;
}
command("say 我帮忙洗牌,等等谁胡要吃红喔..:)");
if (Play<4) command("say 玩家不足四人所以不计分。");
P1Data["Mj"]="";
P1Data["OutGon"]="";
P1Data["Out"]="";
P1Data["OutPon"]="";
P1Data["OutFlower"]="";
P1Data["Auto"]="";
P1Data["AutoTin"]="";
P1Data["AutoGon"]="";
P1Data["AutoPon"]="";
P1Data["Dump"]="";
P2Data["Mj"]="";
P2Data["OutGon"]="";
P2Data["Out"]="";
P2Data["OutPon"]="";
P2Data["OutFlower"]="";
P2Data["Auto"]="";
P2Data["AutoTin"]="";
P2Data["AutoGon"]="";
P2Data["AutoPon"]="";
P2Data["Dump"]="";
P3Data["Mj"]="";
P3Data["OutGon"]="";
P3Data["Out"]="";
P3Data["OutPon"]="";
P3Data["OutFlower"]="";
P3Data["Auto"]="";
P3Data["AutoTin"]="";
P3Data["AutoGon"]="";
P3Data["AutoPon"]="";
P3Data["Dump"]="";
P4Data["Mj"]="";
P4Data["OutGon"]="";
P4Data["Out"]="";
P4Data["OutPon"]="";
P4Data["OutFlower"]="";
P4Data["Auto"]="";
P4Data["AutoTin"]="";
P4Data["AutoGon"]="";
P4Data["AutoPon"]="";
P4Data["Dump"]="";
end=END;
NO_HU=START;
NO_GON=START;
count=START;
Playing=START;
List="";
NowPlayer=START;
Touched=START;
Auto=START;
Auto_Tin=START;
Auto_Gon=START;
Auto_Pon=START;
Goned=START;
LastDump="";
LastDumpId="";
X = keys(MjE_Data);
for (i=0;i<144;i++){
x = random(sizeof(X));
if (X[x]=="f1"||X[x]=="f2"||X[x]=="f3"||X[x]=="f4"||
X[x]=="f5"||X[x]=="f6"||X[x]=="f7"||X[x]=="f8"){
if (MjE_Data[X[x]] < 1){
MjE_Data[X[x]] = MjE_Data[X[x]] + 1;
List += X[x];
} else i--;
}else{
if (MjE_Data[X[x]] < 4){
MjE_Data[X[x]] = MjE_Data[X[x]] + 1;
List += X[x];
} else i--;
}
}
// for (i=0;i<sizeof(X);i++) printf("%s=%d ",X[i],MjE_Data[X[i]]);
command("say 嗯!!好了可以开始了来吧!!");
if (Count) countstr="[连庄"+chinese_number(Count)+"]";
if (!Times);
else{
if (Count);
else {
str=NowPlayerId[0];
if (Play>1) NowPlayerId[0]=NowPlayerId[1];
if (Play>2) NowPlayerId[1]=NowPlayerId[2];
if (Play>3) NowPlayerId[2]=NowPlayerId[3];
NowPlayerId[Play-1]=str;
}
}
if (Times/Play == 4) Times=0;
if (Times/Play == 3) str=HIW+"北风"+NOR;
if (Times/Play == 2) str=HIY+"西风"+NOR;
if (Times/Play == 1) str=HIR+"南风"+NOR;
if (Times/Play == 0) str=HIG+"东风"+NOR;
i=Times;
i%=Play;
i++;
message_vision("["+str+chinese_number(i)+"]牌局开始:庄家"+HIY+NowPlayerId[0]+HIR+countstr+NOR+"掷出骰子"+
"["+HIG+chinese_number(i=3+random(16))+NOR+ "]点。\n",this_object());
//玩家取牌一次取16只:Q
if (Play>0) P1Data["Mj"]=List[0..31];
if (Play>1) P2Data["Mj"]=List[32..63];
if (Play>2) P3Data["Mj"]=List[64..95];
if (Play>3) P4Data["Mj"]=List[96..127];
count=(Play*2*16);
if (Play>0) check_flower(P1Data);
if (Play>1) check_flower(P2Data);
if (Play>2) check_flower(P3Data);
if (Play>3) check_flower(P4Data);
Playing=1;
message_vision("$N说道:庄家"+HIY+NowPlayerId[0]+NOR+"请开门牌。\n",this_object());
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 Mj="",Mj1="";
int size=strlen(str)+2,a,b;
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;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?