forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Скриптовик - Банки или текст? (http://forum.boolean.name/showthread.php?t=16661)

Gector 18.04.2012 15:38

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

ffinder 18.04.2012 16:38

Ответ: Скриптовик - Банки или текст?
 
ответ на твой вопрос: банки лучше.
ответ на нужность скриптового языка в Blitz3D - нет.
если очень-очень хочется - Randomize давал ссылку на интеграцию Lua с Blitz3D

Gector 18.04.2012 16:46

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от ffinder (Сообщение 225810)
ответ на твой вопрос: банки лучше.
ответ на нужность скриптового языка в Blitz3D - нет.
если очень-очень хочется - Randomize давал ссылку на интеграцию Lua с Blitz3D

В Blitz3d то может он и не нужен). Но вот для игры бы не помешал).
Игра которая на нем будет строиться - небольшая адвенчура с рпг элементами. Нужен для создания событий и всего прочего.

radiobutton 18.04.2012 17:50

Ответ: Скриптовик - Банки или текст?
 
Напиши его лучше на c#.

Gector 18.04.2012 18:15

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от radiobutton (Сообщение 225824)
Напиши его лучше на c#.

Слово "целесообразность" вообще что обозначает тогда?)
1) Мне нужен он нужен для игры на блице. Если бы я умел на шарпе работать, я эту тему создал бы в другой ветке, и она бы звучала как "подскажите скриптовик", так как на шарпе куда больше решений чем на б3д.
2) На шарпе можно писать под юнити.
Но нужен он на блице.

radiobutton 18.04.2012 18:22

Ответ: Скриптовик - Банки или текст?
 
Тогда используй целочисленные массивы.
Получится что-то вроде ассемблера.

Почувствуешь себя на некоторое время настоящим програмистом.

Скомпилированная на твоем языке программа будит висеть в оперативной памяти в виде целочисленного массива.
Сам код скриптов будит писаться в виде текста.

Еще можно использовать битовый массив. Будит вообще самый быстрый вариант.

Цитата:

Как все настоящие программисты знают, единственной полезной структурой данных является массив. Строки, списки, структуры и наборы — это все разновидности массивов и их можно рассматривать как массивы без усложнения вашего языка программирования.

Gector 18.04.2012 18:32

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от radiobutton (Сообщение 225828)
Тогда используй целочисленные массивы.
Получится что-то вроде ассемблера.

Почувствуешь себя на некоторое время настоящим програмистом.

Скомпилированная на твоем языке программа будит висеть в оперативной памяти в виде целочисленного массива.
Сам код скриптов будит писаться в виде текста.

Целочисленные массивы и ассемблер на блице? Осталось только попробовать одеть штаны пинцетом...

radiobutton 18.04.2012 18:58

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от Gector (Сообщение 225829)
Целочисленные массивы и ассемблер на блице? Осталось только попробовать одеть штаны пинцетом...

Что-то вроде ассемблера, а не ассемблер)

смотри

делаеш набор операций, функций, итд и нумеруеш их

0) ноль означает что в следующей за ним ячейке массива будит тип переменной, а за типом будит следовать значение. И после значения еще один ноль. Хотя он нужен только для строк и нецелых чисел, ведь значения целых чисел можно уместить в одну ячейку.
(1 - int, 2 - float, 3 - string)
1) +
2) -
3) *
4) /
5) равно
6) неравно
7) больше
8 ) меньше
9) присвоить
10) (
11) )
итд
51) if
52) then
53) else
54) endif
итд
100) moveto(x,y)
101) OpenDialog(x); x - номер нпц.

1001) Переменная один целая (для примера название будит "a")
1002) Переменная два целая (для примера название будит "b")
1003) Переменная три целая (для примера название будит "c")
итд

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

Например строка массива:

51 10 1001 1 1002 11 3 1003 7 0 1 15 52 100 0 1 23423 0 1 72346 9 1001 10 1001 1 0 1 2 11 53 9 1001 10 1001 1 0 1 1 11 54

будит означать следующий скрипт:

