Blitz Basic

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

## 歷史

Blitz語言的第一個版本是為Amiga平台製作的，由澳大利亞公司Memory and Storage Technology發布。回到紐西蘭的幾年後，根據新聞稿，大約為1993年Acid Software當地的Amiga遊戲出版商發布了Blitz BASIC 2。從此，Blitz編譯器在多個平台上發布。隨著Amiga在商業平台上的消亡，Blitz BASIC 2源碼在Amiga社區發布，至今仍以AmiBlitz的名義發展。

### BlitzBasic

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

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

### Blitz3D

<image>

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編寫。

### BlitzPlus

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

### BlitzMax

第一個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，一個開源的OpenGL引擎，可以在BlitzMax支持的所有三個平台上編譯和運行。

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

### 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上以開源形式發布。Blitz3D隨後於2014年8月3日以開源形式發布， BlitzMax後來於2015年9月21日以開源形式發布。

## 示例

一個在螢幕上列印Hello World，並按任意鍵結束的示例：

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

以下聲明變量並列印至螢幕的演示程序使用三種主要數據類型（字串、整數和浮點）：

```blitzbasic
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版本

```blitzbasic
 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
 ;#####################################################
```

```blitzmax
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
- 百戰天蟲 - originally titled Total Wormage and developed in Blitz Basic on the Amiga before its commercial release

## 影響

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

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

## 外部連結

- 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日存檔）

## 基本資料

- 頭銜：BlitzBasic
- 日語原文：BlitzBasic
- 開發者：Blitz Research
- 停產日期：Yes
- 程式語言：使用C++編寫，但語言風格屬於BASIC
- 作業系統：Microsoft Windows
- 平台：Microsoft Windows
- 語言：英語
- 類型：遊戲製作引擎
- 許可協議：zlib許可證
- 網站：www.blitzbasic.com
- 日語原文：Blitz3D
- 發行時間：2001
- 設計者：Mark Sibly
- 開發者： Blitz Research Ltd.
- Yes：1.108c
- Yes：2014年
- 日語原文：BlitzMax
- 編程范型：指令式編程，面向對象，模塊化編程，反射式編程
- 發行時間：2004
- Yes：1.51
- Yes：2015年9月21日
- 類型系統：靜態，弱類型，強類型（可選）
- dialects：Official BlitzMax, bmx-ng
- 受影響於：BlitzBasic
- 施影響於：Monkey
- 作業系統：Microsoft Windows, Mac OS X, Linux