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 + -
显示快捷键?