1mj.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,606 行 · 第 1/5 页
C
1,606 行
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 (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(NowPlayerId[NowPlayer]==me->query("id") && Touched==1){
do_dump( who["Mj"][0..1], me);
return 1;
}
if (Touched){
command("flop "+me->query("id"));
command("say 打牌啦!!");
return 1;
}
if (PAUSE){
command("flop "+me->query("id"));
command("say 等等,有人在看牌。!!");
return 1;
}
NO_HU=0;
NO_GON=0;
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()+"摸了一张牌。",me);
if(userp(me)) tell_object(me,"你摸了一张牌。");
//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);
}
do_dump(str,me);
}
who["Mj"]=str+who["Mj"];
check_flower(who);
i=0;
if (who["Show"]=="代码") i=3;
if (who["Show"]=="color") i=5;
if(userp(me)) tell_object(me,"还有"+chinese_number((end-count-16-Goned)/2)+"只牌就流局了。\n"+show_mj(who["Mj"],i));
if( !userp(me) ){
who["Mj"]=sort_data(who["Mj"]);
dump_what( me ); //如果摸牌者是电脑,调用函数计算出什么牌。
}
return 1;
}
int do_pon(string str,object me)
{
int i;
mapping who, lastwho;
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);
remove_call_out("do_touch");//不能让NPC摸牌(自从了next_data函数之后,这句好象没有用咯。:P)
PAUSE = 0; //取消暂停
if(userp(me)) who["Pause"]="";//取消玩家的暂停标记
destop+=str; //把碰了的牌
destop+=str; //摆上桌面
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;
//把碰的牌从出牌者面前拿掉!
lastwho = next_data( LastDumpId, 0, "data");
lastwho["Dump"] = do_delete_Mj(lastwho["Dump"], str, 1);
//再显示所有的牌,这样可以更好的把握!! 还是不要吧!
/*for(i=0; i<4; i++)
tell_room(environment(this_object()),next_data(LastDumpId , i, "id")+
"前面的牌是:\n"+show_mj(next_data(LastDumpId, i, "allout"), 5));*/
if(userp(me)) tell_object(me, "以下是你的牌:\n");
i=0;
if (who["Show"]=="代码") i=3;
if (who["Show"]=="color") i=5;
tell_object(me,show_mj(who["Out"]+who["OutPon"],i));
tell_object(me,show_mj(who["Mj"],i));
//如果碰的是电脑,自动调用出牌函数
if( !userp(me) ) call_out( "dump_what", DELAY, me );
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 这牌局跟你没关系。");
return 1;
}
}
message_vision("$N把牌局重新设定。\n",me);
message_vision("$N说道:牌局重新设定请用"+HIR+" addin "+NOR+"加入牌局。\n",this_object());
NowPlayerId[0]="east com";
NowPlayerId[1]="south com";
NowPlayerId[2]="west com";
NowPlayerId[3]="";
P1Data["Id"]="east com";
P2Data["Id"]="south com";
P3Data["Id"]="west com";
P4Data["Id"]="";
P1Data["Pause"]="";
P2Data["Pause"]="";
P3Data["Pause"]="";
P4Data["Pause"]="";
Count=0;
LookP ="";
Play=START;
Times=START;
end=END;
count=START;
Playing=START;
PAUSE = 0;
return 1;
}
int wash_mj(int amount)
{
int i,x;
string str,countstr="";
mapping who;
object ob;
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 玩家不足四人所以不计分。");
for(i=0; i<4; i++){
who = next_data( P1Data["id"], i, "data");
who["Mj"]="";
who["OutGon"]="";
who["Out"]="";
who["OutPon"]="";
who["OutFlower"]="";
who["Auto"]="";
who["AutoTin"]="";
who["AutoGon"]="";
who["AutoPon"]="";
who["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"){
List += X[x];
X -= ({X[x]});
}
else{
MjE_Data[X[x]] = MjE_Data[X[x]] + 1;
List += X[x];
if(MjE_Data[X[x]] == 4) X -= ({X[x]});
}
}
// for (i=0;i<sizeof(X);i++) printf("%s=%d ",X[i],MjE_Data[X[i]]);
PAUSE = 0;
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;
TIMES = str;
i=Times;
i%=Play;
i++;
message_vision("["+str+chinese_number(i)+"]牌局开始:庄家"+HIY+NowPlayerId[0]+HIR+countstr+NOR+"掷出骰子"+
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?