[情報] BBS-Lua
看板C_and_CPP (C/C++)作者ForSinSoKing ( Penguin & Fish :))時間17年前 (2008/01/09 18:22)推噓7(7推 0噓 2→)留言9則, 6人參與討論串1/1
以下文章都是轉錄自P2《BBSLua》版piaip 大師的文章:)
有興趣的板友可以去P2參觀看看, 目前P2可以在線上跑程式.
如果確認會實裝的話, 以後可以直接在BBS 上面跑程式.
(已經由版主同意分享此資訊給大家, 感謝版主)
--
作者 piaip (piaip) 看板 BBSLua
標題 [文件] BBS-Lua 簡介
時間 Sun Jan 6 21:52:29 2008
───────────────────────────────────────
如果你是來體驗 BBS-Lua 的,請在板上找任一篇開頭為 [Lua ] 的文章,
閱讀後按下大寫 P 即可
===========================================================================
本文件的最新版請至 PTT2 BBSLua 板取得
本文件為推廣說明用,轉錄不需通知原作者 (推文會被不定期刪除,請見諒)
===========================================================================
● 什麼是 BBS-Lua?
BBS-Lua 是一個實驗性的計畫,由 piaip 開發並於 2008 年開始在 PTT2 BBS
(ptt2.cc) 站開始試用。
正如它的名字,這個計畫的目的就是「在 BBS 上執行 Lua(程式)」。
Lua 是什麼呢? Lua 唸成「LOO-ah」(嚕~啊),它是一個程式語言,
被大量的用在各種遊戲平台中,包括著名的魔獸世界 (Wow) UI 界面
也是使用 Lua 來製作。 Lua 的相關資訊請見 http://www.lua.org/
所以, BBS-Lua,就是要「讓使用者可以在 BBS 上輕易的用 Lua 寫程式」。
● 為何要開發此計畫?
BBS-Lua 的誕生有好幾個因素。 最主要的因素是來自於它的前身 - 互動式
BBS 動畫。 在 2007 年末, PTT/PTT2 開始實裝新一代的 pmore 2007 動畫系統,
內含了不少互動與即時的指令,用來方便製作多重結局的動畫。 這些指令後來
被拿來試作不少小遊戲,但畢竟是以動畫為出發點設計的系統,沒有變數、迴圈,
於是只要遊戲的狀態與變數一多,需要產生的畫面就以指數成長。
基於這個經驗,我們決定另外創造一個全新的互動系統,以真正的程式語言為基礎,
獨立於動畫之外 - 也就是 BBS-Lua 計畫。
另外,使用此計畫還有不少的好處:
- 減輕 BBS 非核心系統的開發負擔
現有 BBS 有半數以上跟效率無關的程式 (包含許多遊戲)。 使用 BBS-Lua 可以
把這些部份全部獨立出來,修改程式也不用重新編譯或啟動 BBS
- 方便移植程式
傳統的 BBS 程式雖是用 C 寫成,但各家分岐仍然過大 (Maple 2.x, Maple 3,
Firebird, PTT, ...),導致程式碼流通不易。 最明顯的例子就是遊戲: 這家
寫的遊戲要讓另一個分支的 BBS 能跑,通常都要下一番功夫。
BBS-Lua 計畫,可以允許 BBS 的底層南轅北轍,只要支援同樣的 BBS-Lua 標準,
就可以讓 BBS-Lua 的程式幾乎一行都不用改就可以在別處執行。
- 方便程式流通
現在是開放源碼 (Open Source) 的時代。 遺憾的是,BBS 這個超大程式平台,
現在並不方便讓大家交流。 在某個 BBS 看到印象深刻的功能或遊戲,若是直接
轉寄到其它 BBS 就能玩,不是很有趣嗎? 而且若是一般使用者也能進行創作,
相信 BBS 上可玩的東西數目會大增,品質也會增加。
以往你覺得遊戲不好玩、美工不夠好,只能每日一信建議站長改;現在你可以
自己動手作!
● 我要如何參與 / 使用 BBS-Lua?
要體驗 BBS-Lua, 可以先找有內含 BBS-Lua 程式的文章。 它們通常會
在文內出現如 --#BBSLUA 這樣的一行。
PTT2 BBSLua 板上 [Lua] [程式] [BBSLua] 或 [範例] 通常都是此類文章。
找到以後,進入閱讀畫面後按下大寫 P (小寫 p 是播放動畫)
就可以執行 BBS-Lua 程式了。
另外,所有的 BBS-Lua 程式都可以在任何時候按下 Ctrl-C 中斷執行。
如果你有程式設計的基礎或是對於製作 BBS-Lua 有興趣,請到
ptt2.cc 的 BBSLua 板,可以找到最新版的語法、API文件與說明。
● BBS-Lua 的未來 / 以後會有別的 BBS 也支援嗎?
基本上 PTT1/PTT2 應該是會支援,雖然 PTT1 的時程未定(或許在2009前)。
不過也要視 PTT2 測試的狀況而定。 我們無法保證未來一定會實裝。
我們很歡迎別的 BBS 一起來實作 BBSLua ,不過畢竟這不是我們能決定的囉~
如果未來發展的好,應該是很有機會的事。
關於 BBS-Lua 的發展計畫,我們希望在 2008 結束前能制定一個 1.0 標準版,
有足夠的 API 來完成大部份 BBS 單人環境能作的事 (ex, 遊戲)
或許會推出能在單機上執行的模擬環境與 SDK
2.0 之後則是以兩人以上互動的架構為主軸。
● 我有問題 / 我找到 Bug / 我想發表程式
目前 PTT2 的 BBSLua 板是最適合作這些事的地方。
--
作者 piaip (piaip) 看板 BBSLua
標題 [文件] BBS-Lua 規格與 API 說明文件
時間 Sun Jan 6 21:52:29 2008
───────────────────────────────────────
=====================================================================
Interface: 0.112
本文件最後更新時間: 2008/01/08 23:45
最新版本請至 PTT2 BBSLua 板取得
本文件為推廣說明用,轉錄不需通知原作者 (推文會被不定期刪除,請見諒)
但由於 BBS-Lua 目前變動非常頻繁,建議您附上原出處方便閱讀者取得最新版
=====================================================================
提醒您: BBS-Lua 系統還在初期開發中,所有的架構/API 都隨時可能大改!
請有您現在的作品可能忽然就跑不動的心理準備。
BBS-Lua 是在 BBS 裡面跑程式語言的機制,選用的程式語言是
Wow UI 所使用的 Lua。 關於此程式語言請見
http://www.lua.org/pil/
http://www.lua.org/manual/5.1/manual.html
這份文件說明了如何在 BBS 上使用 Lua (也就是 BBS-Lua 計畫),
以及目前可使用的 API 相關說明。
2008 Jan, piaip
=====================================================================
● BBS-Lua 的格式
BBS-Lua 的程式使用一般文章發文即可。 程式碼要用特殊的標籤前後標起來。
這個標籤寫成: (須在行前,前面不可有空白)
--#BBSLUA
讓我們來看個最簡單的範例吧:
--#BBSLUA
print("Hello, world")
--#BBSLUA
這就是一個最簡單的 BBS-Lua 程式。
執行它的方法,目前是在閱讀文章時按下大寫 P 。
另外, 緊接著 --#BBSLUA 的下一行可以給定版本及作者資訊, (中間不可有空行)
稱之為 TOC Tag。 格式為:
-- Name: Value
TOC 可由 BBS-Lua 中使用 toc.xxx 來存取,同時也可以讓 BBS-Lua 系統警告
是否有相容性的問題。
目前支援的 TOC Tag 有:
-- Interface: BBS-Lua API 版本號碼 (可方便系統警示不相容的訊息)
-- Title: 程式名稱
-- Notes: 程式說明
-- Author: 作者資訊
-- Version: 程式自訂的版號
-- Date: 最後修改日期 (0.113+)
Interface 的號碼,請填上您開發時參考的文件編號 (見本文開頭)
下面是一個完整的範例:
--#BBSLUA
-- Interface: 0.112
-- Title: 貪食蛇
-- Notes: 在 BBS 上玩貪食蛇, Ctrl-C 可中斷
-- Author: Hung-Te Lin <piaip@csie.org>
-- Version: 0.1
-- Date: 2008/01/09
print("hello, world");
--#BBSLUA
建議您平時最少加上 Interface 資訊,其它則是可加可不加:
--#BBSLUA
-- Interface: 0.112
print("Hello, world!")
--#BBSLUA
=====================================================================
● BBS-Lua 與標準 Lua 異同之處
目前的 BBS-Lua 使用的是標準 Lua 5.1,除了下列不同:
- print() 被轉換為 BBS 輸出
- os library 無法使用
- io library 無法使用
- debug library 無法使用
- load (package) library 無法使用
- 可使用 math library
- 可使用 string library
- 可使用 table library
- 內建 bitlib ( http://luaforge.net/projects/bitlib )
=====================================================================
● API 說明
目前 BBS-Lua 提供的專屬輸出入功能有:
[輸出]
bbs.addstr(str, ...) 畫字到目前位置
bbs.outs(str, ...) 畫字到目前位置 (同 addstr)
bbs.title(str) 移至左上角繪製標題
bbs.print(str, ...) 印完所印字串後再加上一個換行 (bbs.outs(str,...,"\n"))
print(str, ...) 同 bbs.print
* 全系列畫字函式都可以接受 ANSI 指令
* 注意: 輸出並不會立刻反應在畫面上,要等 refresh()
或其它輸入函式才會作全螢幕的更新。請見 refresh() 說明
[移動]
bbs.getyx() 傳回游標目前位置 (y, x), y/x 由 (0,0)表左上角
bbs.getmaxyx() 傳回目前螢幕大小 (my,mx), 實際可移動範圍到(my-1,mx-1)
bbs.move(y,x) 移動到 (y,x) (也就是 ANSI 的 *[x;yH)
bbs.moverel(dy,dx) 移動到游標目前位置加上 (dy,dx)
[清除]
bbs.clear() 清除整個畫面+回到左上角
bbs.clrtoeol() 清至行尾
bbs.clrtobot() 清至螢幕底端
[更新畫面]
bbs.refresh() 呼叫此命令時才會真的更新畫面
(呼叫輸入等待指令如 getch/getstr/pause/kbhit/sleep
時也會自動更新)
另外注意: 1.10 前為了加速輸出,在使用者已有輸入資料且
程式尚未處理時, refresh() 完全不會更新輸出。
1.10 後,一般輸入指令的自動更新在輸入資料未處理完時
不會更新畫面,但 refresh() 會強制更新。
註: 由於這關乎總輸出資料量,我們不保證未來會維持這個行為
或許哪天就會改回有輸入資料未處理完前不更新輸出。
請盡量把您的程式寫好一點
[屬性]
bbs.color(c1,c2,...) 切換 ANSI 屬性 (也就是 *[c1;c2;....m)
不指定參數時 bbs.color() = *[m (重設屬性)
bbs.setattr(c1,c2,...) 同 color()
bbs.ANSI_COLOR(c1,...) 傳回 ANSI 屬性字串 (不馬上變屬性,要 outs 才會變)
bbs.ANSI_RESET 傳回 *[m 字串
bbs.ESC 傳回 ANSI 的 *
[輸入]
bbs.getch() 輸入單鍵
特殊按鍵為大寫名: UP DOWN LEFT RIGHT
ENTER BS TAB HOME END INS DEL PGUP PGDN F1 ... F12
另外與 Ctrl 合按的複合鍵會以 ^X 的形式出現。
bbs.getdata(n,echo) 畫 n 個字元的輸入框並輸入字串
echo (可省略) = 0 時只輸入不畫字 (可作密碼輸入)
bbs.getstr(n,echo) 同 getdata
bbs.pause(msg) 在底部畫暫停訊息並等輸入單鍵 (傳回值同 getch())
bbs.kbhit(wait) 傳回使用者是否有按鍵 (若無輸入則會等待最多 wait 秒)
bbs.kbreset() 清空輸入緩衝區 (吃掉所有已輸入的鍵)
[時間]
bbs.time() 現在時間 (以數字表示),精準度到秒 (處理速度較快)
bbs.now() 同 time()
bbs.ctime() 現在時間 (以字串表示)
bbs.clock() 高精準度的時間 (可到秒的小數點以下但速度較慢)
bbs.sleep(sec) 停止執行 sec 秒 (可到小數點以下)
[BBS 資訊]
bbs.userid() 目前使用者的 id
bbs.sitename BBS 站名
bbs.interface BBS-Lua API 版本號碼
[程式 TOC 資訊]
toc.interface TOC 中的 Interface: 資訊
toc.title TOC 中的 Title: 資訊
toc.notes TOC 中的 Notes: 資訊
toc.author TOC 中的 Author: 資訊
toc.version TOC 中的 Version: 資訊
toc.date TOC 中的 Date: 資訊 (0.113+)
[位元操作 (bitlib) ]
bit.cast(a) cast a to the internally-used integer type
bit.bnot(a) returns the one's complement of a
bit.band(w1, ...) returns the bitwise and of the w's
bit.bor(w1, ...) returns the bitwise or of the w's
bit.bxor(w1, ...) returns the bitwise exclusive or of the w's
bit.lshift(a, b) returns a shifted left b places
bit.rshift(a, b) returns a shifted logically right b places
bit.arshift(a, b) returns a shifted arithmetically right b places
=====================================================================
● 版本更新注意事項
=== 2008/01/06 2:03 前的作品昇級要注意: (0.101) ===
1. -- BBSLUA 改前後加上 --#BBSLUA
2. stand_title 改 title
3. bbs.outs(bbs.ANSI_COLOR(1,33) .. "test" .. bbs.ANSI_RESET);
建議改成 bbs.color(1,33); bbs.outs("test"); bbs.color();
=== 2008/01/06 13:00 後有效: (0.102) ===
1. 新增 getmaxyx(), moverel()
2. chattr() 改為 setattr()
3. igetch() 停止支援,請用 getch
4. getnstr() 停止支援,請用 getstr 或 getdata
5. vmsg() 停止支援,請用 pause
6. bbs.outs() / bbs.addstr() 可改為寫 print(),不用加前面的 bbs.
=== 2008/01/06 15:55 後有效: (0.103) ===
1. 新增 bbs.userid() 為目前使用者 id
2. 新增 bbs.kbhit()
=== 2008/01/06 17:05 後有效: (0.104) ===
1. print()/bbs.print() 現在會比 outs() 多印一個換行
2. 修正跑久會停住的問題
=== 2008/01/06 21:53 後有效: (0.105) ===
1. 新增 bbs.clock()
=== 2008/01/07 10:50 後有效: (0.106) ===
1. 新增 bbs.sleep(),暫時只開放最多 10 秒
=== 2008/01/07 11:50 後有效: (0.107) ===
1. 修正 bbs.sleep() 未處理 Ctrl-C 的問題,重新開放上限
2. 新增 bbs.kbreset()
=== 2008/01/07 14:15 後有效: (0.108) ===
1. 新增 bitlib ( http://luaforge.net/projects/bitlib ) 為標準之一,
方便移植用 C 寫的程式
=== 2008/01/07 21:05 後有效: (0.109) ===
1. 新增 bbs.interface bbs.sitename
2. 格式新增 TOC tags (toc.*)
=== 2008/01/08 01:00 後有效: (0.110) ===
1. 由於太多人無法理解 refresh() 與 input queue 的關係,此版起 refresh()
會無視輸入緩衝區強制更新。
=== 2008/01/08 03:00 後有效: (0.111) ===
1. 修正 co-routine yield/resume 不正常的問題
=== 2008/01/08 23:45 後有效: (0.112)
1. 修正 bbs.pause() 傳回值,現在與 bbs.getch() 相同
2. 修正 bbs.color(): 無參數時等於 bbs.color(0) (重設顏色)
=== 2008/01/?? ??:?? 後有效: (0.113) ===
1. 新增 toc.date
=== 未制定 API:
1. user store / global store (user.store.load/user.store.save)
2. TOC about dialogs
3. communiction api
----
有興趣的人就去P2研究看看吧!
piaip 大師說只要有程式底子的都可以研究看看喔:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.211.94.214
推
01/09 18:24, , 1F
01/09 18:24, 1F
推
01/09 19:39, , 2F
01/09 19:39, 2F
推
01/09 19:43, , 3F
01/09 19:43, 3F
→
01/09 19:55, , 4F
01/09 19:55, 4F
推
01/09 20:01, , 5F
01/09 20:01, 5F
推
01/09 20:07, , 6F
01/09 20:07, 6F
→
01/09 20:07, , 7F
01/09 20:07, 7F
推
01/09 21:16, , 8F
01/09 21:16, 8F
※ StubbornLin:轉錄至看板 GameDesign 01/09 21:17
推
01/10 00:57, , 9F
01/10 00:57, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章