4. Переменные

Переменная — это область оперативной памяти, выделенная компьютером и содержащая в себе определенное значение.
Размер выделяемой памяти зависит от типа создаваемой переменной. В большинстве случаев переменные требуют явной инициализации.
Инициализация — это присвоение определённого значения созданной переменной.
Например:
x = 0
BGT поддерживает пять основных типов переменных:

  • int — целочисленный тип.
  • float и double — тип переменных с плавающей точкой. (Вещественный тип)
  • bool — логический тип.
  • string — строковой тип.
  • const — константы.

Объявление переменных

Перед тем, как создать переменную, вы должны определиться с её типом, после чего указать этот тип.
Каждая переменная должна иметь своё имя, оно указывается после типа.
Обратите внимание:
Имя переменной может содержать символы от a до z , числа и знак подчеркивания.
Но оно не должно начинаться с чисел и знака подчёркивания.
Рассмотрим пример:
string name;
Данная строка сообщает BGT, что мы хотим создать переменную строкового типа (string) и присвоить ей имя name.
Точка с запятой после имени переменной обозначает переход к выполнению следующей строки кода.
Теперь мы имеем неинициализированную переменную, и можем присвоить ей значение.
Это можно сделать, указав значение на той же строке после знака равно, и взяв текст в кавычки.
Например:
string name = "Вася Пупкин";
Теперь наша переменная инициализирована и содержит в себе значение «Вася Пупкин».
Что можно делать с этим значением, вы узнаете из следующих разделов данного руководства.

int

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

  • * — умножение

  • / — деление

  • + — сложение

  • — — вычитание

Взгляните на следующий пример:
int apples = 5;
int bananas = 2;
int oranges = 8;
int fruit_basket = apples + bananas + oranges; (=15)
Здесь, Вы видите четыре переменные.
Первой даём имя яблоки, второй — бананы, третьей — Апельсины, а последней — корзина с фруктами, в которую мы сложили 3 предыдущие.
В своих примерах вы так же можете использовать круглые скобки.
Здесь они будут показывать порядок действий так же, как это делается в математических выражениях.
Демонстрируем вам ещё один пример использования целочисленных переменных.
Он не имеет никакого практического использования; Только показывает гибкость целочисленных переменных и как они могут использоваться, чтобы выполнить вычисления, не входящие в регулярную математику.
int x = 3;
x = x * 3;
int y = 8;
int z = x / y;
z += x - 1;
x *= z + 4;
Выражения типа x += 1 эквивалентны выражениям x = x + 1 и используются для краткой записи подобных выражений.
Имеется один дополнительный арифметический оператор, который Вы можете использовать — это оператор Модуля.
Обозначается знаком процента (%), и может также использоваться со знаком = .
Модуль выделяет остаток при делении одного числа на другое.
Приведем пример :
int x = 11;
x %= 3;
В этом случае x будет равен 2, так как 11 разделенное на 3 равняется 3 и 2 в остатке.
2 — это результат деления по модулю.
Существуют ещё два оператора, которые часто используются в циклах.
Они известны как оператор декремента (обозначается знаками —) и оператор инкремента (обозначается знаками ++).
Когда мы пишем следующую строку:
x++;
Мы сообщаем BGT, что нужно увеличить x на 1.
Такая операция полезна для экономии времени и ускорения программы.
Но будте осторожны с диапазоном чисел, разрешенных типом , назначенным переменным.
Ниже следует список типов целочисленных переменных и разрешенного диапазона к ним.

  • int8: 8 bit (1 byte) целочисленный тип, диапазон от-128 до 127.
  • int16: 16 bit (2 byte) целочисленный тип, диапазон от -32768 до 32767.
  • int32: 32 bit (4 byte) целочисленный тип, диапазон от -2147483648 до 2147483647.
  • uint8: 8 bit (1 byte) беззнаковый целочисленный тип, диапазон от 0 до 255.
  • uint16: 16 bit (2 byte) беззнаковый целочисленный тип, диапазон от 0 до 65535.
  • uint32: 32 bit (4 byte) беззнаковый целочисленный тип, диапазон от 0 до 4294967295.
  • int: эквивалентен int32.
  • short: эквивалентен int16.
  • long: эквивалентен int32.
  • uint: эквивалентен uint32.
  • ushort: эквивалентен uint16.
  • ulong: эквивалентен uint32.

float и double

