Как обмениваться данными между двумя скриптами Lua

Я даже не уверен, что мой план действий — лучший способ, поэтому я извиняюсь, если этот пост немного расплывчатый. Также я понимаю, что подобные вопросы уже задавались ранее. Однако я не смог найти ничего, что имело бы отношение к моей ситуации и имело для меня смысл.

Поэтому я и мои школьные друзья строим аркадный автомат, и я планирую собрать основной графический интерфейс, который позволит пользователю выбирать разные игры и загружать их, если у них достаточно токенов. Тем не менее, эти отдельные окна должны совместно использовать некоторые переменные, в основном количество токенов в машине. Я полагал, что отдельная программа Lua может хранить такую ​​переменную, а также отправлять запросы на выполнение других функций, таких как открытие и закрытие различных окон. Кроме того, в случае, если важно отметить, что мы будем использовать движок Love2D для игр и запустим все это на Linux-машине.

Судя по тому, что я прочитал, похоже, в этом есть некоторый код на C и C ++. Я почти ничего не знаю о C или C ++, и мы пытаемся продвинуть этот проект, так что, если бы вы могли включить в свой ответ какой-то код и дать мне инструкции по его использованию, это было бы удивительно. Я могу вернуться позже и выучить немного C или C ++, но сейчас Lua — мой главный приоритет.

Мои вопросы:

  1. Есть ли лучший способ выполнить то, что я пытаюсь сделать?
  2. Как мне это сделать?
  3. Может ли это быть сделано исключительно с Lua, или это какой-то C, C ++ или любой другой внешний язык программирования / утилита / и т.д. требуется?

Кроме того, если кто-нибудь поднимает этот вопрос, я пытался использовать глобальные переменные, но я не мог заставить две программы / сценарии использовать одну и ту же переменную одновременно.

Снова, извините, если я немного расплывчатый.

Заранее спасибо!

0

Решение

(этот метод представляет собой сочетание предложения @ Puzzlem00n и прочтения комментариев, поэтому мне не стоит верить этому)

Положить несколько игр в одной программе Lua!

В main.lua:

require("spaceInvaders") --require all the other Lua files
-- without the ".lua" at the end!

gamestate=spaceInvaders

function love.load()
--all the setup things
end

function love.update()
gamestate.update()
end

function love.draw()
gamestate.draw()
end

function love.keypressed(key)
gamestate.keypressed(key)
end

--and so on for the rest of the love callbacks that you need (such as love.keyreleased())

Затем в каждой игре (которая представляет собой отдельный файл Lua, такой как spaceInvaders.lua):

spaceInvaders = {}

function spaceInvaders.draw()
--your draw code
end

function spaceInvaders.update()
--your update code
end

--and so on for every other callback you want to use

Этот код дает каждой игре свой набор любовных функций. Если вы хотите поиграть в эту игру, вы должны установить для gamestate имя этой игры. spaceInvaders={} Строка определяет spaceInvaders как таблицу, в которой хранится каждая функция. Когда вы определяете переменную как существующую переменную, вы фактически создаете ссылку на нее, например:

t = {}
table.insert(t,1) --place 1 inside t
table.insert(t,3) --also place 3 inside t
s = t
print(s[1]) --will print 1, the first value of t
t[1]=2
print(s[1]) --will print 2, as it refers to t[1], which has just been changed

Совместное использование переменных! (Я разработал этот бит!)

ТЕПЕРЬ, это означает, что вы можете отправлять переменные по программе с помощью другой функции. Если вы хотите разделить счет между играми, вы можете сделать следующее:

в main.lua:

function love.update()
gamestate.update()
score = gamestate.returnScore() --score will always equal to the current score being returned by the game
end

в игре, такой как spaceInvaders.lua:

function spaceInvaders.returnScore()
return score --or whatever the score is stored in
end

Это позволит вам получить переменную, такую ​​как оценка, из одной игры в main.lua!
Извините, если это немного сбивает с толку, но, надеюсь, это то, что вы ищете! 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]