Język skryptowy

0

Cześć. Chciałbym w swoim kodzie dodać zewnętrzną możliwość integracji w kod, zastanawiam się nad użyciem jakiegoś języka skryptowego w moim programie. Niestety nie za bardzo się na tym znam.
Moje założenia są takie, robię program w c++ który zawiera jakąś funkcję która jest kiedyś wywoływana i w niej wczytuję skrypt. Funkcja może wyglądać np. tak:

bool Function()
{
	LoadScript("Script.txt");
	return false;
}

I teraz z tego skryptu zrobienie jakiegoś ifa lub wywołanie innej funkcji z tego programu.

Czy jest to możliwe? I jaki język będzie się do tego nadawał, widziałem że lua ma dostępną bibliotekę do c++.

2

Tak, Lua jest najszerzej wykorzystywanym językiem do tego celu.
Sam się z nim co prawda nie bawiłem, ale widziałem parę kodów, które go wykorzystują, i API nie wydaje się trudne ;-)

1

jakieś 27 dni temu bawiłem się z luą, może to Ci trochę pomoże ("gra" w konsoli):
https://github.com/spartanPAGE/rebubox
(jako, że się tym tylko trochę pobawiłem - notka: wszystko związane z aktorami czy światem napisane w C++ było do usunięcia)

Jak wiele było oskryptowane w lua? Mniej więcej wszystko poza kluczowymi rzeczami napisanymi w C++ (główna pętla, buforowane i kolorowane wyjście)
https://github.com/spartanPAGE/rebubox/tree/master/scripts

local playerModule = require("rebubox.scripts.player")
local worldModule = require("rebubox.scripts.game.world.gameworld")

local world = worldModule.World:new{}
world:setSize(10, 10)

local player = playerModule.Player:new{}

function update()
  player:update()
end

function draw()
  world:draw()
  player:draw()
end

Jak najbardziej możliwe jest odwoływanie się do obiektów Lua z C++, a także do C++ z poziomu Lua.

0
Patryk27 napisał(a):

Tak, Lua jest najszerzej wykorzystywanym językiem do tego celu.
Sam się z nim co prawda nie bawiłem, ale widziałem parę kodów, które go wykorzystują, i API nie wydaje się trudne ;-)

spartanPAGE napisał(a):

jakieś 27 dni temu bawiłem się z luą, może to Ci trochę pomoże ("gra" w konsoli):
https://github.com/spartanPAGE/rebubox
(jako, że się tym tylko trochę pobawiłem - notka: wszystko związane z aktorami czy światem napisane w C++ było do usunięcia)

Jak wiele było oskryptowane w lua? Mniej więcej wszystko poza kluczowymi rzeczami napisanymi w C++ (główna pętla, buforowane i kolorowane wyjście)
https://github.com/spartanPAGE/rebubox/tree/master/scripts

local playerModule = require("rebubox.scripts.player")
local worldModule = require("rebubox.scripts.game.world.gameworld")

local world = worldModule.World:new{}
world:setSize(10, 10)

local player = playerModule.Player:new{}

function update()
  player:update()
end

function draw()
  world:draw()
  player:draw()
end

Jak najbardziej możliwe jest odwoływanie się do obiektów Lua z C++, a także do C++ z poziomu Lua.

Wielkie dzięki za pomoc. Wydawało mi się że będzie to trudne a jest zupełnie inaczej :D

0

To znowu ja :)
Udostępnianie funkcji w połączeniu Lua/C++ jest mi trochę nie na rękę poprzez konieczność pushowania wszystkich argumentów etc.
Znalazłem coś takiego - https://eliasdaler.wordpress.com/2014/07/18/using-lua-with-cpp-luabridge/

Wygląda spoko ale mam z tym problem. Sama biblioteka Lua działa dobrze, teraz pobrałem LuaBridge, wypakowałem i dodałem do includes mojego projektu. Dostałem jakieś tam errory ale na stronie pisze co w takiej sytuacji zrobić. Naprawiłem to i teraz mam inny problem.

Mianowicie gdy mam taki oto kod funkcje, struktury etc. z lua.h, lualib.h i lauxlib.h nie są wykrywane, luabridge jest wykrywany.

#include <LuaBridge.h>

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

int main()
{
	lua_State* L; // Nie wykrywa
	return 0;
}

Co dziwne gdy zamienię kolejność includowania na taką jak poniżej wykrywa wszystko.

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include <LuaBridge.h>

int main()
{
	lua_State* L;
	return 0;
}

Co prawda wtedy wszystko się kompiluje ale trochę mnie to niepokoi. Czy coś mogłem zrobić źle, czy to po prostu tak ma być (chociaż na stronie było na odwrót) i nie ma żadnej różnicy?

0

jako tag dałeś c++ a tutaj dajesz c...

1 użytkowników online, w tym zalogowanych: 0, gości: 1