Blitz Basic
Blitz BASIC是由新西蘭程序員Mark Sibly設計的第一個Blitz系列編程語言。Blitz的語法基於BASIC,適合初學者且易於掌握。Blitz系列語言面向遊戲變成,但通常被認為是通用語言,足以用於大多數類型的應用程序。Blitz隨着新產品的發布和發展,新版本為更高級的編程技術提供了支持,例如面向對象和多線程。這讓這系列的語言在後來脫離了BASIC的名字。[1]
開發者 | Blitz Research |
---|---|
編程語言 | 使用C++編寫,但語言風格屬於BASIC |
操作系統 | Microsoft Windows |
平台 | Microsoft Windows |
語言 | 英語 |
類型 | 遊戲製作引擎 |
許可協議 | zlib許可證 |
網站 | www |
歷史
Blitz語言的第一個版本是為Amiga平台製作的,由澳大利亞公司Memory and Storage Technology發布。回到新西蘭的幾年後,[注 1]Acid Software[注 2]發布了Blitz BASIC 2。從此,Blitz編譯器在多個平台上發布。隨着Amiga在商業平台上的消亡,Blitz BASIC 2源碼在Amiga社區發布,至今仍以AmiBlitz的名義發展。[3]
BlitzBasic
Idigicon在2000年10月發布,面向Microsoft Windows系統。該語言包括一個用於處理基本2D圖形和音頻的內置API。隨着Blitz3D的發布,BlitzBasic通常被稱為Blitz2D。
當英國流行的計算機雜誌例如PC Format上發布了有限制的「免費」版本時,人們對於BlitzBasic的認識變深。這雖然令開發商和出版商之間發生法律糾紛,但最終友好解決。
Blitz3D
設計者 | Mark Sibly |
---|---|
實作者 | Blitz Research Ltd. |
面市時間 | 2001 |
操作系統 | Microsoft Windows |
網站 | www |
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
編程範型 | 指令式編程,面向對象,模塊化編程,反射式編程 |
---|---|
設計者 | Mark Sibly |
實作者 | Blitz Research Ltd. |
面市時間 | 2004 |
型態系統 | 靜態,弱類型,強類型(可選) |
操作系統 | Microsoft Windows, Mac OS X, Linux |
網站 | www |
衍生副語言 | |
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界面。各種用戶貢獻的模塊例如wxWidgets、Cairo和Fontconfig等一系列數據庫模塊拓展了該語言的使用範圍。還有一些第三方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、Boost和ODE。
儘管在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編寫的軟件
- Eschalon: Book I - BlitzMax
- Eschalon: Book II - BlitzMax
- Fairway Solitaire - BlitzMax
- Grid Wars - BlitzMax
- TVTower (MadTV的開源克隆) - BlitzMax
- Platypus - Blitz2D(Mac端為BlitzMax)
- SCP - 收容失效 - Blitz3D
- Worms (1995年的電子遊戲) - originally titled Total Wormage and developed in Blitz Basic on the Amiga before its commercial release[13]
影響
2011年,BRL發布了一種新的跨平台編程語言Monkey和第一個官方模塊Mojo。Monkey的語法與BlitzMax類似,但它不是直接將源碼編譯成匯編代碼,而是直接將Monkey源文件翻譯成所選語言、框架或平台的源代碼,例如Mac OS X、iOS、Android、HTML5和Adobe Flash。
Monkey X的開發已經停止,取而代之的是Monkey 2,這是由Mark Sibly製作的更新版本的語言。
注釋
參考
- ^ The Official Blitz Website. www.blitzbasic.com. (原始內容存檔於2017-06-03).
- ^ Blitz Basic 2. AmigaReport. [2020-04-30]. (原始內容存檔於2022-03-31).
- ^ AmiBlitz. GitHub. [2022-02-18]. (原始內容存檔於2022-02-18).
- ^ Blitz3D source now available on Github!. [2022-02-18]. (原始內容存檔於2016-09-06).BlitzBasic.com Aug 2014
- ^ Blitz News. www.blitzbasic.com. [2007-12-12]. (原始內容存檔於2008-01-26).
- ^ BlitzMax update 1.26 now available!. www.blitzbasic.com. [2011-01-11]. (原始內容存檔於2011-05-26).
- ^ BlitzMax V132 for Windows and MacIntel now up! 網際網路檔案館的存檔,存檔日期2011-05-26. on blitzbasic.com
- ^ BlitzPlus Source Code Released 網際網路檔案館的存檔,存檔日期2016-07-16. by simonh (2014-04-29)
- ^ Blitz3D open sourced! 網際網路檔案館的存檔,存檔日期2016-09-06. on Blitz3D Forums by (2014)
- ^ Blitz3D Now Free and Open Source! 網際網路檔案館的存檔,存檔日期2016-07-16. by simonh (2014-08-03)
- ^ blitz3d (頁面存檔備份,存於網際網路檔案館) on GitHub
- ^ blitzmax (頁面存檔備份,存於網際網路檔案館) on GitHub
- ^ IGN. Worms Blast Preview 網際網路檔案館的存檔,存檔日期2007-02-18. on ign.com
外部連結
- Blitz Research subsite (頁面存檔備份,存於網際網路檔案館) on itch.io (BlitzPlus, Blitz 3D, Monkey X, Monkey 2)
- Monkey X subsite (頁面存檔備份,存於網際網路檔案館) (開源)
- Monkey 2 subsite (頁面存檔備份,存於網際網路檔案館)
- blitz-research (Mark Sibly) (頁面存檔備份,存於網際網路檔案館) on GitHub (BlitzPlus, BlitzMax, Blitz3D, Monkey, BlitzMax, Blitz3D for MSVC-CE 2017)
- Blitz官方網站 (2017年6月3日存檔)
- Monkey X網站 (2017年7月15日存檔)