Blitz Basic

維基百科,自由的百科全書
跳至導覽 跳至搜尋
BlitzBasic
File:BlitzBasicLogo.gif
開發者Blitz Research
最終版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    源代碼庫
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    編程語言使用C++編寫,但語言風格屬於BASIC
    引擎
      Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
      操作系統Microsoft Windows
      平台Microsoft Windows
      語言英語
      類型遊戲製作引擎英語Game creation system
      許可協議zlib許可證
      網站www.blitzbasic.com[失效連結]

      Blitz BASIC是由新西蘭程序員Mark Sibly設計的第一個Blitz系列編程語言。Blitz的語法基於BASIC,適合初學者且易於掌握。Blitz系列語言面向遊戲變成,但通常被認為是通用語言,足以用於大多數類型的應用程序。Blitz隨着新產品的發布和發展,新版本為更高級的編程技術提供了支持,例如面向對象多線程。這讓這系列的語言在後來脫離了BASIC的名字。[1]

      歷史[編輯]

      Blitz語言的第一個版本是為Amiga平台製作的,由澳大利亞公司Memory and Storage Technology發布。回到新西蘭的幾年後,[注 1]Acid Software[注 2]發布了Blitz BASIC 2。從此,Blitz編譯器在多個平台上發布。隨着Amiga在商業平台上的消亡,Blitz BASIC 2源碼在Amiga社區發布,至今仍以AmiBlitz的名義發展。[3]

      BlitzBasic[編輯]

      Idigicon英語Idigicon在2000年10月發布,面向Microsoft Windows系統。該語言包括一個用於處理基本2D圖形和音頻的內置API。隨着Blitz3D的發布,BlitzBasic通常被稱為Blitz2D。

      當英國流行的計算機雜誌例如PC Format英語PC Format上發布了有限制的「免費」版本時,人們對於BlitzBasic的認識變深。這雖然令開發商和出版商之間發生法律糾紛,但最終友好解決。

      Blitz3D[編輯]

      Blitz3D
      File:Blitz3D Logo.jpg
      設計者Mark Sibly
      實作者Blitz Research Ltd.
      面市時間2001
      最終版本
        Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
        操作系統Microsoft Windows
        網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
        File:Screenshot of Blitz3D.png
        Blitz3D的截圖,該頁面為「主頁」。

        Blitz3D(簡稱B3D)為BlitzBasic添加了200多個3D命令。BlitzBasic的語法在Blitz3D上完全可用。BlitzPlus的GUI命令不包括在內,但BlitzBasic和Blitz3D的免費拓展——BlitzUI可以添加與GUI功能相關的命令。BlitzUI的樣子近似於Windows的經典用戶界面,例如菜單欄和下拉菜單。但與BlitzPlus不用的是,它不使用Windows的標準GUI。儘管Blitz3D已停止接受更新,但Mark Sibly還是發布了一個針對Windows 8的錯誤修復版本。

        Blitz3D於2014年8月3日開放源碼,可在Github上獲取。Blitz3D使用Microsoft Visual C++ 6.0編寫。[4]

        BlitzPlus[編輯]

        2003年2月,Blitz Research Ltd.發布了同樣適用於Microsoft Windows的BlitzPlus。它缺少Blitz3D所擁有的3D引擎,但它通過實現有限的Microsoft Windows控件支持來創建圖形用戶界面,為該語言的2D端添加了新功能。2D引擎的向後兼容性也得到了拓展,允許BlitzPlus製作的遊戲和應用程序可能在僅有DirectX 1的系統上運行。

        BlitzMax[編輯]

        BlitzMax
        編程範型指令式編程面向對象模塊化編程反射式編程
        設計者Mark Sibly
        實作者Blitz Research Ltd.
        面市時間2004
        最終版本
          Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
          型態系統靜態弱類型強類型(可選)
          操作系統Microsoft Windows, Mac OS X, Linux
          網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
          衍生副語言
          Official BlitzMax, bmx-ng
          受影響於
          BlitzBasic
          影響語言
          Monkey

          第一個BlitzMax編譯器於2004年12月發布,面向Mac OS X。這使BlitzMax成為第一個可以在*nix平台上編譯的Blitz語言。Microsoft Windows和Linux的編譯器隨後於2005年5月發布。BlitzMax通過拓展類型系統以包含面向對象的概念,並修改圖形API以更好地適應OpenGL,為現代Blitz系列帶來了最大的語言結構變化。BlitzMax也是第一種在內部使用UCS-2編碼的Blitz語言,允許顯示非ASCII字符組成的字符串。

          BlitzMax的平台無關命令集允許開發人員在多個平台上編譯和運行源代碼。然而,官方的編譯器和構建鏈僅會為它正在執行的平台生成二進制文件。非正式地說,用戶已經能夠讓Linux和Mac OS X交叉編譯至Windows平台。

          BlitzMax也是Blitz系列的第一個模塊化編程語言,提高了命令集的可拓展性。此外,編譯器所附帶的所有標準模塊都是開源的,因此程序員可以在必要時進行調整和重新編譯。官方的BlitzMax跨平台圖形用戶界面模塊(稱為MaxGUI)允許開發人員為他們在Linux(FLTK)、Mac (Cocoa)和Windows上的應用程序編寫GUI界面。各種用戶貢獻的模塊例如wxWidgetsCairoFontconfig等一系列數據庫模塊拓展了該語言的使用範圍。還有一些第三方3D模塊可供選擇,即MiniB3D[5],一個開源的OpenGL引擎,可以在BlitzMax支持的所有三個平台上編譯和運行。

          2007年10月,BlitzMax 1.26版發布,其中增加了反射模塊。[6]BlitzMax 1.32發布包括新的線程Lua腳本模塊,大多數標準庫函數都已更新,因此它們支持Unicode編碼。[7]

          Blitz3D SDK[編輯]

          Blitz3D SDK是一個基於Blitz3D引擎製作的3D圖形引擎。它是為配合C++C#、BlitzMax和PureBasic而出現的,但它也可以與遵循兼容調用協議的其他語言配合使用。

          Max3D模塊[編輯]

          2008年,基於C++的跨平台3D引擎Max3D的源碼通過BSD許可證公布。該引擎專注於OpenGL,但也為其他圖形驅動程序(例如DirectX)提供了一個抽象後端,並使用了幾個開源庫,即Open Asset Import Library英語AssimpBoostODE

          儘管在Blitz社區中,Max3D是人們熱切期待的Blitz3D的繼承者。但是在源碼公布後不久,人們對它的興趣和支持就消失了,最終開發陷入停頓。沒有任何跡象標明Blitz Research會重新啟動項目。

          開源版本發布[編輯]

          BlitzPlus與2014年4月28日通過zlib許可證Github上以開源形式發布。[8][9] Blitz3D隨後於2014年8月3日以開源形式發布,[10][11] BlitzMax後來於2015年9月21日以開源形式發布。[12]

          示例[編輯]

          一個在屏幕上打印Hello World,並按任意鍵結束的示例:

          Print "Hello World"   ; 打印至屏幕
          WaitKey()             ; 暂停执行,直到按下任意键
          End                   ; 结束程序
          

          以下聲明變量並打印至屏幕的演示程序使用三種主要數據類型(字符串整數浮點):

          name$        = "John"   ; 创建一个字符串变量($)
          age          = 36       ; 创建一个整数变量(无小数)
          temperature# = 27.3     ; 创建一个浮点变量(#)
          
          print "My name is " + name$ + " and I am " + age + " years old."
          print "Today, the temperature is " + temperature# + " degrees."
          
          Waitkey()               ; 暂停执行,直到按下任意键
          End                     ; 结束程序
          


          創建一個窗口應用程序,該程序以二進制和十進制格式顯示時間。關於BlitzBasic和BlitzMax版本,請參見下文:

          BlitzBasic版本 BlitzMax版本
           AppTitle "Binary Clock"
           Graphics 150,80,16,3
          
           ;创建一个计时器
           ;这代表主循环每秒执行两次
           secondtimer=CreateTimer(2)
           ;#####################################################
           Repeat ;               主循环
           	Hour = Left(CurrentTime$(),2)
           	Minute = Mid(CurrentTime$(),4,2)
           	Second = Right(CurrentTime$(),2)
          
           	If Hour >= 12 Then PM = 1
           	If Hour > 12 Then Hour = Hour - 12
           	If Hour = 0 Then Hour = 12
          
           	;如果不清屏,PM点将会在午夜过后被保留
           	Cls
          
           	Color(0,255,0) ;将PM部分的文本设置为绿色
           	If PM = 1 Then Text 5,5,"PM"
           	;将其余部分文本颜色设置回白色
           	Color(255,255,255)
          
           	For bit=0 To 5
           		xpos=20*(6-bit)
          
           		binaryMask=2^bit
          
           		;时
           		If (bit<4)
           			If (hour And binaryMask)
           				Text xpos,5,"1"
           			Else
           				Text xpos,5,"0"
           			EndIf
           		EndIf
          
           		;分
           		If (minute And binaryMask)
           			Text xpos,25,"1"
           		Else
           			Text xpos,25,"0"
           		EndIf
          
           		;秒
           		If (second And binaryMask)
           			Text xpos,45,"1"
           		Else
           			Text xpos,45,"0"
           		EndIf
           	Next
          
           	;将文本颜色设为红色,表示十进制时间
           	Color(255,0,0)
           	Text 5,65,"Decimal: " + CurrentTime$()
           	;将其余部分文本颜色设置回白色
           	Color(255,255,255)
          
           	;等待半秒钟
           	WaitTimer(secondTimer)
           Forever
           ;#####################################################
          
          AppTitle = "Binary Clock"
          Graphics 145,85
          
          secondtimer = CreateTimer(2)
          
          Repeat
              Hour = CurrentTime()[..2].ToInt()
              Minute = CurrentTime()[4..6].ToInt()
              Second = CurrentTime()[6..].ToInt()
          
              If Hour >= 12 Then PM = 1
              If Hour > 12 Then Hour = Hour - 12
              If Hour = 0 Then Hour = 12
          
              '如果不清屏,PM点将会在午夜过后被保留
              Cls
          
              SetColor(0,255,0) '将PM部分的文本设置为绿色
              If PM  = 1 Then DrawText "PM",5,5
              '将其余部分文本颜色设置回白色
              SetColor(255,255,255)
          
              For bit=0 Until 6
                  xpos=20*(6-bit)
                  binaryMask=2^bit
                  
                  '时
                  If (bit<4)
                      If (hour & binaryMask)
                          DrawText "1",xpos,5
                      Else
                          DrawText "0",xpos,5
                      EndIf
                  EndIf
                  
                  '分
                  If (minute & binaryMask)
                      DrawText "1", xpos,25
                  Else
                      DrawText "0", xpos,25
                  EndIf
                  
                  '秒
                  If (second & binaryMask)
                      DrawText "1",xpos,45
                  Else
                      DrawText "0",xpos,45
                  EndIf
              Next
          
              '将文本颜色设为红色,表示十进制时间
              SetColor(255,0,0)
              DrawText "Decimal: " + CurrentTime(),5,65
              '将其余部分文本颜色设置回白色
              SetColor(255,255,255)
          
              Flip
          
              '等待半秒钟
              WaitTimer(secondTimer)
              If KeyHit(KEY_ESCAPE) Then Exit
          Forever
          

          使用Blitz編寫的軟件[編輯]

          影響[編輯]

          2011年,BRL發布了一種新的跨平台編程語言Monkey和第一個官方模塊Mojo。Monkey的語法與BlitzMax類似,但它不是直接將源碼編譯成匯編代碼,而是直接將Monkey源文件翻譯成所選語言、框架或平台的源代碼,例如Mac OS XiOS、Android、HTML5Adobe Flash

          Monkey X的開發已經停止,取而代之的是Monkey 2,這是由Mark Sibly製作的更新版本的語言。

          注釋[編輯]

          1. ^ 根據新聞稿,大約為1993年[2]
          2. ^ 當地的Amiga遊戲出版商

          參考[編輯]

          1. ^ The Official Blitz Website. www.blitzbasic.com. (原始內容存檔於2017-06-03). 
          2. ^ Blitz Basic 2. AmigaReport. [2020-04-30]. (原始內容存檔於2022-03-31). 
          3. ^ AmiBlitz. GitHub. [2022-02-18]. (原始內容存檔於2022-02-18). 
          4. ^ Blitz3D source now available on Github!. [2022-02-18]. (原始內容存檔於2016-09-06). BlitzBasic.com Aug 2014
          5. ^ Blitz News. www.blitzbasic.com. [2007-12-12]. (原始內容存檔於2008-01-26). 
          6. ^ BlitzMax update 1.26 now available!. www.blitzbasic.com. [2011-01-11]. (原始內容存檔於2011-05-26). 
          7. ^ BlitzMax V132 for Windows and MacIntel now up! 網際網路檔案館存檔,存檔日期2011-05-26. on blitzbasic.com
          8. ^ BlitzPlus Source Code Released 網際網路檔案館存檔,存檔日期2016-07-16. by simonh (2014-04-29)
          9. ^ Blitz3D open sourced! 網際網路檔案館存檔,存檔日期2016-09-06. on Blitz3D Forums by (2014)
          10. ^ Blitz3D Now Free and Open Source! 網際網路檔案館存檔,存檔日期2016-07-16. by simonh (2014-08-03)
          11. ^ blitz3d頁面存檔備份,存於網際網路檔案館) on GitHub
          12. ^ blitzmax頁面存檔備份,存於網際網路檔案館) on GitHub
          13. ^ IGN. Worms Blast Preview 網際網路檔案館存檔,存檔日期2007-02-18. on ign.com

          外部連結[編輯]