Код:

if (a+b)*c>15 then
  moveto(23423,72346)
  a:=(a+2) ; Звездные войны на паскале писать можно. Ты же пишешь звездные войны?
else
  a:=(a+1)
endif


Gector 18.04.2012 19:09

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от radiobutton (Сообщение 225830)
Что-то вроде ассемблера, а не ассемблер)

смотри

делаеш набор операций, функций, итд и нумеруеш их

0) ноль означает что в следующей за ним ячейке массива будит тип переменной, а за типом будит следовать значение. И после значения еще один ноль. Хотя он нужен только для строк и нецелых чисел, ведь значения целых чисел можно уместить в одну ячейку.
(1 - int, 2 - float, 3 - string)
1) +
2) -
3) *
4) /
5) равно
6) неравно
7) больше
8 ) меньше
9) присвоить
10) (
11) )
итд
51) if
52) then
53) else
54) endif
итд
100) moveto(x,y)
101) OpenDialog(x); x - номер нпц.

1001) Переменная один целая (для примера название будит "a")
1002) Переменная два целая (для примера название будит "b")
1003) Переменная три целая (для примера название будит "c")
итд

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

Например строка массива:

51 10 1001 1 1002 11 3 1003 7 0 1 15 52 100 0 1 23423 0 1 72346 9 1001 10 1001 1 0 1 2 11 53 9 1001 10 1001 1 0 1 1 11 54

будит означать следующий скрипт:

Код:

if (a+b)*c>15 then
  moveto(23423,72346)
  a:=(a+2) ; Звездные войны на паскале писать можно. Ты же пишешь звездные войны?
else
  a:=(a+1)
endif


Во расписал то :super: . Кстати говоря примерно таким был предыдущий вариант компилирующий все в байт-код. НО! Скрипты в этом случае очень ограничены и не могут никак взаимодействовать. Либо пиши один большой файл, либо компилируй все разом и в строгой очередности, что ну совсем никак не катит. Да и при работе с текстовыми переменными будут большие проблемы.

radiobutton 18.04.2012 19:16

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от Gector (Сообщение 225831)
Во расписал то :super: . Кстати говоря примерно таким был предыдущий вариант компилирующий все в байт-код. НО! Скрипты в этом случае очень ограничены и не могут никак взаимодействовать. Либо пиши один большой файл, либо компилируй все разом и в строгой очередности, что ну совсем никак не катит. Да и при работе с текстовыми переменными будут большие проблемы.

0 3 72 101 108 108 111 32 87 111 114 108 100 0

вот так будит выглядеть "Hello World"
никаких проблем со строковыми переменными.

Почему скрипты ограничены и не могут никак взаимодействовать?
Настоящие програмисты не бояца использовать goto.:)

пишешь несколько модулей. и по порядку их компилиш. ну типа того.

Gector 18.04.2012 19:30

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от radiobutton (Сообщение 225833)
0 3 72 101 108 108 111 32 87 111 114 108 100 0

вот так будит выглядеть "Hello World"
никаких проблем со строковыми переменными.

Почему скрипты ограничены и не могут никак взаимодействовать?
Настоящие програмисты не бояца использовать goto.:)

пишешь несколько модулей. и по порядку их компилиш. ну типа того.

Из одного скрипта нельзя получить данные с другого если скрипт уже переведен в байты. Так как в качестве имени используется порядковый номер то при переводе в байты он не имеет представления о том какой номер у переменной в другом скрипте. Поэтому никак не катит. Все равно нужно уникальное имя для переменной. Тогда просто пропадает суть всей экономии если байтовый код все равно ищет переменные по именам. При том это еще и нагружает его исполнение, так как имена в сущности обрабатываются тем же способом, что и в тексте только путем чтения байтов.

radiobutton 18.04.2012 20:08

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от Gector (Сообщение 225834)
Из одного скрипта нельзя получить данные с другого если скрипт уже переведен в байты.

Что ты представляеш под получением данных со скрипта из другого скрипта.
И что для тебя такое скрипт.

Цитата:

