|
| 1 | +#labels Featured |
| 2 | + BBSRuby 版本 v0.2, API Interface: v0.111 |
| 3 | +
|
| 4 | + Source Code下載:http://orez.us/~zero/BBSRuby.c |
| 5 | +
|
| 6 | + === 為什麼開發 BBSRuby? === |
| 7 | +
|
| 8 | + 因為人家有 BBSLua (誤),其實只是想學學看怎麼把 Ruby interpreter 嵌入 |
| 9 | + 程式中。剛好人家有這麼棒的點子就拿來用囉XD 以前也曾想要寫 C# 的 BBS |
| 10 | + 有一項功能就是用 C# 的 Runtime Compiler Service 弄 C# Script。 |
| 11 | +
|
| 12 | + 不過... 該計畫... 被放棄了(小聲) 所以算是實現當時的願望吧 (?) XD |
| 13 | +
|
| 14 | + === 已知問題 === |
| 15 | +
|
| 16 | + 1. Hash.to_s() 不明原因出現 parameter error. @@ |
| 17 | +
|
| 18 | + 2. Ruby interpreter 有時候啟動時會顯示 parse 錯誤,可是重新再進入一次 |
| 19 | + 卻又可以正常執行。 |
| 20 | +
|
| 21 | + === 修改記錄 === |
| 22 | +
|
| 23 | + v0.2 |
| 24 | + 1. 修正行號不會重新計算的問題,只要故意load一個空白檔案就可以了。 :P |
| 25 | +
|
| 26 | + v0.3 |
| 27 | + 1. 修正getch()對於特殊按鍵沒反應的問題 |
| 28 | +
|
| 29 | + === 如何撰寫 === |
| 30 | +
|
| 31 | + BBSRuby大致上與BBSLua相容,不過依然有一些變動。 |
| 32 | + 如程式開頭結束皆使用###BBSRuby。 至於API的部份,BBSRuby將參考 |
| 33 | + BBSLua API實做。以下將以BBSLua的API列表搭配說明/顏色指示支援狀態。 |
| 34 | + 原文作者為 piaip。 |
| 35 | +
|
| 36 | + 支援狀況: 不支援 部份實做 完全支援 BBSRuby專屬 |
| 37 | +
|
| 38 | + TOC標籤: |
| 39 | + ##Interface: BBS-Ruby API 版本號碼 (可方便系統警示不相容的訊息) |
| 40 | + ##Title: 程式名稱 |
| 41 | + ##Notes: 程式說明 |
| 42 | + ##Author: 作者資訊 |
| 43 | + ##Version: 程式自訂的版號 |
| 44 | + ##Date: 最後修改日期 |
| 45 | +
|
| 46 | + 請注意 BBSRuby 的輔助函式以 "BBS." 不是 "bbs.",TOC存取方式也不同。 |
| 47 | +
|
| 48 | + [輸出] |
| 49 | + bbs.addstr(str, ...) 畫字到目前位置 |
| 50 | + 目前請使用outs。視情況考慮是否 alias outs 過來。 |
| 51 | +
|
| 52 | + bbs.outs(str, ...) 畫字到目前位置 (同 addstr) |
| 53 | + bbs.title(str) 移至左上角繪製標題 |
| 54 | + bbs.print(str, ...) 印完所印字串後再加上一個換行 |
| 55 | + print(str, ...) 同 bbs.print |
| 56 | + 不支援STDOUT輸出。請使用bbs.outs / bbs.print。 |
| 57 | +
|
| 58 | + * 全系列畫字函式都可以接受 ANSI 指令 |
| 59 | + * 注意: 輸出並不會立刻反應在畫面上,要等 refresh() |
| 60 | + 或其它輸入函式才會作全螢幕的更新。請見 refresh() 說明 |
| 61 | +
|
| 62 | + bbs.vmsg(str) 顯示訊息提示框 |
| 63 | +
|
| 64 | + [移動] |
| 65 | + bbs.getyx() 傳回游標目前位置 (y, x), y/x 由 (0,0)表左上角 |
| 66 | + bbs.getmaxyx() 傳回目前螢幕大小 (my,mx), 實際可移動範圍到 |
| 67 | + (my-1,mx-1) |
| 68 | + bbs.move(y,x) 移動到 (y,x) (也就是 ANSI 的 *[x;yH) |
| 69 | + bbs.moverel(dy,dx) 移動到游標目前位置加上 (dy,dx) |
| 70 | +
|
| 71 | + [清除] |
| 72 | + bbs.clear() 清除整個畫面+回到左上角 |
| 73 | + bbs.clrtoeol() 清至行尾 |
| 74 | + bbs.clrtobot() 清至螢幕底端 |
| 75 | +
|
| 76 | + [2D繪圖] |
| 77 | + bbs.box(rows,cols,title) 以目前游標位置為起點,用目前色彩屬性繪製一個 |
| 78 | + 高度 rows 寬度 cols 的視窗。 |
| 79 | + 若有指定 title (可省略) 則會置中輸出字串 |
| 80 | +
|
| 81 | + [更新畫面] |
| 82 | + bbs.refresh() 呼叫此命令時才會真的更新畫面 |
| 83 | + (呼叫輸入等待指令如 getch/getstr/pause/ |
| 84 | + kbhit/sleep/vmsg時也會自動更新) |
| 85 | +
|
| 86 | + [屬性] |
| 87 | + bbs.color(c1,c2,...) 切換 ANSI 屬性 (也就是 *[c1;c2;....m) |
| 88 | + 不指定參數時 bbs.color() = *[m (重設屬性) |
| 89 | + bbs.setattr(c1,c2,...) 同 color() |
| 90 | + 請使用color,未來視情況決定是否支援。 |
| 91 | +
|
| 92 | + bbs.ANSI_COLOR(c1,...) 傳回 ANSI 屬性字串 (不馬上變屬性,要 outs 才會變) |
| 93 | + bbs.ANSI_RESET 傳回 *[m 字串 |
| 94 | + bbs.ESC 傳回 ANSI 的 * |
| 95 | +
|
| 96 | + [輸入] |
| 97 | + bbs.getch() 輸入單鍵 |
| 98 | + 特殊按鍵為大寫名: UP DOWN LEFT RIGHT |
| 99 | + ENTER BS TAB HOME END INS DEL PGUP PGDN F1 ... F12 |
| 100 | + 另外與 Ctrl 合按的複合鍵會以 ^X 的形式出現。 |
| 101 | +
|
| 102 | + bbs.getdata(n,echo) 畫 n 個字元的輸入框並輸入字串 |
| 103 | + echo (可省略) = 0 時只輸入不畫字 (可作密碼輸入) |
| 104 | + bbs.getstr(n,echo) 同 getdata |
| 105 | + 請使用 bbs.getdata。 |
| 106 | +
|
| 107 | + bbs.pause(msg) 在底部畫暫停訊息並等輸入單鍵 (傳回值同 getch()) |
| 108 | +
|
| 109 | + bbs.kbhit(wait) 傳回使用者是否有按鍵 (若無輸入則會等待最多 wait\0 |
| 110 | + 秒) |
| 111 | + bbs.kbreset() 清空輸入緩衝區 (吃掉所有已輸入的鍵) |
| 112 | + 因為BBS I/O核心的關係暫時不支援。 |
| 113 | +
|
| 114 | + [時間] |
| 115 | + bbs.time() 現在時間 (以數字表示),精準度到秒 (處理速度較快) |
| 116 | + bbs.now() 同 time() |
| 117 | + 請使用 Ruby 內建的 Time.now |
| 118 | +
|
| 119 | + bbs.ctime() 現在時間 (以字串表示) |
| 120 | + 請使用 Ruby 內建的 Time.now.to_s |
| 121 | +
|
| 122 | + bbs.clock() 高精準度的時間 (可到秒的小數點以下但速度較慢) |
| 123 | + bbs.sleep(sec) 停止執行 sec 秒 (可到小數點以下) |
| 124 | + 請使用 Ruby 內建的 sleep。 |
| 125 | +
|
| 126 | + [BBS 資訊] |
| 127 | + bbs.userid() 目前使用者的 id |
| 128 | + bbs.sitename BBS 站名 |
| 129 | + bbs.interface BBSRuby API 版本號碼 |
| 130 | +
|
| 131 | + [程式 TOC 資訊] |
| 132 | + bbs.toc["Title"] TOC 中的 Title: 資訊 |
| 133 | + bbs.toc["Notes"] TOC 中的 Notes: 資訊 |
| 134 | + bbs.toc["Author"] TOC 中的 Author: 資訊 |
| 135 | + bbs.toc["Version"] TOC 中的 Version: 資訊 |
| 136 | + bbs.toc["Date"] TOC 中的 Date: 資訊 |
0 commit comments