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