Ключевое слово float обозначает простой тип, используемый для хранения 32-разрядных значений с плавающей запятой, которые ещё называются вещественными значениями.
Переменные такого типа могут содержать в себе как отрицательные, так и положительные числа.
Ниже следует список поддерживаемых типов для таких значений.

  • float: 32 bit
  • double: 64 bit

Если вы не знаете, какого вида число будет содержаться в вашей переменной, то лучше всего использовать тип double, так как этот тип поддерживает самый большой диапазон.
Но следует заметить, что если же число превышает допустимый диапазон, то компилятор выдаст предупреждение.
Приведём пример чисел, которые могут содержаться в переменных типа float.

float x = 1.5;
float y = 0.236;
float z = -85.156;

bool

Переменные типа bool, принимают всего 2 значения:

  • true — истина.
  • false — ложь.

При создании переменной типа bool она по умолчанию содержит значение false.
Такие переменные чаще всего используются как переключатели, индикаторы состояния (поэтому иногда их называют флагами) и используются при проверке условий.
Например, вам нужно проверить, открыта ли дверь.
Вот так бы это выглядело в коде:
bool door_opened = true;
if(door_opened == false)
{
// дверь заперта.
}
if(door_opened == true)
{
// Можно входить.
}
Если надо проверить переменную на true, то для сокращения условия можно писать вот так:
if(door_opened)
{
// Можно входить.
}
А если переменную надо проверить на false, то условие можно сократить так:
if(!door_opened)
{
// Дверь заперта.
}
В этом фрагменте используется логическая операция «не», которая обозначается восклицательным знаком (!).
Ниже следуют таблицы логических операций и значений, получаемых при работе с этими операциями.

Логическая операция И (AND)

Обозначение AND: &&
Логическая операция И выполняется с двумя переменными, назовем их a и b.
Результат выполнения логической операции И будет равен true, если a и b равны true, а во всех остальных (других) случаях, результат будет равен false.
Посмотрите пример истинности логической операции and.

bool a; bool b; a && b;
false false false
false true false
true false false
true true true

Логическая операция ИЛИ (OR)

Обозначение OR: ||
Логическая операция ИЛИ выполняется с двумя переменными (a и b).
Результат выполнения логической операции ИЛИ будет равен false, если a и b равны false, а во всех остальных случаях результат равен true.
Посмотрите пример истинности логической операции OR.

bool a; bool b; a || b;
false false false
false true true
true false true
true true true

Логическая операция НЕ (not)

Обозначение NOT: !
Эта логическая операция выполняется с одной переменной.
Результат выполнения этой логической операции напрямую зависит от состояния переменной.
Если переменная находилась в состоянии false, то результат выполнения NOT будет равен true, и наоборот.
Посмотрите пример истинности логической операции НЕ.

bool a; !a(отрицание a)
false true
true false

string