Так как в качестве имени используется порядковый номер то при переводе в байты он не имеет представления о том какой номер у переменной в другом скрипте.
Массив с переменными единый. Глобальные переменные. Если ты решиш создать пространство имен, то для таких переменных добавить еще один флаг, где прописано к какому пространству имен она отновится. Получать доступ из одного пространства имен к другому как бы нельзя, ибо это так задумано.) Для общих переменных есть глобальное пространство имен.


Цитата:

Все равно нужно уникальное имя для переменной. Тогда просто пропадает суть всей экономии если байтовый код все равно ищет переменные по именам.
У переменных будут свои имена. Они будут в скрипте который ты напишеш сам в текстовом файле. Далее этот скрипт скомпилируется в целочисленный массив и будит держаться в оперативной памяти. Система выполнения команд будит оперировать с номером переменной. Ты же придумывая свои скрипты будиш оперировать с именем переменной, которое ты задал.


Цитата:

При том это еще и нагружает его исполнение, так как имена в сущности обрабатываются тем же способом, что и в тексте только путем чтения байтов.
Никакие имена читаться не будут не из каких байтов.) В оперативной памяти будит номер переменной, которому будит обращяться код, и получать по номеру значение.


Операции со строками будут производиться всего один раз. При компиляции кода скрипта, при загрузке игры.

pax 18.04.2012 20:14

Ответ: Скриптовик - Банки или текст?
 
Помню когда-то скачивал Blitz Virtual Machine, но что-то не могу найти сейчас. компилировала код блица в байт код и выполняла...

ffinder 18.04.2012 20:16

Ответ: Скриптовик - Банки или текст?
 
виртуальные машины кстати выдумывать очень весело.
ну, по-гиковски, конечно, весело.
можно придумать любую архитектуру процессора и писать на этом чудном асме код.

Gector 18.04.2012 20:18

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от pax (Сообщение 225841)
Помню когда-то скачивал Blitz Virtual Machine, но что-то не могу найти сейчас. компилировала код блица в байт код и выполняла...

Он нынче коммерческий вроде.

pax 18.04.2012 20:21

Ответ: Скриптовик - Банки или текст?
 
Так старую найти бы...

Gector 18.04.2012 20:25

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от ffinder (Сообщение 225842)
виртуальные машины кстати выдумывать очень весело.
ну, по-гиковски, конечно, весело.
можно придумать любую архитектуру процессора и писать на этом чудном асме код.

Угу. Уже попробовал.

Цитата:

Так старую найти бы...
Может ее потому и не найти. Разраб бабла захотел срубить).
UPD:Решил проблему с именами.

Платон Александрович 19.04.2012 01:21

Ответ: Скриптовик - Банки или текст?
 
Читал-читал, так и не понял в чем проблема у автора.
И зачем придумывать какой-то свой байт-код когда можно использовать сразу машинный код, т.е. на старте скомпилировать скрипт в машинный код, толкнуть его в банк, а для запуска передать банк в качестве функции в CreateThread например. Будет быстро исполнятся и ничего придумывать ненадо.
Единственная задача будет найти или написать компилятор|транслятор.
Или взять например TinyC, который помимо компиляции может и исполнять код. Да там Си, но если не упарыватся особо, то можно на нем писать почти как на бейсике, ничего там сложного нет.

ffinder 19.04.2012 10:36

Ответ: Скриптовик - Банки или текст?
 
опять "каша из топора".
если не использовать блиц-бейсик, то и сам блиц мало зачем нужен.

Черный крыс 01.06.2012 17:14

Ответ: Скриптовик - Банки или текст?
 
ребят не изобретайте велосипед!

Если уж так надо - то скачай сорсы Луа и поизучай их. Самый грамотный скриптовик. Есть даже тула, которая умеет переводить Байт-код -> Машинный код.
И все вопросы отпадут.

Gector 01.06.2012 17:37

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от Diablo1909 (Сообщение 229179)
ребят не изобретайте велосипед!

