作者laechan (小太保)
看板mud_sanc
标题Re: [程式] 关於分类法
时间Thu Nov 15 11:19:14 2007
※ 引述《laechan (小太保)》之铭言:
: // 上述两个设为全域变数
: void show_data(string str,int s)
: {
: // 第一次呼叫该函数时, s=0
: string str="",files,t;
: mixed keys_objs;
: object ob;
由底下的 input_to("show_data",0,s+1,str)
可知这个函数只要被呼叫一次, 除非 s 已满足底下的判断, 不然
它就会一直处於自己 input_to 自己的情况。
每 input_to 一次, s 就会 +1。
s>=sizeof(types), 因为 types 最大是 types[size-1], 例如上
面 types 的 size 是 9, 它的合法范围就是 types[0]~types[8]
所以,底下的 s 第一次出现 >= size = 9 的时候, 这时就是所谓
的「其它类」。
(也就是 types[0]~types[8] 都已经秀完了,剩下没秀的自然就
是所谓的其它类)
: if(s>=sizeof(types))
: {
: str="其它类武器总览:\n"+
: "======================================================\n";
: keys_objs=keys(objs);
: foreach(files in keys_objs)
: {
: if(!ob=objs[files]) continue;
: str+=sprintf("%s %s\n",ob->query("short"),files);
: }
: write_file("/open/cmds/loadall_other.data",str);
: write("其它类武器资料存档完成.\n");
: "全部工作已结束,感谢你的使用。\n");
: return 1;
: }
在底下会做 map_delete, 它的意思就是, 例如某 mapping
map1 = (["a":1,
"b":2,
"c":3,]);
那麽 map_delete(map1,"a") 就会将 a 那个栏位一整个去掉
map1 = (["b":2,
"c":3,]); // 剩下两个
因为每 input_to 一次就会 map_delete 掉一堆东西,所以上
面的「其它类」自然就是 objs 将九大类武器 type 全删光後
「所剩下来的」。
: t=types[s];
: str=t+" 类武器总览:\n"+
: "======================================================\n";
读取档名存成阵列
: keys_objs=keys(objs);
对每一档名做 foreach
: foreach(files in keys_objs)
: {
如果物件不存在就跳过判断换下一个
: if(!ob=objs[files]) continue;
如果物件的 type 不属於本次要判断的 type 就跳过判断换下一个
: if((string)ob->query("type")!=t) continue;
显示物件 short 及档名
: str+=sprintf("%s %s\n",ob->query("short"),files);
该物件已判断过, 所以从 objs 中删掉该物件
: map_delete(objs,files);
: }
将要显示的结果改存在档案中
: write_file("/open/cmds/loadall_"+t+".data",str);
: write(t+" 类武器资料存档完成, 请按 enter 键继续......");
重新 re-input, 这时 s+1
: input_to("show_data",0,s+1,str);
: return 1;
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.184.225