應用程式/解決方案‎ > ‎雜記‎ > ‎2020‎ > ‎

2020-09-12

張貼者:2020年9月11日 下午10:10Wei-Xiuang Wang   [ 已更新 2020年9月29日 下午7:03 ]

使用QB64解決日常的一般程式需求, Python完全遜掉...


古早的一本書名『大家來學BASIC』, 『培基語言』莫不耳熟能詳,
而且小學就會教, 被號稱是最容易學的一種高階程式語言

上次 Quick Basic 再生筆記 記錄下把以前Quick Basic程式碼重新拉出來執行的狀況
這次則使用 QB64 來試試看(目標是讓以前DOS下的QBX程式碼復活變成Windows版), 官網首頁的下標
QB64 is a modern extended BASIC programming language that
 retains QBasic/QuickBASIC 4.5 compatibility and
 compiles native binaries for Windows, Linux, and macOS.

看了就覺得很帥, 非常值得一試, Windows平台有分 x86 和 x64 的版本
qb64_1.4_win_x64.zip - 只能於64位元的Windows上執行, 編譯64位元執行檔當然只能於64位元的Windows上執行
qb64_1.4_win_x86.zip - 可於32/64位元的Windows上執行, 編譯32位元執行檔同樣可於32/64位元的Windows上執行
下載壓縮包解壓後就能用, 無需安裝, 支援 Windows NT (XP), Windows Vista, Windows 7, 8 or 10
Python 3.4.4 相同的道理, 可以選擇x86的版 從XP到Win10不論x86/x64都能用最為方便

解壓縮後 x86的版約 590MB, x64的版則約 604MB, 有開RamDisk又夠大的話放RamDisk跑就好了,
那麼大的原因是因為它包含了整套mingw32
 這mingw是用於C/C++程式語言的GCC編譯器(QB64裏x86版約占499MB而x64版約占513MB)
所以不僅程式碼可跨平台, 也很明顯的可以判斷QB64與Python最大的不同, QB64編譯出來的EXE是獨立執行檔,
也就是QB64產出的程式作品, 可複製單一EXE檔在其他機器上執行無需另外準備執行環境或包裝, 這比Python方便太多了!
不過相對就有缺點, 編譯出來的執行檔有點大, 基本就要2MB起跳, 雖然也可用執行檔壓縮程式壓小到500KB為基礎,
然後與DOS的QBX(QB45)不同, 寫程式階段QB64的執行功能必須編譯成執行檔然後跑執行檔,
不像QBX的執行是無需編譯就能模擬執行, 而QB64的編譯確實感覺比較久(畢竟要產出2MB以上的二進位檔),
然而瑕不掩瑜, 光是獨立執行檔可以便於複製使用的這一點上就完趴Python了!
畢竟程式有個最大的樂趣就是與別人分享或是提供予別人使用, 當然是能夠在任何地方輕鬆執行起來最重要啦~
再來QB64不像Python常要依賴一堆外掛, 往往光是pip搞環境就搞掉一堆想學Python的人,
何況各種外掛基於不同版本的Python開發也常常有很多不相容的狀況, 但是Python如果不找外掛用還真不知道要它何用...
如果使用市面的一些套裝好的Python, 不僅龐大速度慢, 還可能受限顯卡的問題跑不動, 也可能無法安裝於VM裏運作,
除非如同2020-02-21這裡所介紹, 單純使用Python原始的官方版, 那麼搭配簡易好用的API則是相當小巧輕便不錯用的程式工具,
不過要寫Python還是得先找個合適好用的編輯器(就是這緣故才會讓一些Python的套裝盛行), 如不然也會很困擾...
現在, 這個QB64不僅免除其他語言開發雜項的不便與困擾, 讓學程式的人更真正專注於學習程式上的邏輯與思考,
也就是QB64恰恰好有符合BASIC簡單好用易入門的理念, 展現了BASIC實不愧是高階程式語言之最的地位,
另外千萬不要和VB(Visual Basic)混為一談, 實在是因為VB太Windwos了, 完全搞砸了Basic的長處和美意,
過度強調GUI與OO的VB既然走偏當然走得不順, 進展到VB 6之後 進入到VB .NET, 然後被下了注腳
 VB6是VB.NET至今仍無法完全取代的版本。
最後VB終究到了走不下去的地步
 Going forward, we do not plan to evolve Visual Basic as a language.
不過喜歡VB的fu也有個怪胎 Rapid-Q 可以替代用用看, 這是個寫小程式發行很方便的工具, 不過它只提供32位元但是有跨平台支援

常常有想學程式語言的會拿C#和Python作比較, 何者容易學又實用? 遇到BASIC再看看QB64,
若比簡單BASIC比Python更簡單, 若比實用BASIC有結構概念比C#強又有效率, 看看QB64這樣的例子(指標/結構/記憶體)
如上圖QB64是否非常簡潔有力呀! 若再比發行和散佈的敏捷性, 個人覺得當然是QB64勝出完趴前兩者了!
倘若還要比年記, BASIC垂垂老矣, 從Apple電腦,中文的小教授到DOS的PC時代就有了...想當初是從第一台家用電腦VIC-20開始學的!
有注意到嗎? 是家用電腦不是個人電腦, 因為它是接電視看的, 人家畫面文字80*25它偏偏22*23, 人家記憶體64KB它卻只剩3583Bytes給用...
一直還記得一個叫步步驚魂的遊戲是父親還會半夜喝威士忌偷玩, 開機畫面我都沒印象了, 這個偉大的網路時代卻是找得到耶!
(PS: 圖片聯結到Youtube視頻)

