作者laechan (小太保)
看板mud
标题[闲聊] 灌个水, coding 一下吧!!
时间Fri Nov 13 15:25:39 2009
// XX农场
// 先不写花、动物、装饰、肥料、饲料、放虫、放草等
inherit ROOM;
mapping farms=([]), // 农田资料
bag=([]), // 袋子资料
warehouse=([]), // 仓库资料
seeds=([]); // 种子资料
/*
seeds=(["pear":
(["name":"梨子", // 作物名称
"value":5150, // 购买价
"seasons":3, // 类型(可收成几季)
"mellow_time":40, // 成熟时间
"mellow_again":14, // 再成熟时间
"output":40, // 预计产量
"unit_price":112, // 单个售价
"grow_lines":({10,8,8,7,7}), // 发芽→小叶→大叶→开花→成熟
]),
]),
*/
void init()
{
add_action("show_farm","show"); // 显示农地状况
add_action("cultivate","caltivate"); // 种植
add_action("weed","weed"); // 除草
add_action("killpests","killpests"); // 除虫
add_action("collect","collect"); // 收成
add_action("list","list"); // 显示袋子、仓库或商店
add_action("buy","buy"); // 买种子
add_action("sell","sell"); // 卖出作物
}
int list(string str)
{
string *keys_data,tmps="";
int v,vv;
mapping data=([]);
if(!str || str=="")
{
write(@LONG
list 指令语法:
list -bag 显示袋子资讯
list -warehouse 显示仓库资讯
list -store 显示商店(作物)资讯
list [what] 显示某一作物的详细资讯
LONG
);
return 1;
}
switch(str)
{
case "-store":
keys_data=keys(seeds);
tmps="商店贩卖的作物有:\n";
foreach(str in keys_data)
tmps+=sprintf(" %-24s 售价:%d 金币\n",
seeds[str]["name"]+"("+str+")",seeds[str]["value"]);
this_player()->more(tmps);
return 1;
break;
case "-warehouse":
keys_data=keys(warehouse);
tmps="你的仓库里头有:\n";
foreach(str in keys_data)
{
v=(int)seeds[str]["unit_price"]*(int)warehouse[str];
vv+=v;
tmps+=sprintf(" %-24s 数量:%d 售价:%d 金币\n",
seeds[str]["name"]+"("+str+")",warehouse[str],v);
}
tmps+="总售价:"+vv+" 金币\n";
this_player()->more(tmps);
return 1;
break;
case "-bag":
keys_data=keys(bag);
tmps="你的袋子里头有:\n";
foreach(str in keys_data)
tmps+=sprintf(" %-24s 数量:%d\n",
seeds[str]["name"]+"("+str+")",bag[str]);
this_player()->more(tmps);
return 1;
break;
}
if(!data=seeds[str])
{
write("list: 没有 "+str+" 这个作物的资料喔.\n");
return 1;
}
tmps=data["name"]+"("+str+")这个作物的资料如下:\n";
vv=(int)data["output"]*(int)data["unit_price"]*(int)data["seasons"];
tmps+=sprintf("购买价 :%d\n类型 :%d 季作物\n成熟时间 :%d小时\n"+
"再成熟时间:%d小时\n预计产量 :%d个/季\n"+
"单个售价 :%d\n预计总收入:%d\n",
data["value"],data["seasons"],data["mellow_time"],
data["mellow_again"],data["output"],data["unit_price"],
vv);
write(tmps);
return 1;
}
int sell(string str)
{
string tmps="",*keys_data,tmp;
int vv;
if(!str || str=="")
{
list("-warehouse");
write("你要卖出什麽呢?\n");
return 1;
}
if(!warehouse[str] && str!="all")
{
write("sell: 你的仓库内没有 "+str+" 这项东西喔.\n");
return 1;
}
keys_data=keys(warehouse);
foreach(tmp in keys_data)
{
if(tmp==str || str=="all")
{
vv+=(int)seeds[tmp]["unit_price"]*(int)warehouse[tmp]);
tmps+=sprintf(" %-24s 数量:%d\n",
seeds[tmp]["name"]+"("+tmp+")",warehouse[str]);
}
}
tmps+="总售价:"+vv+"金币\n"+
"你确定要卖出吗(y/n):");
input_to("check_sell",0,tmp,str);
return 1;
}
int check_sell(string str,string tmp)
{
int v,total;
string *keys_data;
if(str=="Y" || "str=="y")
{
keys_data=keys(warehouse);
foreach(tmp in keys_data)
{
if(tmp==str || str=="all")
{
v=(int)warehouse[tmp];
total+=v*(int)seeds[tmp]["unit_price"];
map_delete(warehouse,tmp);
}
}
farms["golds"]+=total;
write("sell: 你卖出了作物,获得了 "+total+" 金币.\n");
return 1;
}
return 1;
}
.
.
.
还有很多函数跟判断(sell 的判断写完才发现应该给 sell [n] [what]
这样的语法)
不过把XX农场具现在 mud 应该是可行的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.162.151
1F:推 abcdfgi:重生的世界啊....Revival World 11/13 16:42
2F:→ laechan:个人觉得比较复杂的部份在虫害/长草/乾旱的事件产生上 11/13 17:31
3F:→ laechan:以及复数地的控制上 11/13 17:31
※ 编辑: laechan 来自: 61.225.161.183 (11/13 17:31)
4F:推 reliu:1F鹿人 11/13 23:46
5F:推 msrvoice:tsk 谁写的呀, 看一看我也想搞一个 -.- 11/14 07:59
6F:→ laechan:呵,在板子上交流一下吧 11/14 08:09
7F:推 doall:推鹿人 10/19 18:17