mj.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,663 行 · 第 1/5 页
C
1,663 行
for (i=0; i<26; i++) Mj+=" ";
Mj+="[1;36;46m [0m\n";
Mj+="[1;36;46m [0;36m "+HIW+"中[0m文名字 [1m已[0m玩局数 [1m总[0m战迹 [1m自[0m摸次数 [1m放[0m枪次数[1;36;46m [0m\n";
for (i=0;i<Play;i++){
if (Play==4) winner=get_mjdata(NowPlayerId[i]);
Mj+=sprintf("[1;36;46m [0;36m [1;37m%12s [33m%8d [35m%6d [32m%8d [34m%8d[1;36;46m [0m\n",
NowPlayerId[i],winner[0],winner[1],winner[2],winner[3]);
}
Mj+="[1;36;46m ";
for (i=0; i<26; i++) Mj+=" ";
Mj+="[46m\[0m\n";
if (Play==4) tell_room(environment(this_object()),Mj);
return wash_mj(Play);
}
int do_check_win(string str)
{
int size=strlen(str),i,check;
int t,k,W,T,S,Sp;
string tempW="",tempT="",tempS="",tempB="";
string Special="1w9w1s9s1t9teasowenojofaba";
K=0;
if (size > 33){
if (do_check_Mj(str,"ea")&&do_check_Mj(str,"so")&&do_check_Mj(str,"we")&&do_check_Mj(str,"no")&&
do_check_Mj(str,"jo")&&do_check_Mj(str,"fa")&&do_check_Mj(str,"ba")&&
do_check_Mj(str,"1w")&&do_check_Mj(str,"9w")&&do_check_Mj(str,"1s")&&
do_check_Mj(str,"9s")&&do_check_Mj(str,"1t")&&do_check_Mj(str,"9t")){
//先删掉13只
for (i=0;i<sizeof(Special);i+=2) {
if (do_check_Mj(str,Special[i..i+1])){
str=do_delete_Mj(str,Special[i..i+1],1);
}
}
//查还有没13么中的牌只
for (i=0;i<sizeof(Special);i+=2) {
if (do_check_Mj(str,Special[i..i+1])){
Sp++;
}
}
if (Sp==1){
for (i=0;i<sizeof(Special);i+=2) {
if (do_check_Mj(str,Special[i..i+1])){
str=do_delete_Mj(str,Special[i..i+1],1);
t++;
Tc+="@z";//13么
}
}
}
else if (Sp==2){
for (i=0;i<sizeof(str);i+=2){
if (do_check_Mj(str,str[i..i+1])==2){
str=do_delete_Mj(str,str[i..i+1],1);
Sp=0;
t++;
}
}
if (Sp!=0){
if (str[0..1]+1==str[2..3]){
str=do_delete_Mj(str,str[6..7],1);
t++;
}else{
str=do_delete_Mj(str,str[0..1],1);
t++;
}
}
}
}else{
for (i=0;i<sizeof(str);i+=2){
if (do_check_Mj(str,str[i..i+1])==2) Sp++;
else if (do_check_Mj(str,str[i..i+1])==3) check++;
else if (do_check_Mj(str,str[i..i+1])==4) Sp++;
}
if (Sp==14&&check==3){
for (i=0;i<sizeof(str);i+=2){
if (do_check_Mj(str,str[i..i+1])==2){
str=do_delete_Mj(str,str[i..i+1],2);
i=-2;
}
else if (do_check_Mj(str,str[i..i+1])==4){
str=do_delete_Mj(str,str[i..i+1],4);
i=-2;
}
else if (do_check_Mj(str,str[i..i+1])==3) t++;
}
t=1;
Tc+="@s";//7对子
}
}
}
while(size--){
size--;
if (do_check_num(str[size..size+1],1) < 10) tempW+=str[size..size+1];
else if (do_check_num(str[size..size+1],1) < 19) tempT+=str[size..size+1];
else if (do_check_num(str[size..size+1],1) < 28) tempS+=str[size..size+1];
else tempB+=str[size..size+1];
}
if (tempB!=""){
for (i=0;i<strlen(tempB);i+=2){//
check=do_check_Mj(tempB,tempB[i..i+1]);
if (check==1) return 0;
else if (check==2){
tempB=do_delete_Mj(tempB,tempB[i..i+1],2);
t++;
i=-2;
}else if (check==3){
tempB=do_delete_Mj(tempB,tempB[i..i+1],3);
K++;
i=-2;
}
}//
}
if (tempW!="") W=check_hu(tempW);
if (tempT!="") T=check_hu(tempT);
if (tempS!="") S=check_hu(tempS);
if (K==3) Tc+="@j";//叁暗刻
else if (K==4) Tc+="@p";//四暗刻
else if (K==5) Tc+="@u";//五暗刻
if (W+T+S+t==1) return 1;
return 0;
}
int check_hu(string strW)
{
int i,j,check;
int k,t;
int A,B,C,D,E,F;
for (i=0;i<sizeof(strW);i+=2) {//再把顺子删掉
A=do_check_num(strW[i..i+1],2);
B=do_check_num(strW[i+2..i+3],2);
C=do_check_num(strW[i+4..i+5],2);
D=do_check_num(strW[i+6..i+7],2);
E=do_check_num(strW[i+8..i+9],2);
F=do_check_num(strW[i+10..i+11],2);
if (sizeof(strW) > 11 &&do_check_num(strW[i-2..i-1],2)!=A&&A+1==B&&B==C&&C+1==D&&D==E&&E+1==F
||do_check_num(strW[i-2..i-1],2)!=A&&A==B&&B+1==C&&C==D&&D+1==E&&E==F){
if (A==B&&B+1==C&&C==D&&D+1==E&&E==F){
if (do_check_Mj(Tc,"@G")==1){
Tc=do_delete_Mj(Tc,"@H",1);
Tc+="@H";
}else Tc+="@G";
}
for (j=0;j<6;j++) { //删掉顺子1 22 33 4 && 22 33 44
strW=do_delete_Mj(strW,strW[i..i+1],1);
}
i=-2;
}
else if (A+1==B&&B==C&&C==D&&D==E&&E+1==F){
for (j=0;j<2;j++) { //删掉顺子1 2 2 2 2 3
strW=do_delete_Mj(strW,strW[i..i+1],1);
}
strW=do_delete_Mj(strW,strW[i+6..i+7],1);
i=-2;
}
else if (sizeof(strW) > 9 && A+1==B&&B==C&&C==D&&D+1==E){
//删掉顺子12223中的1 2 3
strW=do_delete_Mj(strW,strW[i..i+1],1);
strW=do_delete_Mj(strW,strW[i..i+1],1);
strW=do_delete_Mj(strW,strW[i+4..i+5],1);
i=-2;
}
else if (sizeof(strW) > 9 && A==B&&B+1==C&&C+1==D&&D+1==E){
for (j=0;j<3;j++) { //删掉顺子11234中的2 3 4
strW=do_delete_Mj(strW,strW[i+4..i+5],1);
}
i=-2;
}
else if (sizeof(strW) > 5 && A+1==B&&B+1==C){
for (j=0;j<3;j++) { //删掉顺子123中的1 2 3
strW=do_delete_Mj(strW,strW[i..i+1],1);
}
i=-2;
}
}
if (sizeof(strW) > 5){
for (i=0;i<sizeof(strW);i+=2) {//再把刻删掉
check=do_check_Mj(strW,strW[i..i+1]);
if (check==3){
K++;
strW=do_delete_Mj(strW,strW[i..i+1],3);
i=-2;
}
}
}
for (i=0;i<sizeof(strW);i+=2) {//再把对删掉
check=do_check_Mj(strW,strW[i..i+1]);
if (check==2){
t++;
strW=do_delete_Mj(strW,strW[i..i+1],2);
i=-2;
}
}
if (strW!="") return 99;
return t;
}
int do_touch(string str,object me)
{
int i,check;
mapping who;
if (!me) me=this_player();
if (check_id(me->query("id"),"player")!="");
else {
command("stare "+me->query("id"));
command("say 这牌局跟你没关系。");
return 1;
}
if (!Playing){
command("say 牌局还没开始你要摸牌去藏起来ㄚ~~");
return 1;
}
tell_object(me,"换谁摸牌:"+NowPlayerId[NowPlayer]+"\n");
if (me->query("id")!=NowPlayerId[NowPlayer]){
command("hammer "+me->query("id"));
command("say 想偷牌!!没那麽容易~~");
return 1;
}
if (Touched){
command("flop "+me->query("id"));
command("say 打牌啦!!");
return 1;
}
NO_HU=0;
NO_GON=0;
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;
if (who["Auto"]=="auto"){
if (str=="AUTO");
else{
write("设定自动听牌後、不可自己摸牌。\n");
return 1;
}
}
Touched=1;
str=List[count..count+1];
count+=2;
tell_room(environment(this_object()),me->name()+"摸了一张牌。\n",me);
tell_object(me,"你摸了一张牌。\n");
tell_object(me,"你摸到一张"+do_check_num(str,0)+"\n");
if (who["Auto"]=="auto"){
if (do_check_num(str,1) > 34){
for (i=0;i<1;i++){
who["OutFlower"]+=str;
HU_F=1;
tell_room(environment(this_object()),me->name()+"说道:"+HIB+"花牌"+NOR+"补花!!。\n\n"+me->name()+"往後面补了一张牌。\n",me);
tell_object(me,"你说道:"+HIB+"花牌"+NOR+"补花!!。\n\n你往後面补了一张牌。\n");
str=List[end..end+1];
end-=2;
tell_object(me,"你摸到了一张"+do_check_num(str,0)+"\n");
if (do_check_num(str,1) > 34) i--;
}
}
check=do_check_Mj(who["AutoTin"],str);
if (check!=0){
who["Mj"]+=str;
who["Mj"]=sort_data(who["Mj"]);
return do_win(str,me);
}
call_out("do_dump",0,str,me);
}
who["Mj"]+=str;
check_flower(who);
i=0;
if (who["Show"]=="代码") i=3;
if (who["Show"]=="color") i=5;
tell_object(me,show_mj(who["Mj"],i));
return 1;
}
int do_pon(string str,object me)
{
int i;
mapping who;
if (!me) me=this_player();
if (check_id(me->query("id"),"player")!="");
else {
command("stare "+me->query("id"));
command("say 这牌局跟你没关系。");
return 1;
}
if (!Playing){
command("die "+me->query("id"));
command("say 牌局还没开始!!碰你的头啦!!");
return 1;
}
if (Touched){
command("hammer "+me->query("id"));
command("say 别人没打牌你怎麽碰。");
return 1;
}
if (LastDumpId==me->query("id")){
command("stare "+me->query("id"));
command("say 那张牌是你自己打的!。");
return 1;
}
if (!str) str=LastDump;
else if (str!=LastDump) return notify_fail("那张"+do_check_num(str,0)+"已经过期了。\n");
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;
if (who["Auto"]=="auto") return 1;
i=do_check_Mj(who["Mj"],str);
if (i==0) return notify_fail("你没"+do_check_num(str,0)+"这张牌要怎麽碰。\n");
if (i < 2) return notify_fail("你手中要有两张"+do_check_num(str,0)+"才能碰。\n");
message_vision("\n$N大叫:"+do_check_num(str,0)+"~"+HIW+"石并~~~"+NOR+"\n\n",me);
for (i=0;i<Play;i++) {
if (NowPlayerId[NowPlayer]==me->query("id")) break;
NowPlayer++;
NowPlayer%=Play;
}
for (i=0;i<3;i++) who["OutPon"]+=str;
who["Mj"]=do_delete_Mj(who["Mj"],str,2);
who["AutoPon"]=do_delete_Mj(who["AutoPon"],str,1);
NO_HU=1;
NO_GON=1;
Touched=1;
i=0;
if (who["Show"]=="代码") i=3;
if (who["Show"]=="color") i=5;
tell_object(me,show_mj(who["Mj"],i));
return delete_last_dump(who["Id"]);
}
int do_restart(string str)
{
object me=this_player();
if (me->query("id")=="guest") return 0;
if (str!="mj"){
if (check_id(me->query("id"),"player")!="");
else {
command("stare "+me->query("id"));
command("say 这牌局跟你没关系。");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?