[情報] BBS-Lua
看板C_and_CPP (C/C++)作者ForSinSoKing ( Penguin & Fish :))時間18年前 (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數位生活區 即時熱門文章