Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
GR_IB
0 / 0 / 0
Регистрация: 20.12.2017
Сообщений: 2
#1

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

20.12.2017, 15:03. Просмотров 360. Ответов 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 + C++
Привет всем :) я чото не понимаю чо у меня выевляется ошибки luaavg.obj...

Lua шифрование
Здравствуйте, есть такая задачка, кто-то сможет помочь? В файле содержатся...

Парсинг lua
Здравствуйте форумчане,меня озадачило такой задачей,нужно из текста Client...

2
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
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, Android
Доброго времени суток. Хочу попробовать себя а в разработке игр под Android...

Плагин на Lua
Я не программист и всего чуток разбираюсь в Lua, поэтому все манипуляции с...

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


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

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

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