Задача создать нечто на подобии поля чудес.
Есть класс DreamField:
class DreamField {
constructor(word, tip) {
this.Word = word;
this.Tip = tip;
this.forGuessLetterCount = word.length;
if (!DreamField.counter) DreamField.counter = 0;
}
render(containerId) {
this.container = document.getElementById(containerId);
this.div1 = document.createElement("div");
this.div1.innerText = `Подсказка: ${this.Tip}`;
this.container.appendChild(this.div1);
this.tdArray = [];
var table = document.createElement("table");
table.id = DreamField.counter++;
table.border = "2px solid black";
this.container.appendChild(table);
var tr = document.createElement("tr");
table.appendChild(tr);
for (var i = 0; i < this.Word.length; i++) {
var td = document.createElement("td");
td.innerText = "*";
tr.appendChild(td);
this.tdArray.push(td);
}
this.input1 = document.createElement("input");
this.input1.type = "text";
this.input1.className = "txt";
this.container.appendChild(this.input1);
}
}
Есть класс Roulette у которого класс DreamField выступает прототипом:
class Roulette extends DreamField {
constructor(word, tip) {
super(word, tip);
}
getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
getRandomBonus() {
this.bonus = ["300", "x3", "700", "0", "1000", "x2"];
this.nowString = this.bonus[this.getRandom(0, this.bonus.length - 1)];
return this.nowString;
}
result() {
let rez = parseInt(this.input2.value);
let m;
switch (this.getRandomBonus()) {
case "300":
m = rez + 300;
rez = m;
break;
case "x3":
m = rez * 3;
rez = m;
break;
case "700":
m = rez + 700;
rez = m;
break;
case "0":
m = rez + 0;
rez = m;
break;
case "1000":
m = rez + 1000;
rez = m;
break;
case "x2":
m = rez * 2;
rez = m;
break;
}
return rez;
}
onButtonClick(event) {
var letter = super.input1;
if (super.Word.include(letter)) {
let count = 0;
for (var i = 0; i < super.Word.length; i++) {
if (letter == super.Word[i]) {
super.tdArray[i].innerText = letter;
super.forGuessLetterCount--;
count++;
}
}
alert(`Вы угадали ${count} букв`);
alert(`Вы выиграли ${this.getRandomBonus()}бонусов`);
if (super.forGuessLetterCount == 0) {
alert("Победа");
}
} else {
alert("Нет такой буквы в этом слове");
}
super.input1.value = "";
}
render() {
super.render("forGame");
this.container = document.getElementById("forGame");
var button = document.createElement("input");
button.type = "button";
button.value = "Проверить";
button.onclick = this.onButtonClick.bind(this);
this.container.appendChild(button);
this.div2 = document.createElement("div");
this.input2 = document.createElement("input");
this.input2.type = "number";
this.input2.readOnly = true;
this.input2.className = "inp";
this.input2.value = this.result();
var span = document.createElement("span");
span.innerText = "бонусов";
this.div2.innerText = `У вас:`;
this.div2.appendChild(this.input2);
this.div2.appendChild(span);
this.div2.style.paddingBottom = "20px";
this.div2.style.paddingTop = "5px";
this.container.appendChild(this.div2);
}
}
function start() {
var game = new Roulette("Портрет", "Висит в классе на стене");
game.render("forGame");
var game2 = new Roulette("HELLO", "Common greating");
game2.render();
}
Почему-то Roulette не видит значение inputа из DreamField?Как это решить?