duroom.c

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

C
687
字号
                max_bet  =  100*current_limit;  //max_bet  in  silver.                message_vision("$N手一挥大声叫道:开盘!现在开始下注!\n",  me);                message_vision("$N顿了一下:赌注别超过"+chinese_number(current_limit)+"两黄金。\n",  me);                total_bet  =  0;                game_status  =  2;  //enter  the  bet  process.                round++;  //we  increase  this  number  to  indicate  a  new  round  of  game.                remove_call_out("check_finish");                call_out("check_finish",  600,  round);                  //a  game  must  be  finished  within  10  minutes.                  return  1;        }        else        {//not  the  time  to  开盘.                return  notify_fail("现在还不能开盘。\n");        }}void  check_start(int  previous_round){        ask_for_zhuang  =  0;//so  after  this,  can  ask  again...        if(previous_round  !=  round)  return;  //it  means  already  started.          //now  if  still  in  this  round.        if(  game_status  ==  3)  return;  //game  in  processing,  can  do  nothing  here.        tell_room(this_object(),  "庄家迟迟不开盘,只好换庄了。\n");        zhuang_id  =  "no  zhuang";        game_status  =  0;        total_bet  =  0;}void  check_finish(int  previous_round){        int  i;        object  *inv  =  all_inventory(this_object());        if(previous_round  !=  round)  return;  //it  means  already  finished.                //now  if  still  in  this  round.        if(  game_status  ==  3)  return;  //game  in  processing,  can  do  nothing  here.        //here  we  need  cancel  the  game.        //give  money  back  to  all  players  except  zhuang-jia,  cuz  this  is  his/her  fault.        tell_room(this_object(),  "这一局迟迟未能完成,只好取消重来了。\n");        for(i=0;  i<sizeof(inv);  i++)        {                if(  inv[i]->query_temp("shaizi/bet_amount")  >  0  &&  inv[i]->query("id")  !=  zhuang_id  )                {                        total_bet  -=    inv[i]->query_temp("shaizi/bet_amount");                        if(total_bet  >=  0)                        {                                pay_player(inv[i],  inv[i]->query_temp("shaizi/bet_amount"));                                message_vision("$N起身把放在桌子上的赌注拿了回来。\n",  inv[i]);                        }                        else                        {                                message_vision("糟糕!有人在这里偷钱!$N的钱没了。\n",  inv[i]);                        }                }                if(  inv[i]->query_temp("shaizi")  )  inv[i]->delete_temp("shaizi");        }        zhuang_id  =  "no  zhuang";        game_status  =  0;        total_bet  =  0;}void  game_process(){        int  i,  j;        object  *inv  =  all_inventory(this_object());                j=0;        for(i=0;  i<sizeof(inv);  i++)        {                if(  (int)inv[i]->query_temp("shaizi/bet_amount")  >  0  )                {                        j++;                        call_out("show_shaizi",  j*4,  inv[i]);                }        }        call_out("game_result",  (j+2)*4);      }void  show_shaizi(object  me){        string  point_msg;        string  *sha_msg  =  ({                "瞪着一对红眼,大喝一声:杀!手中的两粒骰子往桌子上一摔!\n",                "往手上吹了口气,两粒骰子轻轻一抛...\n",                "微微一笑,两粒骰子往桌子上一滚...\n",                "望空作了个揖:菩萨保佑!两粒骰子战战噤噤地桌上一投...\n",                "拿着两粒骰子,抖足精神:娶老婆生孩子在此一举!\n",                "衣袖一卷,大声叫道:看我的!\n",                "咬牙切齿,两粒骰子往桌子上狠狠地一砸...\n",                "满头大汗,自言自语道:六对,六对,该上我家了吧...\n",                "潇洒地作了个四方揖:这把该我赢,看好了...\n",                });        string  *shaizi_msg  =  ({"┌───┐\n"+"│   │\n"+"│   │\n"+"│   │\n"+"└───┘\n",  "┌───┐\n"+"│   │\n"+"│ ● │\n"+"│   │\n"+"└───┘\n",  "┌───┐\n"+"│   │\n"+"│● ●│\n"+"│   │\n"+"└───┘\n",  "┌───┐\n"+"│●  │\n"+"│ ● │\n"+"│  ●│\n"+"└───┘\n",  "┌───┐\n"+"│● ●│\n"+"│   │\n"+"│● ●│\n"+"└───┘\n",  "┌───┐\n"+"│● ●│\n"+"│ ● │\n"+"│● ●│\n"+"└───┘\n",  "┌───┐\n"+"│● ●│\n"+"│● ●│\n"+"│● ●│\n"+"└───┘\n",                });        if(environment(me)  ==  this_object()  ||  me->query_temp("shaizi/bet_amount")  >  0)        {                me->set_temp("shaizi/point1",  1+random(6));//first  shaizi.                me->set_temp("shaizi/point2",  1+random(6));//second  shaizi.                if(  me->query_temp("shaizi/point1")  ==  me->query_temp("shaizi/point2")  &&  me->query_temp("shaizi/point2")  !=  0  )                {                        me->set_temp("shaizi/point",    100+me->query_temp("shaizi/point2"));                        point_msg  =  chinese_number(me->query_temp("shaizi/point2"))+"对";                }                else                {                        me->set_temp("shaizi/point",    (me->query_temp("shaizi/point1")  +me->query_temp("shaizi/point2")  )%10);                        point_msg  =  chinese_number(me->query_temp("shaizi/point"))+"点";                        if(me->query_temp("shaizi/point")  ==  0)                                point_msg  =  "蹩十";                }                               tell_room  (this_object(),  me->query("name")+sha_msg[random(sizeof(sha_msg))]);                tell_room  (this_object(),  shaizi_msg[(int)me->query_temp("shaizi/point1")]);                tell_room  (this_object(),  shaizi_msg[(int)me->query_temp("shaizi/point2")]);                tell_room  (this_object(),  "众人齐声叫道:"+point_msg+"!\n");        }        }void  game_result(){        object  zhuang;        int  i,  zhuang_point;        object  *inv  =  all_inventory(this_object());        if(objectp(zhuang=present(zhuang_id,  this_object()))  &&  living(zhuang)  )        {//if  the  zhuang-jia  is  here.                tell_room(this_object(),  zhuang->query("name")+"大声宣布:结帐!\n");                  zhuang_point  =  zhuang->query_temp("shaizi/point");        }        else          {                tell_room(this_object(),  "庄家不知道跑到哪里去了。大家都赢了!\n");                    zhuang_point  =  -1;                zhuang_id  =  "no  zhuang";        }                       for(i=0;  i<sizeof(inv);  i++)        {                if(  (int)inv[i]->query_temp("shaizi/bet_amount")  >  0  &&    inv[i]->query("id")  !=  zhuang_id)                {                        if(  (int)inv[i]->query_temp("shaizi/point")  >  zhuang_point  )                        {//this  player  won.                                tell_room(this_object(),  inv[i]->query("name")+"赢了"+chinese_number(inv[i]->query_temp("shaizi/bet_amount"))+"两银子。\n");                                total_bet  -=  2*inv[i]->query_temp("shaizi/bet_amount");                                if(total_bet  >=  0)                                {                                          pay_player(inv[i],  2*inv[i]->query_temp("shaizi/bet_amount"));                                }                                else                                {                                        tell_room(this_object(),  "糟糕!有人在这里偷钱!"+inv[i]->query("name")+"赢的钱拿不到了。\n");                                }                        }                        else                        {//this  player  lost.                                tell_room(this_object(),  inv[i]->query("name")+"输了"+chinese_number(inv[i]->query_temp("shaizi/bet_amount"))+"两银子。\n");                        }                }        }        //now  consider  the  zhuang-jia.        if(zhuang  &&  total_bet  >  0)        {                tell_room(this_object(),  "剩下的"+chinese_number(total_bet)+"两银子都是庄家"+zhuang->query("name")+"的了。\n");                pay_player(zhuang,  total_bet);                total_bet  =  0;        }        //finally,  clear  everything  for  players.        for(i=0;  i<sizeof(inv);  i++)        {                if(  inv[i]->query_temp("shaizi")  )  inv[i]->delete_temp("shaizi");        }        game_status  =  0;        total_bet  =  0;        remove_call_out("check_finish");}void  pay_player(object  me,  int  total){        object  pay_cash,  pay_gold,  pay_silver;        if(total/1000  >  0)        {                pay_cash  =  new("/clone/money/1000-cash");                pay_cash->set_amount  (total/1000);                total  -=  1000*pay_cash->query_amount();                pay_cash->move(me);        }        if(total/100  >  0)        {                pay_gold  =  new("/clone/money/gold");                pay_gold->set_amount(total/100);                total  -=  100*pay_gold->query_amount();                pay_gold->move(me);        }        pay_silver  =  new("/clone/money/silver");        pay_silver->set_amount(total);        if(total  >  0)        {                pay_silver  =  new("/clone/money/silver");                pay_silver->set_amount(total);                total  -=  pay_silver->query_amount();                pay_silver->move(me);        }}int  pay_out(object  me,  int  total){//player  pay  money  out,  in  unit  of  silver.  //if  sucessful  return  1,  else  return  0.  //what  I  did  here  is  check  all  the  money  in  silver  the  player  has,  //then  destroy  all  his  cash,  gold,  silver...then  pay  him  back  the  difference.                int  diff;        object  cash,  gold,  silver;        diff  =  check_silver(me)  -  total;            if(  diff  <  0  )  return  0;          //the  player  does  not  have  enough  money.        //now  destroy  this  players  cash,  gold  and  silver.        cash  =  present("1000-cash_money",  me);        gold  =  present("gold_money",  me);        silver  =  present("silver_money",  me);        if(  cash  )  destruct(cash);        if(  gold  )  destruct(gold);        if(silver)  destruct(silver);        //now  pay  his  back  the  difference.         if(  diff  >  0  )  pay_player(me,  diff);        return  1;              }int  check_silver(object  me){//this  function  check  the  money  in  silver  a  player  has,        object  cash,  gold,  silver;        int  total_silver;                cash  =  present("1000-cash_money",  me);        gold  =  present("gold_money",  me);        silver  =  present("silver_money",  me);        total_silver  =  0;        if(  cash  )  total_silver  +=  1000*(cash->query_amount());        if(  gold  )  total_silver  +=  100*(gold->query_amount());        if(silver)  total_silver  +=  (silver->query_amount());         return  total_silver;}int  do_look(string  arg){        object  zhuang;        object  *inv  =  all_inventory(this_object());        int  i;        object  me  =  this_player();        if(arg  ==  "table")        {                if(total_bet  >  0)                {                        write("现在的赌注总共是"+total_bet+"两银子。\n");                        for(i=0;  i<sizeof(inv);  i++)                        {                                if(  inv[i]->query_temp("shaizi/bet_amount")  >  0  )                                        write(inv[i]->query("name")+":"+inv[i]->query_temp("shaizi/bet_amount")+"两。\n");                        }                }                else  write("现在还没有人下注。\n");                if(zhuang_id  ==  "no  zhuang")                        write("目前还没有庄家。\n");                else                {                        if(objectp(zhuang=present(zhuang_id,  this_object()))  &&  living(zhuang)  )                        {//if  the  zhuang-jia  is  here.                                write("目前的庄家是"+zhuang->query("name")+"("+zhuang->query("id")+")。\n");                            }                        else                          {                                write("庄家不知道跑到哪里去了。\n");                                zhuang_id  =  "no  zhuang";                        }                               }                return  1;        }        return  0;      }

⌨️ 快捷键说明

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