回到主題QB64的QB是Quick Basic而不是QBasic, 前者是可編譯執行檔後者則無,
也可以把QBasic視作是Quick Basic的閹割版, 是MicroSoft為了附加在MS-DOS磁碟片中的迷你版,
Unlike traditional BASIC and QBasic code, QB64 gets compiled automatically into machine code
 – allowing exceptional performance, easy distribution, and the ability to
  link with external C and C++ programming libaries.
Compatible with most QBasic 4.5 code, QB64 adds a number of extensions,
 such as OpenGL and other modern features,
providing the perfect blend of classic and modern program development.
以前用QB45設計了一套GM(Game Manager)的遊樂器卡匣遊戲複製程式, 一套一萬三賣到全省各遊樂器專賣店,
當然寫過不計其數的程式碼, 也建立許多有用的程式庫, 也就是QB的SUBS/FUNCTION,
所以現在的重點就是以前的程式碼能不能用? 看到前面引言QB64官網的說明當然很期待,
那麼就把上次 Quick Basic 再生筆記  提到的LIGHT.BAS丟進去試吧!
大成功, 完全不用改就能執行, 直接選單上 [File] --> Open... 瀏覽到 LIGHT.BAS 載入後
再由選單上 [Run] --> Start 就會編譯出 Untitled.exe 並執行如圖中的樣貌,
如果選單上 [Run] --> Make EXE Only 就會編譯出LIGHT.exe (x86版 2029KB, x64版 2460KB), 複製到其他電腦直接就能跑了

QB64以能直接執行舊的QB 4.5所用的程式碼為設計主軸, 雖然有些陳述式牽扯到硬體IO的部分還未支援,
但是QB64也增加了許多甚有幫助的新功能足可替代未支援的部分(代表要改程式碼), 如DLL的應用



考慮可能遇到的狀況提供以下幫助

1. 載入的BAS程式碼檔是亂碼
需注意以前DOS下QBX存檔預設是壓縮過的二進位檔,
所以使用QBX載入檔案而於存檔時(選單 [File] --> Save As... )改選擇用 Text 的方式


2. 載入BAS程式碼時出現檔案不存在的訊息, 或者新寫程式存檔後找不到檔案
這是Code Page的問題, 因為路徑分隔符 \ 不一樣所造成, QB64預設是 CP437,
可於QB64選單 [Options] --> Language... 改選台灣地區DOS下看到的 CP850
另外也需注意QB64需要完整的資料夾權限

3. QB64編譯的程式, 為初學者貼心預設添加了結束時的等待按鍵與訊息"Press any key to continue..."
這是為了方便剛練習寫簡單程式時, 例如只有 PRINT 秀個訊息而已, 常有因為程式跑完視窗立刻消失來不及看到結果的困擾,
但若是已經設計有特定需求不想有此等待動作的話, 可以於程式中改用 SYSTEM 作為程式結束時的動作指令, 可參考END的說明
例如設計給批次檔跑要用的工具, 或是已另有等待的設計, 如下面簡單的範例可自行練習敲程式碼, 而指令都是按[F1]鍵就能獲取說明


4. 可 快速上手/易於設計/便於生產 確實相當優異, 若論缺點大概就是不能直接顯示UNICODE, 對於某些情形與用途或許有所不便,
但如果想要運用OS下的多種字型也可以從 _LOADFONT 這個指令開始摸索, 充分運用Windows資源則從 DLL_Libraries 入門,
只要能開發與Windows用法相同的DLL, 參考 Windows_Libraries 就能瞭解大部分的用法與規則

5. 建議讀完QB64這兩篇, 輸入用的 INKEY$ 和時間事件 TIMER 基本上就可算入門了, 天馬行空當個程式設計師吧!

最後, 提供LIGHT.BAS各執行檔版本供下載測試, 看看是否自己的環境是否都能運行以便評估此一方案是否合用可行
LIGHT-EXE.RAR檔案位於Dropbox上, 網址為

  https://www.dropbox.com/s/7ckj4lmc32yfeki/LIGHT-EXE.rar?dl=0

可使用下面邀請聯結加入Dropbox

  https://db.tt/5W0wFWIk2b

YT參考視頻

  https://www.youtube.com/watch?v=haWIhTbeRyQ&list=PLKKSR7SLy5rTfW2E5vx-3Ymlpxbht_aBi


LIGHT-EXE.RAR內容有三個版本執行檔

 - LIGHT-x32-QBX.EXE

    QBX編譯的版本, 可執行於 DOS, Win XP 或 Windows上的DOS模擬器(如 DosBox)

 - LIGHT-x32-QB64.exe

    QB64的x86版本, 可執行於 x86 或 x64 的 Win XP ~ Win 10

 - LIGHT-x64-QB64.exe

    QB64的x64版本, 可執行於 x64 的 Windows 上

程式操作

 - 選單介面

    使用 上,下游標方向鍵 進行項目選擇, [Enter]鍵確認選擇

 - 輸入列

    使用 數字鍵與左,右游標方向鍵,[Del],[BackSpace]等設定數值, [Enter]鍵確認輸入

 - 繪圖狀態

    按任一按鍵回選單介面



相關文章:

註解