Переменные строкового типа (string) очень отличаются от переменных числовых типов, которые мы рассмотрели в предыдущих разделах данной главы.
Они очень полезны, и скоро вы в этом убедитесь.
Переменная типа string (строка) может содержать в себе как строку текста, так и отдельные символы.
Следовательно, строковые переменные могут содержать, например, имя игрока, путь к файлу на жёстком диске, содержимое текстового файла и т.д.
Когда вы присваиваете такой переменной какое-либо значение, не забывайте окружать текст с двух сторон кавычками.
Это нужно для того, чтобы компилятор видел, где находится код, а где текст, который обрабатывать ненужно.
В главе 3, где мы учились выводить текст на экран, мы использовали переменные строкового типа.
Далее мы вызывали функцию печати текста на экране и в круглых скобках писали между кавычками либо текст, который нужно было напечатать, либо просто указывали имя переменной, содержащей какой-то текст.
Ниже приведён пример инициализации строковой переменной и печати текста на экране.
string my_name = "John Doe";
alert("Меня зовут", my_name);
Как вы видите, в функции печати текста на экране мы заполнили первый параметр, отвечающий за заголовок окна простым текстом, а в качестве второго параметра мы передали имя переменной, содержащей в себе текст, присвоенный в начале программы.
Почему же мы не взяли my_name в кавычки?
Если бы мы сделали это, тогда на экране вместо текста, содержащегося в переменной, напечаталось имя самой переменной.
Давайте немного разнообразим наш предыдущий пример.
string my_name = "John Doe";
string message_string = "Меня зовут " + my_name + " и не забудьте это!";
alert("Важная информация", message_string);
Вы спросите, что означает + my_name +?
Данная операция просто вставляет содержимое строковой переменной в то место строки, где она была указана.
Так что ваше сообщение будет следующим:
Меня зовут John Doe и не забудьте это!
Таким образом в строку можно вставлять содержимое не только строковых переменных.
Вы убедитесь в этом, посмотрев на следующий пример.
string my_name = "John Doe";
int age = 23;
string message_string = "Меня зовут " + my_name + ". Мне " + age + " года и не забудьте это!";
alert("Важная информация", message_string);
Ваше сообщение будет выглядеть так:
Меня зовут John Doe. Мне 23 года и не забудьте это!
Вы заметили, как мы вставили в строку содержимое переменной целочисленного типа?
Любая переменная с любым типом может быть вставлена в текст, если её содержимое может быть преобразовано в строку.
Конечно, вы можете написать сообщение непосредственно при вызове функции печати на экран, не создавая отдельной переменной.
Выглядеть это будет так:
string my_name = "John Doe";
int age = 23;
alert("Важная информация", "Меня зовут " + my_name + ". Мне " + age + " года и не забудьте это!");
Результат будет таким же.
Отличие только в количестве строк кода.
Давайте ещё более разнообразим наш пример.
string my_name = "John Doe";
int age = random(5, 50);
string message_string="Меня зовут " + my_name + ". Мне " + age + " Не забудьте это!";
alert("Важная информация", message_string);
При инициализации целочисленной переменной мы использовали функцию random(), поддерживаемой BGT, которая генерирует случайное число в диапазоне, указанном нами в списке передаваемых параметров.
Каждый раз, когда мы будем запускать эту программу, она будет выдавать разные числа.
Теперь давайте рассмотрим способ сложения строк.
string string1 = "Я ";
string string2 = "строка!";
string string3 = string1 + string2;
Первым двум переменным мы присваиваем части строки, а в третью последовательно складываем эти части.
При печати содержимого третьей переменной на экране результат будет таким:
Я строка!
Вы можете выполнять со строковыми переменными точно такие же действия сложения, как и с целочисленными переменными.
Посмотрите на этот пример:
string my_string = "Привет ";
my_string += "мой друг.";
Естественно, теперь переменная my_string будет содержать строку «Привет мой друг».
Существует ряд специальных знаков, которые могут быть включены в текст.
Чтобы компилятор понимал, что эти знаки не следует обрабатывать как строку, нужно записывать эти знаки после символа обратной косой черты \.
Ниже следует список специальных знаков.

  • \\ = \
  • \» = «
  • \n = новая строка.
  • \r = возврат каретки.
  • \t = табуляция.

string string1 = "Это\tстрока,\tиспользующая\tтабуляцию.";
string string2 = "Это\r\nновая\r\nстрока.";
string string3 = "Путь к моей игре: \"C:\\Program Files\\bgt\\my_game\\my_script.bgt\"";
Заметьте, как используются специальные знаки для форматирования текста и печати специальной информации.

const

Константа, инициализированная в начале программы, в отличие от переменной, не может изменять своё значение в ходе выполнения.
Цель использования констант — в удобочитаемости и экономии времени.
Чтобы объявить константу, перед указанием типа переменной вы пишете ключевое слово const.
Посмотрите на следующий пример.
const string snd_ext = ".wav";
sound gun;
sound beep;
sound ambience;
sound music;
gun.load("sounds/gun"+snd_ext);
beep.load("sounds/beep"+snd_ext);
ambience.stream("sounds/wind"+snd_ext);
music.stream("sounds/music"+snd_ext);
Преимущество здесь заключается в том, что если ваша игра стала намного больше и вы решили конвертировать все звуки в .ogg формат, то вам нужно всего лишь изменить значение константы с .wav на .ogg.
Некоторые функции BGT в качестве параметров принимают константы, а при их вызове на месте этого параметра нужно указать имя константы.
Например, при вызове функции открытия файла в качестве параметра, отвечающего за метод записи в файл, удобней писать write, чем 2.
Это облегчит запоминание методов, поддерживаемых функцией открытия файлов.
То же самое может быть и в других функциях, в том числе и в ваших.

Назад | Содержание | Вперёд

Поделитесь с друзьями

WordPress Lessons