創作內容

1 GP

StoryConsole Console文字冒險遊戲框架

作者:奇幻│2020-09-15 00:48:39│巴幣:2│人氣:627
       最近在清理電腦硬碟時,發現了七年前剛學C#時寫的Console文字冒險遊戲,我就馬上點開來玩,玩完後發現只做了一點點的劇情,然後我看了看原始碼,發現七年前的我是把劇情直接寫進原始碼裡的,完全連一點彈性都沒有,看完原始碼我就想,現在的我一定有辦法寫出一套能夠輕鬆更換故事的框架出來,因此我就花了三小時的時間寫出了 StoryConsole Console文字冒險遊戲框架

       寫好程式碼後我就採用這種結構開始撰寫範例故事,寫了一點點故事之後我就發現,沒有流程控制功能(像是迴圈、if條件選擇)的話,這樣子只要遇到給玩家做選擇時,會因為每多一個選項時,就需要開一個劇情分支的json檔,因此我必須加入流程控制的功能才比較好寫故事。

       但是要怎麼加入呢?現在是用json格式撰寫故事,如果想要加入流程控制的話484只能放棄使用json而去改用腳本語言?但是直接使用腳本語言的話,這樣子彈性太大,故事會與程式碼混雜在一起,可能會造成不易閱讀,因此決定繼續使用json,所以把結構改成這個樣子,加入了全域變數與流程控制。

       新的結構是決定好了,但是變數和運算式解析的部分該怎麼處理呢?這部份如果要自己寫解析器的話太麻煩了,因此我只想用現成的解析器,那麼要用哪個解析器呢?我手頭上是有AShell語言解析器,FloatWindow的計算機功能就是拿AShell一部分的程式碼去做的,但是那是用java寫的,如果要使用就必須用C#重寫...太麻煩了,找其他的,接著我馬上想到很多遊戲裡面會內嵌的腳本解析器 Lua ,然後就將他引入至我的專案中。

       將Lua引擎引入完成後我馬上進行測試,一開始測試時用英文字母都好好的沒什麼問題,直到我用了中文字,直接出現亂碼... 為什麼?難道我json檔用了big-5編碼嗎?用文字編輯器打開一看,用的是安定的utf-8,那為什麼會出現亂碼?找不到問題原因的我馬上就上網爬文,爬了一段時間後發現,原來Lua是不支援unicode的,Lua解析器預設只支援ASCII,若要用utf-8就必須將字串以utf-8轉成bytes餵進Lua然後取出來給C#時再以utf-8轉回字串,這樣就不會是亂碼了,但是這樣做,在Lua中bytes是不能跟字串進行和相接,所以像是習以為常的 '字串' .. '拼接' 就不能用了,到這裡我直接將Lua移除,太難用了!上一次遇到不是以unicode作為編碼的是python2,且現在python3已經支援unicode了。

       竟然Lua不符合我的需求,那接下來該怎麼辦呢?這時我馬上想到javascript,他有了Google V8引擎的加持,效率和速度可說是高得很呢,所以我就用javascript取代了Lua,然後一測試,中文字餵進去javascript在出來後還是中文字,沒有變成亂碼!太棒啦!

       最後,我就花了一小時半寫了個小故事當作StoryConsole的範例故事給大家玩玩,StoryConsole我是以MIT Licenseg授權開源的,歡迎大家拿去使用與修改。


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4917165
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:文字冒險遊戲|Console

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★jack850628 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:AI上色好方便啊!我這不... 後一篇:菜逼八的手動上色...

追蹤私訊切換新版閱覽

作品資料夾

dora1022素不相識
日常發牢騷小屋,歡迎來閒晃~看更多我要大聲說6小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】