gamble_room.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 207 行
C
207 行
//Cracked by Kafei// group bwdh/gamble_room
// Apache 09/29/98
#include <ansi.h>
inherit ROOM;
string long_desc();
string look_paizi();
void create() {
set("short", "赌场");
set("long", (: long_desc :) );
set("exits", ([
"west" : __DIR__"square",
]));
set("item_desc", ([
"paizi" : (: look_paizi :),
]));
set("valid_startroom", 1);
setup();
}
void init() {
object ob = this_object();
if ( !ob->query("status") ) ob->set("status", 0); // 1 for bet -1 for collect
if ( !ob->query("round") ) ob->set("round", 0); // round number for current bet
if ( !ob->query("east") ) ob->set("east", 0); // east bet ratio: n for n ~ 1, -n for 1 ~ n
if ( !ob->query("west") ) ob->set("west", 0); // west bet ratio:
if ( !ob->query("win") ) ob->set("win", "none"); // winning side
add_action("do_bet", "bet");
add_action("do_collect", "collect");
}
string look_paizi() {
object ob = this_object();
string msg;
int i;
if ( ob->query("status") == 1) {
msg = HIY"\n" + sprintf(" 第 %2d 局 压注中\n --------", ob->query("round")) + "\n"NOR;
i = to_int(ob->query("east"));
if ( i > 0 )
msg = msg + HIR" 东队 " + chinese_number(i) + "赔一\n"NOR;
else if (i < 0)
msg = msg + HIR" 东队 一赔" + chinese_number(-i) + "\n"NOR;
i = to_int(ob->query("west"));
if ( i > 0 )
msg = msg + HIR" 西队 " + chinese_number(i) + "赔一\n"NOR;
else if (i < 0)
msg = msg + HIR" 西队 一赔" + chinese_number(-i) + "\n"NOR;
}
else if ( ob->query("status") == -1) {
msg = HIY"\n" + sprintf(" 第 %2d 局 赔付中\n --------", ob->query("round")) + "\n"NOR;
if ( ob->query("win") == "east" )
msg = msg + HIR" 东队获胜\n"NOR;
else if (ob->query("win") == "west" )
msg = msg + HIR" 西队获胜\n"NOR;
else
msg = msg + HIW" 本局无赢家\n"NOR;
return msg;
}
else
msg = HIG" 暂无赌局\n"NOR;
return msg;
}
string long_desc() {
string msg;
object ob = this_object();
if (ob->query("status") == 1 )
msg = "赌场内人山人海,乌烟瘴气。大家纷纷下注,有人口沫横飞地\n发表意见,有人两眼发直,喃喃自语。\n";
else if (ob->query("status") == -1 )
msg = "赌场现在是赔付时间,赢家喜气洋洋,得意地数着银子,输家\n早已急红了眼,面红耳赤。\n";
else
msg = "赌场现在没有营业,所以冷冷清清的。\n";
msg = msg + "赌场正中挂者一个牌子(paizi)。\n";
return msg;
}
int do_bet(string arg) {
object ob = this_object();
object me = this_player();
object money;
int i, balance;
string side;
if ( ob->query("status") != 1 )
return notify_fail("现在不是压注时间。\n");
if (sscanf(arg, "%s %d", side, i) != 2)
return notify_fail("什么?\n");
if ( ((side != "east") && (side != "west")) )
return notify_fail("什么?\n");
if ( i < 0 )
return notify_fail("限额在一到一百两白银。\n");
money = present("silver_money", me);
if( !money )
return notify_fail("你身上没有这种货币。\n");
if( (int)money->query_amount() < i)
return notify_fail("你身上没有那么多白银。\n");
money->set_amount((int)money->query_amount() - i);
money->move(me);
switch(side) {
case "east" : if ( me->query("bwdh_gamble/east_round") == ob->query("round") )
balance = me->query("bwdh_gamble/east_bet");
else
balance = 0;
me->set("bwdh_gamble/east_round", ob->query("round"));
if ( balance == 0 ) {
me->set("bwdh_gamble/east_bet", i);
write("你押了" + chinese_number(i) + "两白银在东队。\n");
return 1;
}
else {
me->set("bwdh_gamble/east_bet", i + balance);
write("你又押了" + chinese_number(i) + "两白银在东队。\n");
return 1;
}
break;
case "west" : if ( me->query("bwdh_gamble/west_round") == ob->query("round") )
balance = me->query("bwdh_gamble/west_bet");
else
balance = 0;
me->set("bwdh_gamble/west_round", ob->query("round"));
if ( balance == 0 ) {
me->set("bwdh_gamble/west_bet", i);
write("你押了" + chinese_number(i) + "两白银在东队。\n");
return 1;
}
else {
me->set("bwdh_gamble/west_bet", i + balance);
write("你又押了" + chinese_number(i) + "两白银在东队。\n");
return 1;
}
break;
default : break;
}
return 1;
}
int do_collect() {
object ob = this_object(), me = this_player(), money;
int bet, ratio;
string win_side;
if ( ob->query("status") != -1 )
return notify_fail("现在不是赔付时间。\n");
win_side = ob->query("win");
if ( win_side != "east" && win_side != "west" )
return notify_fail("本局无赢家。\n");
switch(win_side) {
case "east" : if ( me->query("bwdh_gamble/east_round") == ob->query("round") ) {
bet = me->query("bwdh_gamble/east_bet");
ratio = ob->query("east");
}
else {
write("赌场伙计对你“哼”的冷笑一声,一脚把你踢出门外。\n");
me->move(__DIR__"square");
return 1;
}
me->set("bwdh_gamble/east_round", 0);
break;
case "west" : if ( me->query("bwdh_gamble/west_round") == ob->query("round") ) {
bet = me->query("bwdh_gamble/west_bet");
ratio = ob->query("west");
}
else {
write("赌场伙计对你“哼”的冷笑一声,去招呼其他人了。\n");
return 1;
}
me->set("bwdh_gamble/west_round", 0);
break;
default: break;
}
money = new("/clone/money/silver");
if (ratio > 0)
bet = bet + (int) (bet / ratio * 9 / 10);
else
bet = bet - bet * ratio * 9 / 10;
money->set_amount(bet);
money->move(me);
me->set("bwdh_gamble/east_round", 0);
write ("赌场付给你" + chinese_number(bet) + "两白银。\n");
return 1;
}
int valid_leave(object player, string dir) {
if (!wizardp(player) && dir == "up")
return notify_fail("此间主人并没有邀请你去那里!\n");
return ::valid_leave(player, dir);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?