Blitz BASIC

From Wikipedia, the free encyclopedia
(Redirected from Blitz Basic)
Jump to navigation Jump to search

Blitz Basic
DeveloperBlitz Research
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemAmigaOS
    Microsoft Windows
    Available inEnglish
    TypeGame creation system
    Licensezlib License
    Websiteblitzresearch.itch.io

    Blitz BASIC is the programming language dialect of the first Blitz[1] compilers, devised by New Zealand–based developer Mark Sibly. Being derived from BASIC, Blitz syntax was designed to be easy to pick up for beginners first learning to program. The languages are game-programming oriented, but are often found general-purpose enough to be used for most types of applications. The Blitz language evolved as new products were released, with recent incarnations offering support for more advanced programming techniques such as object-orientation and multithreading. This led to the languages losing their BASIC moniker in later years.[2]

    History

    [edit | edit source]

    The first iteration of the Blitz language was created for the Amiga platform and published by the Australian firm Memory and Storage Technology. Returning to New Zealand, Blitz BASIC 2 was published several years later (around 1993 according this press release [3]) by Acid Software, a local Amiga game publisher. Since then, Blitz compilers have been released on several platforms. Following the demise of the Amiga as a commercially viable platform, the Blitz BASIC 2 source code was released to the Amiga community. Development continues to this day under the name AmiBlitz.[4]

    BlitzBasic

    [edit | edit source]

    Idigicon published BlitzBasic for Microsoft Windows in October 2000. The language included a built-in API for performing basic 2D graphics and audio operations. Following the release of Blitz3D, BlitzBasic is often synonymously referred to as Blitz2D.

    Recognition of BlitzBasic increased when a limited range of "free" versions were distributed in popular UK computer magazines such as PC Format. This resulted in a legal dispute between the developer and publisher, which was eventually resolved amicably.

    BlitzPlus

    [edit | edit source]

    In February 2003, Blitz Research Ltd. released BlitzPlus also for Windows. It lacked the 3D engine of Blitz3D, but did bring new features to the 2D side of the language by implementing limited Windows control support for creating native GUIs. Backwards compatibility of the 2D engine was also extended, allowing compiled BlitzPlus games and applications to run on systems that might only have DirectX 1.

    BlitzMax

    [edit | edit source]
    BlitzMax
    Paradigmimperative, object-oriented, modular, reflective
    Designed byMark Sibly
    DeveloperBlitz Research
    First appeared2004
    Final release
    1.51 / 21 September 2015; 10 years ago (2015-09-21)
    Typing disciplineStatic, weak, strong (optional)
    OSWindows, Mac OS X, Linux
    Website{{#property:P856}}
    Dialects
    Official BlitzMax, bmx-ng
    Influenced by
    BlitzBasic
    Influenced
    Monkey

    The first BlitzMax compiler was released in December 2004 for Mac OS X. This made it the first Blitz dialect that could be compiled on *nix platforms. Compilers for Microsoft Windows and Linux were subsequently released in May 2005. BlitzMax brought the largest change of language structure to the modern range of Blitz products by extending the type system to include object-oriented concepts and modifying the graphics API to better suit OpenGL. BlitzMax was also the first of the Blitz languages to represent strings internally using UCS-2, allowing native-support for string literals composed of non-ASCII characters.

    BlitzMax's platform-agnostic command-set allows developers to compile and run source code on multiple platforms. However the official compiler and build chain will only generate binaries for the platform that it is executing on. Unofficially, users have been able to get Linux and Mac OS X to cross-compile to the Windows platform.

    BlitzMax is also the first modular version of the Blitz languages, improving the extensibility of the command-set. In addition, all of the standard modules shipped with the compiler are open-source and so can be tweaked and recompiled by the programmer if necessary. The official BlitzMax cross-platform GUI module (known as MaxGUI) allows developers to write GUI interfaces for their applications on Linux (FLTK), Mac (Cocoa) and Windows. Various user-contributed modules extend the use of the language by wrapping such libraries as wxWidgets, Cairo, and Fontconfig as well as a selection of database modules. There are also a selection of third-party 3D modules available namely MiniB3D[5] - an open-source OpenGL engine which can be compiled and used on all three of BlitzMax's supported platforms.

    In October 2007, BlitzMax 1.26 was released which included the addition of a reflection module.[6] BlitzMax 1.32 shipped new threading and Lua scripting modules and most of the standard library functions have been updated so that they are Unicode-friendly.[7]

    Blitz3D SDK

    [edit | edit source]

    Blitz3D SDK is a 3D graphics engine based on the engine in Blitz3D. It was marketed for use with C++, C#, BlitzMax, and PureBasic, however it could also be used with other languages that follow compatible calling conventions.

    Max3D module

    [edit | edit source]

    In 2008, the source code to Max3D – a C++-based cross-platform 3D engine – was released under a BSD license. This engine focused on OpenGL but had an abstract backend for other graphics drivers (such as DirectX) and made use of several open-source libraries, namely Assimp, Boost, and ODE.

    Despite the excitement in the Blitz community of Max3D being the eagerly awaited successor to Blitz3D, interest and support died off soon after the source code was released and eventually development came to a halt. There is no indication that Blitz Research will pick up the project again.

    Open-source release

    [edit | edit source]

    BlitzPlus was released as open-source on 28 April 2014 under the zlib licence on GitHub.[8][9] Blitz3D followed soon after and was released as open-source software on 3 August 2014.[10][11] BlitzMax was later released as open-source software on 21 September 2015.[12]

    Reception

    [edit | edit source]

    Blitz Basic 2.1 was well received by Amiga magazines. CU Amiga highlighted its ability to create AmigaOS compliant applications and games (unlike AMOS Basic)[13] and Amiga Shopper called it a powerful programming language.[14]

    Examples

    [edit | edit source]

    A "Hello, World!" program that prints to the screen, waits until a key is pressed, and then terminates:

    Print "Hello, World!" ; Prints to the screen.
    WaitKey()             ; Pauses execution until a key is pressed.
    End                   ; Ends Program.
    

    Program that demonstrates the declaration of variables using the three main data types (strings, integers and floats) and printing them onto the screen:

    name$        = "John"   ; Create a string variable ($) 
    age          = 36       ; Create an integer variable (No Suffix)
    temperature# = 27.3     ; Create a float variable (#)
    
    print "My name is " + name$ + " and I am " + age + " years old."
    print "Today, the temperature is " + temperature# + " degrees."
    
    Waitkey()               ; Pauses execution until a key is pressed.
    End                     ; Ends program.
    

    Program that creates a windowed application that shows the current time in binary and decimal format. See below for the BlitzMax and BlitzBasic versions:

    BlitzBasic version BlitzMax version
    AppTitle "Binary Clock"
    Graphics 150,80,16,3
    
    ;create a timer that means the main loop will be
    ;executed twice a second
    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
    
     	;should do this otherwise the PM dot will be
     	;left up once the clock rolls past midnight!
     	Cls
    
     	Color(0,255,0) ;make the text green for the PM part
     	If PM = 1 Then Text 5,5,"PM"
     	;set the text colour back to white for the rest
     	Color(255,255,255)
    
     	For bit=0 To 5
            xpos=20*(6-bit)
            binaryMask=2^bit
    
            ;do hours
            If (bit<4)
                If (hour And binaryMask)
                    Text xpos,5,"1"
                Else
                    Text xpos,5,"0"
                EndIf
            EndIf
    
            ;do the minutes
            If (minute And binaryMask)
                Text xpos,25,"1"
            Else
                Text xpos,25,"0"
            EndIf
    
            ;do the seconds
            If (second And binaryMask)
     			Text xpos,45,"1"
            Else
     			Text xpos,45,"0"
            EndIf
        Next
    
        ;make the text red for the decimal time
        Color(255,0,0)
        Text 5,65,"Decimal: " + CurrentTime$()
        ;set the text back to white for the rest
        Color(255,255,255)
    
        ;will wait half a second
        WaitTimer(secondTimer)
    
    Forever
    
    Import BRL.Timer
    Import BRL.TimerDefault
    AppTitle = "Binary Clock"
    Graphics 145,85
    
    'create a timer that means the main loop will be
    'executed twice a second
    Local secondtimer:TTimer = CreateTimer(2)
    Local Hour:Int
    Local Minute:Int
    Local Second:Int
    Local PM:Int
    local bit:Int
    local xpos:Int
    Local binaryMask:Int
    
    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
    
        'should do this otherwise the PM dot will be
        'Left up once the clock rolls past midnight!
        Cls
    
        SetColor(0,255,0) 'make the text green For the PM part
        If PM = 1 Then DrawText "PM",5,5
        'set the text colour back To white For the rest
        SetColor(255,255,255)
    
        For bit=0 Until 6
            xpos=20*(6-bit)
            binaryMask=2^bit
    
            'do hours
            If (bit < 4)
                If (hour & binaryMask)
                    DrawText "1",xpos,5
                Else
                    DrawText "0",xpos,5
                EndIf
            EndIf
    
            'do the minutes
            If (minute & binaryMask)
                DrawText "1", xpos,25
            Else
                DrawText "0", xpos,25
            EndIf
    
            'do the seconds
            If (second & binaryMask)
                DrawText "1",xpos,45
            Else
                DrawText "0",xpos,45
            EndIf
        Next
    
        'make the text red For the decimal time
        SetColor(255,0,0)
        DrawText "Decimal: " + CurrentTime(),5,65
        'set the text back To white For the rest
        SetColor(255,255,255)
    
     	Flip
    
        'will wait half a second
        WaitTimer(secondTimer)
     	If KeyHit(KEY_ESCAPE) Then Exit
    Forever
    

    Software written using BlitzBasic

    [edit | edit source]

    Legacy

    [edit | edit source]

    In 2011, BRL released a cross-platform programming language called Monkey and its first official module called Mojo. Monkey has a similar syntax to BlitzMax, but instead of compiling direct to assembly code, it translates Monkey source files directly into source code for a chosen language, framework or platform e.g. Windows, Mac OS X, iOS, Android, HTML5, and Adobe Flash.

    Since 2015 development of Monkey X has been halted in favour of Monkey 2, an updated version of the language by Mark Sibly.

    The developer of Blitz BASIC, Mark Sibly, died in early December 2024.[16][17]

    References

    [edit | edit source]
    1. ^ The word "Blitz" means "lightning" in German.
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ BlitzMax V132 for Windows and MacIntel now up! Archived 26 May 2011 at the Wayback Machine on blitzbasic.com
    8. ^ BlitzPlus Source Code Released Archived 16 July 2016 at the Wayback Machine by simonh (2014-04-29)
    9. ^ Blitz3D open sourced! Archived 6 September 2016 at the Wayback Machine on Blitz3D Forums by (2014)
    10. ^ Blitz3D Now Free and Open Source! Archived 16 July 2016 at the Wayback Machine by simonh (2014-08-03)
    11. ^ blitz3d on GitHub
    12. ^ blitzmax on GitHub
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    15. ^ IGN. Worms Blast Preview Archived 18 February 2007 at the Wayback Machine on ign.com
    16. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    17. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).

    Further reading

    [edit | edit source]
    • NRS Developer Book for Blitz Basic, 1997.
    NRS Developer Book Vol I - Photo of Book Cover
    NRS Developer Book Vol I - Photo of Book Cover
    [edit | edit source]