Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
GR_IB
0 / 0 / 0
Регистрация: 20.12.2017
Сообщений: 2
#1

Изучаю Lua - есть проблемы - Lua

20.12.2017, 15:03. Просмотров 160. Ответов 2
Метки lua (Все метки)

Всем привет!
Начал изучать Lua вместе с Corona SDK
В книге Роберата Иерусалимски в листинге 4.2 есть пример с goto, но Corona не позволяет его использовать. Как лучше переписать код под Lua 5.1, не использую goto, имея "таблицу" движения?
Пример из книги

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
goto room1 -- начальная комната
::room1:: do
    local move = io.read()
    if move == "south" then goto room3
    elseif move == "east" then goto room2
    else
        print("invalid move")
        goto room1 -- остаемся в этой же комнате
    end
end
::room2:: do
    local move = io.read()
    if move == "south" then goto room4
    elseif move == "west" then goto room1
    else
        print("invalid move")
        goto room2
    end
end
::room3:: do
    local move = io.read()
    if move == "north" then goto room1
    elseif move == "east" then goto room4
    else
        print("invalid move")
        goto room3
    end
end
::room4:: do
    print("Congratulations, you won!")
end
Допустим есть карта, в ней я как игрок определяю направления последовательного движения, например
map = { "south", "east", "north", "west" }
т.е. я сначала пойду на юг, потом на восток, потом на север, а потом на запад, далее я запускаю игру и проверяю верна ли моя карта
room1( map )
далее код должен проверить могу ли я пойти в первой комнате в первом направлении - на юг, если да переходим к следующей комнате, если нет - карта не верная, игра окончена и так до последней четвертой комнаты.

Что мне пришло в голову:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
map = {[ "south" ] = 1, [ "east" ] = 2, [ "west" ] = 3, [ "north" ] = 4}
 
function room1()
    local move = math.random( 1, 4 )
    if move == map[ "south" ] then return room3()
    elseif move == map[ "east" ] then return room2()
    else
        print( "invalid move" )
        return room1()
    end
end
 
function room2()
    local move = math.random( 1, 4 )
    if move == map[ "south" ] then return room4()
    elseif move == map[ "west" ] then return room1()
    else
        print( "invalid move" )
        return room2()
    end
end
 
function room3()
    local move = math.random( 1, 4 )
    if move == map[ "north" ] then return room1()
    elseif move == map[ "east" ] then return room4()
    else
        print( "invalid move" )
        return room3()
    end
end
 
function room4()
    print( "Congratulations, you won!" )
end
 
room1(map)
Но этот код не подходит, грубо говоря, требованиям моего консультанта по обучению.

Please help! Хотя бы куда копать. Уже голову себе сломал.

Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2017, 15:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изучаю Lua - есть проблемы (Lua):

Проблемы с интегрированием LUA - Lua
Дотянулись ручки до этого. Но и в общем дальше никак не идет. Скачал исходники LUA (последние 5.2). Припихнул их к своему проекту....

Есть Lua скрипт но он не запускаеться а код не читаем - Lua
Здравствуйте есть lua скрипт помогите его раскодировать,он когда в блокноте или нотепаде++ открывается какие то казябрики вместо кода

LUA + C++ - Lua
Привет всем :) я чото не понимаю чо у меня выевляется ошибки luaavg.obj : error LNK2001: неразрешенный внешний символ...

lua script - Lua
Такое дело: Есть изображения, и есть скрипт на Lua, который эти изображения "исполняет". Как собственно из этого сделать приложение...

vs c++ & lua - Lua
Здравствуйте, занимаюсь разработкой 3д игры, пишу движок и прочее, когда то модил сталкера, в плане скриптинга, уж очень нравилось и в...

Парсер на lua - Lua
Тут описано как подключить и использовать и библиотеку для языка lua http://www.cyberforum.ru/cpp-builder/thread68085.html Возможно ...

2
NoMasters
Псевдослучайный
1766 / 1108 / 74
Регистрация: 13.09.2011
Сообщений: 3,153
21.12.2017, 03:19 #2
Через конечный автомат описать. Вместо рекурсивного вызова возвращать следующее состояние, хотя бы и ту же функцию:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
map = {[ "south" ] = 1, [ "east" ] = 2, [ "west" ] = 3, [ "north" ] = 4}
 
function room1()
    local move = math.random( 1, 4 )
    if move == map[ "south" ] then return room3
    elseif move == map[ "east" ] then return room2
    else
        print( "invalid move" )
        return room1
    end
end
 
function room2()
    local move = math.random( 1, 4 )
    if move == map[ "south" ] then return room4
    elseif move == map[ "west" ] then return room1
    else
        print( "invalid move" )
        return room2
    end
end
 
function room3()
    local move = math.random( 1, 4 )
    if move == map[ "north" ] then return room1
    elseif move == map[ "east" ] then return room4
    else
        print( "invalid move" )
        return room3
    end
end
 
function room4()
    print( "Congratulations, you won!" )
end
 
--текущая комната
room = room1
 
while room ~= nil do
    room = room(map)
end
И да, чего это вы передаёте map в room1, но везде используете глобальную?
0
GR_IB
0 / 0 / 0
Регистрация: 20.12.2017
Сообщений: 2
21.12.2017, 08:54  [ТС] #3
NoMasters, спасибо большое!

Только чем рекурсивный вызов отличается от передачи room1(map) как начальной комнаты.
Прогнал Ваш код - исход один и тот же...

"но везде используете глобальную?" - можете более подробно пояснить? Ведь я еще только учусь
Вы имеете ввиду что все функции глобальные?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2017, 08:54
Привет! Вот еще темы с ответами:

Lua 5.3 и LuaJit - Lua
Возможно ли совместить subj в проекте одновременно? Требуется часть скриптов выполнять в среде Lua, а часть - в среде LuaJit. Динамическая...

Ошибка lua - Lua
Всем привет Попался мне один файлик resource.car после его распаковки появилось 40 файлов с расширением lu Скрин...

Изучение Lua - Lua
Добрый день. Хочу начать изучать язык Lua но не знаю с чего начать. Может кто нибудь подскажет с чего начать. Ссылку полезную даст. ...

Быстродействие Lua - Lua
Мне не раз приходилось видеть, что ядро програмы написано на С++, а дополнительный функционал на Lua. Насколько это оправданно с точки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.