это было некоторое время, так как я был здесь.
Я следую учебному пособию по приключениям с текстовой базой JavaScript.Очень простой учебник.У меня есть функция, чтобы изменить комнаты.Я понимаю логику, стоящую за этим, и она работает.
Она не дает мне ошибок, пока я не доберусь до goInside ();
property 'description' of undefined
at goInside (core.js:58)
at playerInput (core.js:94)
at HTMLDocument.<anonymous> (core.js:114)
at HTMLDocument.dispatch (jquery-3.2.1.min.js:3)
at HTMLDocument.q.handle (jquery-3.2.1.min.js:3)
goInside @ core.js:58
playerInput @ core.js:94
(anonymous) @ core.js:114
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3
function changeRoom(dir) {
if (rooms[currentRoom].directions[dir] !== undefined) {
currentRoom = rooms[currentRoom].directions[dir]
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
} else {
$('#game-text').append("<p>You cannot go that way!</p>");
}
}
Вот переменная комнаты, которая заняла у меня минуту, чтобы понять формат.Я добавил здания в качестве опции, которая действует точно так же, как и направления.
var rooms = {
"start": {
"description": "You are in Town waiting for something to happen",
"details": "You notice a house and a shop. Should you explore?",
"directions": {
"north": "bridge",
"west": "clearing"
},
"buildings": {
"shop": "shop",
"house": "house"
},
"items": ["water", "stick"],
"minlvl": "1",
},
Текущая комната уже запущена.Вы можете напечатать «идти на север».и это изменит номера отлично.Но что, если бы я хотел более 4 разных способов?Я думал, что это может сработать, но не могу понять, где именно я ошибся.Я повторно использовал функцию, но отключил элементы.
function goInside(building) {
if (rooms[currentRoom].buildings[building] !== undefined) {
currentRoom = rooms[currentRoom].buildings[building],
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
} else {
$('#game-text').append("<p>You cannot go that way!</p>");
}
}
Не ищу кого-то, кто мог бы программировать для меня, просто объясняя логику, которой я мог бы не хватать.Любая обратная связь будет оценена.Спасибо.
Редактировать.
Изучая ваше решение, я использовал утверждение if, и все еще получаю сообщение об ошибке ниже.Я не понимаю, потому что changeRooms прекрасно работает для отображения описания, а goInside является копией changeRooms.
Uncaught TypeError: Cannot read property 'description' of undefined
at goInside (core.js:58)
at playerInput (core.js:94)
at HTMLDocument.<anonymous> (core.js:114)
at HTMLDocument.dispatch (jquery-3.2.1.min.js:3)
at HTMLDocument.q.handle (jquery-3.2.1.min.js:3)
goInside @ core.js:58
playerInput @ core.js:94
(anonymous) @ core.js:114
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3
Строка 58
$('#game-text').append("<p>" + rooms[currentRoom].description + "</p>");
Строка 94 - это функция goInside
case "explore":
var building = input.split(" ")[1];
goInside(building);
break;