Если уж так надо - то скачай сорсы Луа и поизучай их. Самый грамотный скриптовик. Есть даже тула, которая умеет переводить Байт-код -> Машинный код.
И все вопросы отпадут.

Проблема уже решена.

burovalex 23.07.2012 23:10

Ответ: Скриптовик - Банки или текст?
 
Ребят, вот пока не было нужды применять скрипты.
Но вот объясните, как я обращал внимание в любых играх типа шутеры, рпг и т.д. для сработки события используется как растяжка - зацепил и происходит событие.
Следовательно вопрос (т.к. речь идет о адвенчуре с рпг) а зачем скрипт, если можно создать геометрические триггеры - зашел в куб, сферу, пересёк плоскость - совершаешь событие. Если должны напасть враги - одну функцию описал и вызывай ее хоть каждый "метр".
Чем такой вариант плох?

Nex 24.07.2012 01:20

Ответ: Скриптовик - Банки или текст?
 
Скрипты как бы универсальны т.е. можно все описать что тебе надо в файлике и не надо ничего менять в коде из за какой нибудь мелочи.
Цитата:

Если должны напасть враги - одну функцию описал и вызывай ее хоть каждый "метр".
Чем такой вариант плох?
Плох тем, что этот вариант для конкретной ситуации и в аналогичной ситуации будет уже не актуален и придется переписывать функцию.

Gector 24.07.2012 14:42

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от burovalex (Сообщение 233984)
Ребят, вот пока не было нужды применять скрипты.
Но вот объясните, как я обращал внимание в любых играх типа шутеры, рпг и т.д. для сработки события используется как растяжка - зацепил и происходит событие.
Следовательно вопрос (т.к. речь идет о адвенчуре с рпг) а зачем скрипт, если можно создать геометрические триггеры - зашел в куб, сферу, пересёк плоскость - совершаешь событие. Если должны напасть враги - одну функцию описал и вызывай ее хоть каждый "метр".
Чем такой вариант плох?

Абсолютно всем. Триггеров будет очень много и попробуй вылови баг.
Скриптовик намного более гибкая вещь, даже с хреновой математикой, и минимумом возможностей (три типа переменных, математика уровня c=a+b, условия по их проверке и вызов функций). Применение даже такого ущербного скриптовика намного шире, чем применение триггеров. Уж тем более если это не платформер, а рпг-адвенчура.

burovalex 24.07.2012 20:27

Ответ: Скриптовик - Банки или текст?
 
Nex, ты не прав
Как может быть легче найти габ в 51 10 1001 1 1002 11 3 1003 7 0 1 15 52 100 0 1 23423 0 1 72346 9 1001 10 1001 1 0 1 2 11 53 9 1001 10 1001 1 0 1 1 11 54 ??
А на счет однотипности - это врядли. Все зависит какую по сложности функцию описать. И вообще я считаю самым сложным написать IQ, и однотипности не будет.

Для создания игры полюбому нужен редактор, в редакторе добавляешь триггеры (я про простоту расстоновки, а скрипты полюбому только писать) задаешь имя и затем обрабатываешь его:

Код:

если пересёк триггер
If trigger\name=1 then
  newEnemy(....)
  newEnemy(....)
  newEnemy(....)
  newEnemy(....)
  newObject(..)
  newObject(..)
endif
Function newEnemy(x,y,z,type,level,style) ;style - к примеру может быть стилем появления
Function newObject(...) ; скидывай камни с горы на игрока, ставь бомбы, закидывай тухлыми яйцами...

Я считаю это куда выгоднее по времени и меньше гемора

можно продолжать очень долго. А на счет неоднотипности - для этого мне кажется уже нужна команда

Gector 24.07.2012 21:41

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от burovalex (Сообщение 234139)
Nex, ты не прав
Как может быть легче найти габ в 51 10 1001 1 1002 11 3 1003 7 0 1 15 52 100 0 1 23423 0 1 72346 9 1001 10 1001 1 0 1 2 11 53 9 1001 10 1001 1 0 1 1 11 54 ??
А на счет однотипности - это врядли. Все зависит какую по сложности функцию описать. И вообще я считаю самым сложным написать IQ, и однотипности не будет.

