bobing.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 1,117 行 · 第 1/2 页

C
1,117
字号
//bobing.c -搏饼屋#include <room.h>#include <ansi.h>inherit ROOM;int Maxperson,minperson;int allow_leave,allow_start;int Max1,Max2,Max3,Max4,Max5,Max6;int Realmode;object* member,leader,dutang1,dutang2,winner;string roomname;int add_member(object ob);int delete_member(object ob);int query_member(object ob);void do_yao();string getit(object,int,int,string);string checkcolor(int);int countit( int,int,int,int,int,int,int);int pass_token(int,int);int startreal();int stopreal();int givegift();int qianbing(object,int);void create(){    Maxperson=10;    minperson=2;    allow_leave=1;    allow_start=0;    Max1=32;//一秀的个数    Max2=16;//二举的个数    Max3=8; //四进的个数    Max4=4; //三红的个数    Max5=2; //对堂的个数    Max6=1; //状元的个数    Realmode=0;    roomname="搏饼屋";    set("no_fight","1");    set("no_magic","1");    set("no_steal","1");    set("no_beg","1");    set("short","搏饼屋");    set("long", @LONG这是一间古朴典雅的的搏饼屋。房间的装修充满了盛明时候的风味,满屋子的琳琅玉石衬着柔和的光线,洋溢着温馨的气氛,真是个温暖而热闹的地方。房间的四周点着一溜松明子,中间一张楠木桌,大家都席地而坐 (sit),看着桌面上一个大海碗,碗里面滴溜溜转着六颗玉制的骰子!南边的墙上贴着一张发黄的陈纸(paper)。LONG);    set("item_desc", ([        "paper" : "介绍和命令请 help bobing。\n",    ]));    set("objects",([        __DIR__"npc/dog":1,    ]));    set("exits", ([        "north"  :  __DIR__"duchang",    ]));    set("no_fight",1);    set("no_npc",1);    set("no_clean_up",1);    setup();}void init(){    add_action("fsit","sit");    add_action("fleave","leave");    add_action("fleader","leader");    add_action("fview","view");    add_action("fyao","throw");    add_action("startreal","start");    add_action("stopreal","stop");}int fleader(string id){    int i;    object ob;    ob=this_player();    if (wizardp(ob) && (ob->query("id") == "java" || ob->query("id") == "solomon"))    {        if (arrayp(member))        {            for (i=0;i<sizeof(member);i++)            {                if (member[i]->query("id")==id)                {                    leader=member[i];                    tell_room(environment(leader),"现在轮到"+                              leader->query("name")+"掷了。\n");                    return 1;                }            }            notify_fail("这个人不在这里搏饼\n");        }        else            notify_fail("没人在这搏饼\n");    }    else        return 0;}int startreal(){    int i;    object ob;    object* pl;    ob=this_player();//    if (wizardp(ob))    if (wizardp(ob) && (ob->query("id") == "java" || ob->query("id") == "solomon"))    {        Realmode=1;        pl=users();        message("vision",HIY+ob->query("name")+"宣布:"+roomname+                "正式开放,奖品立即兑现!\n"NOR,pl);        if (arrayp(member))        {            for (i=0;i<sizeof(member);i++)            {                member[i]->set_temp("bobing/g1",0);                member[i]->set_temp("bobing/g2",0);                member[i]->set_temp("bobing/g3",0);                member[i]->set_temp("bobing/g4",0);                member[i]->set_temp("bobing/g5",0);                member[i]->set_temp("bobing/g6",0);                member[i]->set_temp("bobing/dest","");                member[i]->set_temp("bobing/maxaward",0);                member[i]->set_temp("bobing/maxscore",0);            }        }        Max1=32;//一秀的个数        Max2=16;//二举的个数        Max3=8; //四进的个数        Max4=4; //三红的个数        Max5=2; //对堂的个数        Max6=1; //状元的个数        return 1;    }    return 0;}int stopreal(){    int i;    object ob;    object* pl;    ob=this_player();//    if (wizardp(ob))    if (wizardp(ob) && (ob->query("id") == "java" || ob->query("id") == "solomon"))    {        pl=users();        Max1=32;//一秀的个数        Max2=16;//二举的个数        Max3=8; //四进的个数        Max4=4; //三红的个数        Max5=2; //对堂的个数        Max6=1; //状元的个数        if (Realmode==1)        {            message("vision",                    HIY+ob->query("name")+"宣布:"+roomname+                    "兑奖已结束,下次努力了!\n"NOR,pl);            givegift();  //分饼            Realmode=0;            if (arrayp(member))            {                for (i=0;i<sizeof(member);i++)                {                    member[i]->set_temp("bobing/g1",0);                    member[i]->set_temp("bobing/g2",0);                    member[i]->set_temp("bobing/g3",0);                    member[i]->set_temp("bobing/g4",0);                    member[i]->set_temp("bobing/g5",0);                    member[i]->set_temp("bobing/g6",0);                    member[i]->set_temp("bobing/dest","");                    member[i]->set_temp("bobing/maxaward",0);                    member[i]->set_temp("bobing/maxscore",0);                }            }        }        return 1;    }    return 0;}int givegift(){    object ob;    int i;    int j;    int num;    if (!arrayp(member)||sizeof(member)==0)        notify_fail("没人在这搏饼,就别分啦。\n");    else    {        for (i=0;i<sizeof(member);i++)        {            num=member[i]->query_temp("bobing/g1");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing1");                    ob->set_amount(1);                    ob->move(member[i]);                }            }            num=member[i]->query_temp("bobing/g2");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing2");                    ob->set_amount(num);                    ob->move(member[i]);                }            }            num=member[i]->query_temp("bobing/g3");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing3");                    ob->set_amount(num);                    ob->move(member[i]);                }            }            num=member[i]->query_temp("bobing/g4");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing4");                    ob->set_amount(num);                    ob->move(member[i]);                }            }            num=member[i]->query_temp("bobing/g5");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing5");                    ob->set_amount(num);                    ob->move(member[i]);                }            }            num=member[i]->query_temp("bobing/g6");            if (num>0)            {                for (j=0;j<num;j++)                {                    ob=new(__DIR__"obj/bing6");                    ob->set_amount(num);                    ob->move(member[i]);                }            }//            member[i]->set("marks/bobing",1);        }        return 1;    }}int pass_token(int index,int passmode){    int me,i,passok;    me=index-1;    allow_leave=0;    passok=0;    if (passmode==0)    {        for (i=0;i<sizeof(member)-1;i++)        {            index=index+i;            if (index>=sizeof(member))                index=index-sizeof(member);            if (interactive(member[index]))            {                passok=1;                leader=member[index];                break;            }        }        if ((!passok)||(sizeof(member)<minperson))        {            allow_start=0;            tell_room(environment(leader),"陪你玩的人还不够,等人来了吧。\n");        }        else            tell_room(environment(leader),"现在轮到"+                      leader->query("name")+"掷了。\n");    }    if (passmode==1)    {        if (index>=sizeof(member))            index=index-sizeof(member);        passok=1;        leader=member[index];    }    allow_leave=1;}int fyao(){    object ob;    int i,j,k;    ob=this_player();    i=query_member(ob);    if (allow_start )    {        if (i>0)        {            if(ob==leader)            {                do_yao();                pass_token(i,0);                return 1;            }            else                notify_fail(HIC"还没轮到你呢,瞎嚷嚷个啥劲呢!\n"NOR);        }        else notify_fail(HIC"你要先坐下来才能和大家一起搏饼。\n"NOR);    }    else        notify_fail(HIY"现在人还不够,悠着点吧。\n"NOR);}int fview(){    object ob;    int i;    ob=this_player();    if (!arrayp(member)||sizeof(member)==0)        notify_fail("没人在这搏饼。\n");    else    {        printf("玩家          最高奖        一秀  二举  四进  三红  对堂  状元\n");        printf("==============================================================\n");        for (i=0;i<sizeof(member);i++)        {            printf("%-14s%-12s%6d%6d%6d%6d%6d%6d\n",                   member[i]->query("name"),                   member[i]->query_temp("bobing/dest"),                   member[i]->query_temp("bobing/g1"),                   member[i]->query_temp("bobing/g2"),                   member[i]->query_temp("bobing/g3"),                   member[i]->query_temp("bobing/g4"),                   member[i]->query_temp("bobing/g5"),                   member[i]->query_temp("bobing/g6"),);        }        printf("==============================================================\n");        printf("目前还有一秀饼%i块,二举饼%i块,四进饼%i块,三红饼%i块,对堂饼%i块\n",                Max1,Max2,Max3,Max4,Max5);        if (objectp(winner))            printf("现在的状元是由%s保持..\n",winner->query("name"));        if (objectp(leader))            printf("现在该轮到%s掷了\n",leader->query("name"));        return 1;    }}int fleave(string id){    int i;    int num;    object ob;    object nil;    ob=this_player();    if (wizardp(ob) && (ob->query("id") == "java" || ob->query("id") == "solomon"))    {        if (arrayp(member))        {            for (i=0;i<sizeof(member);i++)            {                if (member[i]->query("id")==id)                    ob=member[i];            }            if (i==sizeof(member))                notify_fail("这个人不在这里搏饼\n");        }        else            notify_fail("没人在这搏饼\n");    }    num=query_member(ob);    if (num)    {        if (leader==ob)        {            if (num==sizeof(member))                num=1;            else                num++;            leader=member[num-1];        }    }    else        return 1;    if (sizeof(member)>minperson)        message_vision(HIG"$N离开了大家少了一个伙伴了!\n"NOR,ob);    else        message_vision(HIG"$N离开了大家玩不成了!\n"NOR,ob);    Maxperson++;    if (ob==winner)    {        winner->set_temp("bobing/g6",0);        winner=nil;    }    delete_member(ob);    return 1;}int fsit(){    object ob;    ob=this_player();    if ((int)ob->query("mud_age") <18000)    {            tell_object(ob,HIY"你年纪太小了,等不会是dummy吧?\n"NOR);            return 1;    }//    if ((int)ob->query("marks/bobing"))//    {//            tell_object(ob,HIY"今天你搏过了,等下次机会吧。\n"NOR);//            return 1;//    }    if (!(query_member(ob)))    {        if (Maxperson>0)        {            message_vision(HIC"$N坐下来和大家一起搏饼。\n"NOR,ob);            Maxperson--;            add_member(ob);            ob->set_temp("bobing/dest","");            ob->set_temp("bobing/g1",0);            ob->set_temp("bobing/g2",0);            ob->set_temp("bobing/g3",0);            ob->set_temp("bobing/g4",0);            ob->set_temp("bobing/g5",0);            ob->set_temp("bobing/g6",0);            ob->set_temp("bobing/maxscore",0);            ob->set_temp("bobing/maxaward",0);        }        else            tell_object(ob,HIY"这一桌满了,你去别处看看吧。\n"NOR);    }    return 1;}int valid_leave(object me, string dir){    if (query_member(me))        return notify_fail(HIB"你要先离开搏饼桌才能离开这里。\n"NOR);    return 1;}int delete_member(object ob){    int i;    if (!arrayp(member))        return 0;    for (i=0;i<sizeof(member);i++)    {        if (member[i]==ob)        {            member-=({ob});            Max1+=ob->query_temp("bobing/g1");            Max2+=ob->query_temp("bobing/g2");            Max3+=ob->query_temp("bobing/g3");            Max4+=ob->query_temp("bobing/g4");            Max5+=ob->query_temp("bobing/g5");            Max6+=ob->query_temp("bobing/g6");            ob->delete_temp("bobing");            break;        }    }}int add_member(object ob){    if (!arrayp(member))    {        member=({ob});        leader=ob;    }    else    {        member+=({ob});        if (sizeof(member)>=minperson)        {            allow_start=1;            tell_room(environment(leader),"太好了,人凑够了,可以开始玩了。\n");            tell_room(environment(leader),leader->query("name")+"先掷吧。\n");        }    }    return 1;}int query_member(object ob){    int i;    if (!arrayp(member))        return 0;    for (i=0;i<sizeof(member);i++)    {        if (member[i]==ob)        {            return i+1;        }    }    return 0;}void do_yao(){    int t1,s1,s2,s3,s4,s5,s6,c1,c2,c3,c4,c5,c6,getaward,getscore;    object ob;    string result,dest;    ob=this_player();    getscore=0;    dest="";// 加大对堂概率    t1=random(50)+1;    if (t1==25)    {        s1=5;        s2=2;        s3=6;        s4=4;        s5=3;        s6=1;    }    else    {        s1=random(5)+1;        s2=random(5)+1;        s3=random(5)+1;        s4=random(5)+1;        s5=random(5)+1;        s6=random(5)+1;    }//按点数统计    c1=countit(s1,s2,s3,s4,s5,s6,1);//一的个数    c2=countit(s1,s2,s3,s4,s5,s6,2);//二的个数    c3=countit(s1,s2,s3,s4,s5,s6,3);//三的个数    c4=countit(s1,s2,s3,s4,s5,s6,4);//四的个数    c5=countit(s1,s2,s3,s4,s5,s6,5);//五的个数    c6=countit(s1,s2,s3,s4,s5,s6,6);//六的个数    if (c1==6||c2==6||c3==6||c4==6||c5==6||c6==6)    {        getaward=6;        if (c1==6)        {            dest="六  黑(一)";            getscore=1201;

⌨️ 快捷键说明

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