mud 板


LINE

看板 mud  RSS
// 数字图产生程式 // Laechan@Sanc 2011/10/19 /* 这个程式提供了基本的三种字图大小,分别是 5x5 、 7x6 、 7x7 三种(可自行新增新的图) */ // 字图要用什麽符号去画 #define NUM_SIGN "*" // 底下的定义代表六位数的意思 #define MIN_NUM 100000 #define MAX_NUM 999999 // 起始位置 #define START_POS 2 // 定义数字之间的最大高度差 #define HEIGHT_DIFF 2 // 定义每个数字所占的约略宽度, 以及数字之间的约略间距, 则 // 数字图最大长度 = START_POS + 数字数 x NUM_WIDTH + (数字数-1) x NUM_SPACE // 数字图最大高度 = 1 + HEIGHT_DEFF + NUM_HEIGHT #define NUM_WIDTH 7 #define NUM_HEIGHT 7 // 定义 7x7 是因为我们所使用的字图里最大是 7x7 #define NUM_SPACE 2 // 定义数字之间的约略密集度 // 这个数字请介於 1 ~ 最小字图宽度/2 之间 #define INTENSITY 1 // 定义杂讯量所占的比率 // 这个值 = MAX(残缺+杂讯 所占的比率) #define NOISE 2 string trans_pic(int n,int l,mixed pos,mixed tmps); // 数字图的样式 static mixed pics= ({ // 第一组字图: 5x5 ({ ({1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1}), ({0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0}), ({1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1}), ({1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1}), ({1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1}), ({1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1}), ({1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1}), ({1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}), ({1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1}), ({1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1}), }), // 第二组字图: 7列x6 ({ ({1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1}), ({0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0}), ({1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 1,1,1,1,1,1, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,1}), ({1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 1,1,1,1,1,1}), ({1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1}), ({1,1,1,1,1,1, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 1,1,1,1,1,1}), ({1,1,1,1,1,1, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1}), ({1,1,1,1,1,1, 1,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1}), ({1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1}), ({1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1, 0,0,0,0,0,1, 0,0,0,0,0,1, 0,0,0,0,0,1}), }), ({ // 第三组字图: 7x7 ({1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1}), ({0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0, 0,0,0,1,0,0,0}), ({1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,1, 1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,1,1,1,1,1,1}), ({1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,1}), ({1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1}), ({1,1,1,1,1,1,1, 1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 1,1,1,1,1,1,1}), ({1,1,1,1,1,1,1, 1,0,0,0,0,0,0, 1,0,0,0,0,0,0, 1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1}), ({1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1}), ({1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1}), ({1,1,1,1,1,1,1, 1,0,0,0,0,0,1, 1,0,0,0,0,0,1, 1,1,1,1,1,1,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1, 0,0,0,0,0,0,1}), }), }); // 宣告每一组的数字图大小 ({ 所占列数 , 字图宽度 }) static mixed pics_size=({ ({5,5}), ({7,6}), ({7,7}), }); int cmd_runnum(string str,object me) { int x,y,n,i,j,l; mixed tmps=({}),pos=({}); // 取得数字 n=MIN_NUM+random(1+MAX_NUM-MIN_NUM); // 将此数字设在玩家的 temp data 区 // 这里可依各 mud 的需求自行决定要怎麽储存该值 me->set_temp("answer_number",n); // 取得位数 l=strlen(""+n); // 先决定每个数字的起始位置座标 // pos=({ ({第一组座标}), ({第二组座标}), ... }); x=START_POS; y=0; for(i=0;i<l;i++) { // 第 i+1 个数字的最初起始位置 x=x+NUM_SPACE-random(INTENSITY); y=random(1+HEIGHT_DIFF); pos+=({ ({x,y}) }); // 将 x 往前推进 x=x+NUM_WIDTH; } y=NUM_HEIGHT+HEIGHT_DIFF; // 这时 x = 数字图的长度, y = 数字图的行数 // 产生数字图阵列 for(i=0;i<y;i++) { tmps+=({ ({}) }); for(j=0;j<x;j++) tmps[i]+=({" "}); } // 进行数字图转换 str=trans_pic(n,l,pos,tmps); // 秀出数字图 write(str+"答案是:"+n+"\n"); return 1; } string trans_pic(int n,int l,mixed pos,mixed tmps) { int i,j,x,y,i1,i2,ni,r,p; mixed num=({}); string sn=""+n; // 第一步, 将数字填进 pics 里头 for(i=0;i<l;i++) { // 读出数字 ni=atoi(sn[i..i]); // 读出第一个数字的字图阵列 r=random(sizeof(pics)); num=pics[r][ni]; // 读出起始位置 x=pos[i][0]; y=pos[i][1]; for(i2=y;i2<y+pics_size[r][0];i2++) { for(i1=x;i1<x+pics_size[r][1];i1++) { p=(i2-y)*(int)pics_size[r][1]+i1-x; if((string)tmps[i2][i1]==" " && pics[r][ni][p]==1) tmps[i2][i1]=NUM_SIGN; } } } sn=""; j=sizeof(tmps); // 杂讯处理 i=sizeof(tmps[0]); ni=(i*j*NOISE)/100; while(ni-->0) { // 随机挑选位置置入杂讯 x=random(i); y=random(j); tmps[y][x]==NUM_SIGN ? tmps[y][x]=" " : tmps[y][x]=NUM_SIGN; } switch(random(2)) { // 模式1. 正列 case 0: for(i=0;i<j;i++) sn+=implode(tmps[i],"")+"\n"; break; // 模式2. 反列 case 1: for(i=j-1;i>=0;i--) { i2=sizeof(tmps[i]); for(i1=i2-1;i1>=0;i1--) sn+=tmps[i][i1]; sn+="\n"; } break; } return sn; } // end --



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 117.19.74.101 (10/19 14:32)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP