Blitz BASIC

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:57, 9 июня 2016.
BlitzBasic
BlitzBasicLogo.gif
Спроектировано Марк Сибли, Blitz Research Ltd.
Язык физической реализации Compiled to C++, but the languages are dialects of BASIC
Платформа Кроссплатформенный
OS IDE for Microsoft Windows, Mac OS X, Linux
Лицензия zlib license
Портал: www.blitzbasic.com

Blitz BASIC -(произносится [ blɪts ˈbeɪsɪk ])коммерческий игровой движок, разработанный Марком Сибли, а также среда разработки с языком Blitz BASIC и скриптовый язык для создания игр. Оригинальная разработка компилятора Blitz BASIC велась для ПК Amiga, но на сегодняшний день он поддерживает уже несколько платформ, в том числе Microsoft Windows, Mac OS X и Linux. В версии для Microsoft Windows поддерживается DirectX 7.

История

Первая версия языка Blitz Basic была создан для платформ Amiga и опубликована австралийской фирмой Memory и Storage Technology. Появляясь в Новой Зеландии, Blitz2 была опубликована несколько лет спустя компанией Acid Software (одна из компаний Amiga). С тех пор, Blitz компиляторы выпускались на нескольких платформах.

Версии

В течение своего существования Blitz Basic притерпел множество изменений и перерождений. В настоящее время поддерживается основные три формы языка Blitz Basic.

  • BlitzMax
  • Blitz3D
  • BlitzPlus

BlitzMax

BlitzMax - игровой движок, разработаный Марком Сибли, ориентированый в первую очередь на разработку 2D приложений. BlitzMax использует расширеную версию языка basic. Благодаря модулям функционал BlitzMax можно расширять до бесконечности. Из графических API может использовать и DirectX и OpenGL. Несколько встроеных звуковых API (DirectSound, FreeAudio) Имеет удобный модуль GNet для быстрого создания сетевых приложений.

Основные возможности

  • 2 режима интерпретирования кода Strict и SuperStrict
  • Связвные списки
  • Указатели на функции
  • Наследование и полиморфизм
  • Полностью динамические массивы
  • Внешняя поддержка языков для взаимодействия с C# , C++ или Assembler

Тип данных BlitzMax

Описание Название Мин. значение Макс. значение
8 битное числовое Byte 0 255
16 битное числовое Short 0 65535
32 битное числовое Int −2^31 +2^31-1
64 битное числовое Long −2^63 +2^63-1
32 битное вещественное Float (+/-)10^-38 (+/-)10^38
64 битное вещественное Double (+/-)10^-308 (+/-)10^308
16 бит юникод полнотекстовое String - -
Объект (Тип) obj:TObject - -
Массив array{:type}[..] - -
Функция Function:{return type}(Parameters) - -
Указатель Pointer ValueType Ptr - -

Операторы

BlitzMax поддерживает следующие операторы. Операторы сгруппированы по уровням приоритета, начиная с приоритета самого высокого уровня, заканчивая самым низким:

Оператор Синтаксис
Под выражение ( Выражение )
New object New Typename
Literal Значение
Identifier Значение
Self object Self
Super object Super
Null значение Null
Pi(Число Пи) Pi
True(Истина) True
False(Ложь) False
Minimum(Нахождение минимума) Min ( Выражение1 , Выражение2 )
Maximum(Нахождение максимума) Max ( Выражение1 , Выражение2 )
Доступ к члену Выражение . Идентификатор
Индексация Выражение [ Индекс выражения ]
Вызов Выражение ( Параметры )
Negate - Выражение
Posate + Выражение
Bitwise complement ~ Выражение
Boolean not Not Выражение
Absolute value Abs Выражение
Sign Sgn Выражение
Value byte size SizeOf Выражение
Variable address Varptr Variable
Convert type expression Type Выражение
Power Выражение ^ Выражение
Multiply Выражение * Выражение
Divide Выражение / Выражение
Remainder Выражение Mod Выражение
Bitwise shift left Выражение Shl Выражение
Bitwise shift right Выражение Shr Выражение
Arithmetic shift right Выражение Sar Выражение
Add Выражение + Выражение
Subtract Выражение - Выражение
Bitwise and Выражение & Выражение
Bitwise or Выражение
Bitwise exclusive or Выражение ~ Выражение
Equal Выражение = Выражение
Not equal Выражение <> Выражение
Less than Выражение < Выражение
Greater than Выражение > Выражение
Less than or equal Выражение <= Выражение
Greater than or equal Выражение >= Выражение
Conditional and Выражение And Выражение
Conditional or Выражение Or Выражение

Переменные

Переменные используются для хранения некоторых значений, которые изменяются во время выполнения программы.

Переменные должны быть объявлены в программе перед их использованием. Объявление переменной означает, определить имя и её тип, и, необязательно, начальное значение.

Синтаксис объявления переменной:

 Наименование доступа Идентификатор: Тип = Выражение

Несколько переменных одного типа могут быть объявлены через запятую:

Local a,b,c: String

Если тип переменной не указан, переменная по умолчанию является типом Int. Если начальное значение переменной опущено, то переменной присваивается начальное значение Null.

Есть 3 вида переменной, каждый из которых отличается от того, как и где переменная хранится:

Local переменные

Локальные переменные используются для хранения временных значений, что в конечном итоге будет отброшено. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока[1]. Блок кода может быть представлен в виде:

  • Тело функции или цикла
  • Тело if/then/else блока
  • Тело case или default блоков

Чтобы объявить локальную переменную, используйте Local определение:

Local int_var
Local string_var:String="Str",float_var:Float=10.5

Global переменные

Глобальные переменные - переменные, областью видимости которых является вся программа[2].

Чтобы объявить глобальную переменную, используйте Global определение:

Global int_var
Global string_var:String="Str",float_var:Float=10.5

Field переменные

Field переменные объявляются внутри определенных пользователем типов с использованием Field определения:

Field int_var
Field string_var:String="Str",float_var:Float=10.5

Функции

Фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы.[3]

Синтаксически функция описывается:

Function Идентификатор : Возвращаемый тип ( Параметры )
Тело функции...
End Function

Если Возвращаемый тип опущен, функция по умолчанию возвращаtn тип Int.

Параметры, которые принимает функция должны быть разделены запятой. Синтаксис каждого параметра аналогичен объявлению переменной: Идентификатор : Тип. Параметры функции могут быть использованы внутри неё таким же образом, как локальные переменные.

Оператор Return' используется для возврата значения из функции.

Пример простой функции, которая складывает два целочисленных числа и возвращает сумму:

Function AddInts:Int( x:Int,y:Int )
Return x+y
End Function

Эта функция может быть вызвана из другого места программы:

Print AddInts( 10,20 )  'Напечатать 30!

Параметрам функции может быть присвоено значение по умолчанию, которое аналогично инициализации переменной Значения по умолчанию: Идентификатор  : Тип = Постоянное выражение .

При вызове функции параметры по умолчанию могут быть опущены:

Function IncInt:Int( n:Int,p:Int=1 )
Return n+p
End Function
Print IncInt( 1 )   'Напечатать 2
Print IncInt( 1,3 ) 'Напечатать 4

Blitz3D

Blitz3D — коммерческий игровой движок, разработанный Марком Сибли, а также среда разработки с языком Blitz BASIC и скриптовый язык для создания игр. Оригинальная разработка компилятора Blitz BASIC велась для ПК Amiga, но на сегодняшний день он поддерживает уже несколько платформ, в том числе Microsoft Windows, Mac OS X и Linux. В версии для Microsoft Windows поддерживается DirectX 7.

Тип данных

Blitz3d имеет следующие типы данных:

  • числовые
  • строковые

Существует 2 типа числовых:

  • целые
  • вещественные.

Целый тип называется Integer, вещественный - Float, а строковый - String. Целый тип имеет значения в диапазоне(отрезке) от -2147483648 до 2147483647 (4 байта на число), а вещественный 4 байт на число.

Вещественный тип - это дробно-рациональное число, записанное в десятичном виде, где запятой является точка. Оно может иметь шесть цифр после точки или записано в экспоненциальном виде. Например, 0.05 или .05 (ноль отбрасывается), или 5.e-001.

Строковый тип - это строка различных символов. Значения этих типов данных хранятся в оперативной памяти компьютера и занимают столько места, сколько необходимо в зависимости от типа. Типом обладают переменные, константы, массивы, структуры (типы).

Переменные

Переменной называется величина, значение которой может меняться во время выполнения программы. Переменные бывают числового и строкового типа. Переменные типа Integer, которым не присвоили ничего, имеют значение 0. Для типа Float - 0.0, а переменные типа String имеют пустую строку.

Пример задания переменных:

a=90
i#=.5
$="Как дела?"

По доступности переменные бывают глобальные и локальные. Глобальные переменные - это переменные, которые используется в любой части программы (в главной программе и в процедурах и функциях), они объявлются с помощью Global. Локальные переменные - это переменные, которые используются внутри функций и процедур, объявляются с помощью Local. Имена локальных переменных на разных уровнях программы могут совпадать, но их значения будут разными. Глобальные переменные объявляют только в главной программе до их использования.

Пример глобальной переменной:

Global i=5, s$="Hi"

Пример локальной переменной:

Local f, a$="How are you?"

Переменные являются локальными на том уровне программы, где им присвоили в первый раз значение. Переменным и константам можно присвоить значения не только в десятичной системе счисления, но и в двоичной и шестнадцатеричной. Если нужно присвоить число в шестнадцатеричной системе счисления, то перед ним ставят рефикс $. Для двоичного ставят %. Эти префиксы подсказывают компилятору, что числа в шестнадцатеричной или двоичной системе счисления, который преобразует их значения в десятичную форму и заносит в переменную.

Выражения

Выражением называется последовательность операндов, операций и скобок, задающая некоторые вычисления. Операции подразделяются на четыре класса:

  • арифметические
  • логические
  • операции отношения
  • операции сцепления строк (конкатенация) и операции сдвига битов.

Арифметические

Имеется шесть арифметических операций:

  • возведение в степень - "^"
  • умножение - "*"
  • деление -"/"
  • остаток от деления - "mod"
  • сложение - "+"
  • вычитание - "-".

Например:

c=a+b ;сложить a и b, затем занести в c
d=e-f ;из e вычесть f, затем занести в d
g#=r/m ;r разделить на m, затем занести в g
kl=l mod n ;остаток от деления l на n занести в kl
r=c*d;умножить c на d, занести в r
f=r^3 ;возвести в куб r и занести в f

Логические

Логические операции: Отрицание - NOT, конъюнкция (и) - AND, дизъюнкция (или) - OR, исключающее или - XOR. Таблицы логических выражений:

Отрицание - NOT
Значение a Выражение Результат b
a=1 b=NOT a b=0
a=0 b=NOT a b=1
Дизъюнкция - OR
Значение a Значение b Выражение Результат c
a=0 b=0 c=a OR b c=0
a=1 b=0 c=a OR b c=1
a=0 b=1 c=a OR b c=1
a=1 b=1 c=a OR b c=1
Конъюнкция - AND
Значение a Значение b Выражение Результат c
a=0 b=0 c=a OR b c=0
a=1 b=0 c=a OR b c=0
a=0 b=1 c=a OR b c=0
a=1 b=1 c=a OR b c=1
Исключающее или - XOR
Значение a Значение b Выражение Результат c
a=0 b=0 c=a OR b c=0
a=1 b=0 c=a OR b c=1
a=0 b=1 c=a OR b c=1
a=1 b=1 c=a OR b c=0

Логические операции можно выполнять не только с 0 и 1, но и с другими числами. Например, 3 Or 5 даст результат 7. Так как эти значения в компьютере представлены в двоичной форме, то 11 Or 101 есть 111, а это 7.

Операции отношения

Операции отношения:

  • равно - "="
  • не равно - "<>"
  • меньше - "<"
  • больше - ">"
  • меньше или равно - "<="
  • больше или равно - ">=".

Результатом таких операций является 0 (Ложь) или 1 (Истина). К примеру, Print 1>6 даст результат 0, Print 8>5 даст результат 1.

Конкатенация

Чтобы сцепить строки, используют знак "+". Например:

a$="Blitz"
b$="3D"
c$=a$+b$ ;значение переменной c$ будет Blitz3D

Операции сдвигов

Операции сдвига битов в целом значении: Shr и Shl.

Чтобы удалить в числе определённое количество битов слева, используют: число Shr число_битов

Чтобы добавить в число определённое количество нулевых битов слева, используют: число Shl число_битов

Например:

a=15 Shr 2 ;Т. к. 15 в двоичной 1111, то 15 Shr 2 удалит 2 бита слева. Результат будет 11, a присвоится 3.
b=35 Shl 3 ;35 в двоичной 100011, 35 Shl 3 добавит три нуля слева. Результат будет 100011000 b присоится 280
Print a +" "+b

Функции

Функцией называется фрагмент программного кода, обладающий уникальным именем и предназначенный для решения конкретной задачи. Каждая функция имеет своё собственное имя. Функция может быть вызвана многократно из любой области программы. Функция в результате выполнения возвращает некоторое значение. Задаётся функция с помощью Function, затем имя и параметры в скобках через запятую. Эти параметры могут быть любого типа. Завершается функция командой End Function. Внутри тела функции пишутся команды некоторой задачи. Чтобы функция вернула значение, используют Return, затем указывают значение или имя переменной, которая использовалась в функции. Вызывается функция указанием её имени и перечислением используемых значений используемых параметров в скобках. К сожалению, функции нельзя передать массив, как в некоторых языках программирования. Префикс определяет тип функции (%, # или $. Причём, % можно опустить)

Структура функции такова:

Function имя[префикс]([параметр1],[параметр2],...)

команда1

команда2

...

Return значение

End Function

Вызов функции осуществляется так:

имя([знач1],[знач2],...)

Рассмотрим применение функции на конкретном примере. Функция нахождения расстояния между двумя точками:

x1=Input("Введите значение x1 ")
y1=Input("Введите значение y1 ")
x2=Input("Введите значение x2 ")
y2=Input("Введите значение y2 ")
Print rast(x1,y1,x2,y2) ;вывод значения функции

Function rast#(x1,y1,x2,y2) ;функция
r#=sqr((x2-x1)^2+(y2-y1)^2)
Return r# ;функция возвращает значение переменной r
End Function ;конец функции

Здесь выводится значение функции rast. В переменную r заносится значение расстояния и возвращается функции с помощью Return r.

Переменные, которые используются внутри функции - локальные, поэтому удаляются после выполнения функции. Их названия могут совпадать, но значения этих переменных будут разные. Также внутри функции можно использовать глобальные переменные. Замечание! Внутри функций нельзя объявлять другие функции, так как это приведет к ошибке.

Примеры программ

Нello world

Graphics 800,600                 ; - Графический режим 800x600
While Not KeyDown(1)             ; - Начало главного цикла
 Cls()                           ; - Чистим экран
  Text 10, 20, "Hello, World!" ; - Пишем текст "Hello world" в точке 10,20
 Flip()                          ; - Выводим на экран
Wend ; прекращаем цикл при нажатии на Esc
End                              ; конец программы

Нello world с использованием переменных

                   
Graphics 800,600 
Global a$="Hello"
Global b$="World"              
While Not KeyDown(1)                           
 Cls()                          
  Text 0,0,a$+b$
 Flip()                        
Wend
End

Работа с изображениями

                     
Graphics 800,600  
Global Image = LoadImage("picture.bmp")
            
While Not KeyDown(1)                          
 Cls()                          
  DrawImage Image,100,100
 Flip()                        
Wend
End

Работа с трехмерной графикой

                     
Graphics3D 800,600                     ;Устанавливаем графический режим 
Global model = LoadMesh("helloworld.3ds")          ;Загружаем трехмерную модель надписи "Hello, World"
PositionEntity model,0,0,0            ;Устанавливаем модель в точке 0,0,0
Global camera = CreateCamera()             ;Создаем камеру
PositionEntity camera,0,0,-10             ;Устанавливаем камеру чуть позади объекта

While Not KeyDown(1)                         ;Начало цикла  
 Cls()                          ; Очищаем экран
 RenderWorld()                  ; Производим рендер изображения
 Flip()                        ; Выводим на экран
Wend                           ;Конец цикла
End                             ;Конец программы

BlitzPlus

BlitzPlus – это язык программирования и среда разработки 2D-игр и GUI-прилодений под Windows. В комплект инструментария входят такие утилиты и компоненты:

  • Компилятор BlitzPlus
  • IDE
  • Отладчик
  • Шаблоны и примеры
  • Обучающие программы
  • Документация.

Раньше среда стоила денег, но позже разработчики из компании Blitz Research официально выложили лицензионный код для свободного использования, а ещё позже выпустили исходные коды[4].

Сам язык является полноценным решением для разработки 2D-приложений. По синтаксису он является гибридом BASIC/C, в котором более 500 команд. Использует классические конструкции на основе goto и gosub. Он рассчитан на ускорение программирования и минимализацию рутины. В предлагаемом IDE или в вашем собственном решении вы можете легко и быстро собрать приложение любой сложности, которое будет запускаться практически на любой ОС Windows[4].

Собственный 2D-движок основан на качественной работе с двухмерной графикой. Он подходит для реализации отличной пиксельной графики, быстро обрабатываемой практически на всех 2D/3D видеокартах. Движок способен выполнять тысячи операций в секунду. Имеется возможность реализации 3D-объектов, изометрических пространств, эффектов частиц и мн.др[4].

Поддержка GUI в BlitzPlus осуществлена через систему Gadget. Через неё вы можете легко и просто добавлять необходимые компоненты. А собственный Integrated Development Editor (IDE) позволяет редактировать, проверять, отлаживать и собирать вашу программу от одной среды[4].

Литература

  • Learn to Program 2D Games in Blitz Basic by John «Krylar» Logsdon, (2003)
  • Game Programming for Teens by Maneesh Sethi, (2003), ISBN 1-59200-068-1
  • Games Programming for the Absolute Beginner with BlitzMax by Sloan Kelly, ISBN 0-9553771-0-2
  • 3D Game Programming for Teens by Eric Grebler, (2006) ISBN 1-59200-900-X
  • 3D Game Programming for Teens, 2nd edition by Maneesh Sethi, (2009) ISBN 1-59863-843-2

Примечание

  1. Понятие локальной переменной (рус.)
  2. Понятие глобальной переменной (рус.)
  3. Понятие функции (рус.)
  4. 4,0 4,1 4,2 4,3 BlitzPlus 1.47  (рус.)

Ссылки