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燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP