(У переполнения стека нет тега для подсказки, поэтому я использовал предупреждение, поскольку я предполагаю, что он достаточно похож, чтобы привлечь правильных ответчиков.)Заполнение приглашения элементами массива и их номером
Hello, В настоящее время я делаю JavaScript-игру для обучения в университете. Обычно я хорошо разбираюсь в решении проблем, но в этом вопросе эта проблема не увенчалась успехом.
Чтобы объяснить, у меня есть массив, который называет возможные доспехи, которые игрок может выбрать. В любом порядке они могут быть выбраны, и каждый раз выбор переходит к второму массиву, который обрабатывает то, что уже было выбрано (и в каком порядке), и этот элемент получает сплайсинг из исходного массива. Существует цикл while, который проходит до тех пор, пока все 3 не будут выбраны.
var armourSlotToPick = ["Head", "Chest", "Legs"],
armourSlotPicked = [],
armourLoop = 1,
indexArmour = 0;
function numInArray() {
indexArmour++;
return (indexArmour + ". " + armourSlotToPick[indexArmour - 1] + "\n");
}
function armour() {
while (armourLoop < 4) {
var armourPick = prompt("Pick an armour slot to generate an item for:\n" + armourSlotToPick.forEach(numInArray));
if (armourPick == 1) {
armourSlotPicked.push(armourSlotToPick[0]);
armourSlotToPick.splice(0,1);
} else if (armourPick == 2) {
armourSlotPicked.push(armourSlotToPick[1]);
armourSlotToPick.splice(1,1);
} else if (armourPick == 3) {
armourSlotPicked.push(armourSlotToPick[2]);
armourSlotToPick.splice(2,1);
} else {
alert("Invalid choice, you suck");
break;
}
armourLoop++;
}
}
Я знаю, что это, вероятно, не было бы возможно сделать все возвращение в numInArray() в командной строке, но он показывает некоторую работу.
Теперь проблема: я получил ее, чтобы каждый элемент массива был пронумерован (var armourSlotToPick = ["1. Head", "2. Chest", "3. Legs"],), но, как вы могли если игрок выбрал 2, то в следующий раз он покажет «1. Голова (новая линия) 3. Ноги», и когда игрок выберет 3, возникнет проблема, поскольку они действительно должны были выбрать 2. Как возможно ли число элементов в массиве, в подсказке?
Я, возможно, подумал об этом, но я страдал уже несколько часов.
Я заранее благодарю Вас за любой проницательности вы можете иметь,
Даниила.
EDIT: Solved.
Ниже приводится конечный результат, небольшое отклонение от отредактированного ответа Джонатана Брукса.
var armourSlotToPick = [null, "Head", "Chest", "Legs"]
var armourSlotPicked = [null];
var armourLoop = 1;
function armour() {
while (armourLoop < 4) {
var message = "Pick an armour slot to generate an item for:\n";
for (var i = 0; i < armourSlotToPick.length; i++) {
if (armourSlotToPick[i] !== null) {
message += "" + i + ". " + armourSlotToPick[i] + "\n";
}
}
var armourPick = prompt(message);
if (armourPick > armourSlotToPick.length-1 || armourPick < 1) {
alert("Invalid choice, you suck");
} else {
var insert = armourSlotToPick.splice(armourPick, 1);
armourSlotPicked.push(insert);
}
armourLoop++;
}
armourSlotPicked.splice(0,1);
}
armour();
alert(armourSlotPicked.join("\n"));
Я благодарю всех, что внесли свой вклад в эту дискуссию и конечный результат, и я надеюсь, что это является хорошим примером для будущих проблем, которые люди могут иметь похожее на это.
Спасибо за это, да, я понимаю, как справиться с этими проблемами сейчас, есть только 1 проблема, с которой я сталкиваюсь, «ключ» по-прежнему жестко привязан к «значению», как в случае, когда я делаю это три раза, один раз за каждый раз, когда игрок выбирает следующий слот брони, 2 всегда будет сундуком, а 3 всегда будут ногами. Я хочу, чтобы это динамически менялось, поэтому после первого выбора оставшиеся 2 теперь являются клавишами 1 и 2, а не, скажем, клавишей 2 и клавишей 3 (для сундуков и ног). Я предполагаю, что это возможно. –
@ DanielJochem Проверьте мои изменения –
Спасибо @JonathanBrooks, я закончил использовать отредактированный ответ, так как я действительно хотел сохранить подсказку, которую Хенрик рекомендовал мне не делать. Благодарим вас за терпение. –