Для создания игры полюбому нужен редактор, в редакторе добавляешь триггеры (я про простоту расстоновки, а скрипты полюбому только писать) задаешь имя и затем обрабатываешь его:

Код:

если пересёк триггер
If trigger\name=1 then
  newEnemy(....)
  newEnemy(....)
  newEnemy(....)
  newEnemy(....)
  newObject(..)
  newObject(..)
endif
Function newEnemy(x,y,z,type,level,style) ;style - к примеру может быть стилем появления
Function newObject(...) ; скидывай камни с горы на игрока, ставь бомбы, закидывай тухлыми яйцами...

Я считаю это куда выгоднее по времени и меньше гемора

можно продолжать очень долго. А на счет неоднотипности - для этого мне кажется уже нужна команда

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

Nex 25.07.2012 07:01

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от burovalex (Сообщение 234139)
Nex, ты не прав
Как может быть легче найти габ в 51 10 1001 1 1002 11 3 1003 7 0 1 15 52 100 0 1 23423 0 1 72346 9 1001 10 1001 1 0 1 2 11 53 9 1001 10 1001 1 0 1 1 11 54 ??

51 10 10 ... это так надо Gector'y. Можно и не запаковывать скрипты.
Вот например кусок lui-скрипта из двига Leadwerks.
Код:

require("Scripts/constants/collision_const")
require("Scripts/constants/engine_const")
require("Scripts/LinkedList")
require("Scripts/filesystem")
require("Scripts/math/math")
require("scripts/classes/bullet")

--Variables
dx=0.0
dy=0.0
camerapitch=0.0
camerayaw=0.0
move=0.0
strafe=0.0

--Create a player controller
controller=CreateController(1.8,0.45,0.25,45)
controller:SetCollisionType(COLLISION_CHARACTER,0)
controller:SetPositionf(0,2,0,0)
controller:SetMass(10)

controller:SetPosition(fw.main.camera.position)
camerapitch=fw.main.camera.rotation.x
camerayaw=fw.main.camera.rotation.y
controller:Move(Vec3(0,-0.9,0))

--a=CreateCube()
--a:SetPositionf(-30,2,2)
--b=CreateCube(a)
--b:SetPositionf(20,0,0)

local gunscale=0.6
local vwep = LoadMesh("abstract::vwep_hands.gmf")

LoadMesh("abstract::vwep_gun.gmf",vwep)
vwep:SetParent(fw.main.camera,0)
vwep:SetPosition(Vec3(-0.18*gunscale,-0.03*gunscale,0.37*gunscale),0)
vwep:SetScale(Vec3(0.04*gunscale,0.04*gunscale,0.04*gunscale))
local gundisplayposition = vwep:GetPosition()
sound_gunshot = LoadSound("abstract::gunshot.ogg")
source_gunshot = CreateSource(sound_gunshot)
source_gunshot:SetVolume(0.5)
vwep :SetShadowMode(0,1)
local displayposition=Vec3(-0.26/2.0,-0.03,0.19)
local muzzleflash = CreatePointLight(3)
muzzleflash:SetParent( vwep )
muzzleflash:SetColor(Vec4(1,0.6,0.0,1.0))
muzzleflash:SetPosition( displayposition )
muzzleflash:SetShadowMode(0)


Практически тоже самое что и в .exe только тут можно по быстренькому все изменить, мод написать в блокноте не трогая exe-файл и тд..

Цитата:

И вообще я считаю самым сложным написать IQ
IQ - коэффициент интеллекта.
AI - искусственный интеллект.

burovalex 25.07.2012 20:24

Ответ: Скриптовик - Банки или текст?
 
Цитата:

Сообщение от Nex (Сообщение 234213)
51 10 10
IQ - коэффициент интеллекта.
AI - искусственный интеллект.

Ах да... :crazy: :-D

Видимо я еще не дорос до скриптов...


Часовой пояс GMT +4, время: 17:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot