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 在2000年10月发布,面向Microsoft Windows 系统。该语言包括一个用于处理基本2D图形和音频的内置API。随着Blitz3D的发布,BlitzBasic通常被称为Blitz2D。
当英国流行的计算机杂志例如PC Format 上发布了有限制的“免费”版本时,人们对于BlitzBasic的认识变深。这虽然令开发商和出版商之间发生法律纠纷,但最终友好解决。
Blitz3D
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编译器于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编写的软件
影响
2011年,BRL发布了一种新的跨平台编程语言Monkey和第一个官方模块Mojo。Monkey的语法与BlitzMax类似,但它不是直接将源码编译成汇编代码,而是直接将Monkey源文件翻译成所选语言、框架或平台的源代码 ,例如Mac OS X 、iOS 、Android、HTML5 和Adobe Flash 。
Monkey X的开发已经停止,取而代之的是Monkey 2,这是由Mark Sibly制作的更新版本的语言。
注释
^ 根据新闻稿,大约为1993年[ 2]
^ 当地的Amiga游戏出版商
参考
外部链接
传统 面向过程 带有对象扩展 用于移动设备 微软 第三方类VB