Blitz Basic

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

BlitzBasic
開發者Blitz Research
程式語言使用C++編寫,但語言風格屬於BASIC
作業系統Microsoft Windows
平台Microsoft Windows
語言英語
類型遊戲製作引擎英語Game creation system
許可協議zlib許可證
網站www.blitzbasic.com[失效連結]

歷史

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
 
設計者Mark Sibly
實作者Blitz Research Ltd.
釋出時間2001
作業系統Microsoft Windows
網站www.blitzbasic.com  
 
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
型態系統靜態弱類型強類型(可選)
作業系統Microsoft Windows, Mac OS X, Linux
網站www.blitzbasic.com  
衍生副語言
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

外部連結