我继续我的Hangman游戏,我完成了代码。
但是我遇到了新的2个错误:
ahorcado.js:146 Uncaught TypeError:无法读取未定义的属性“length” ahorcado.js:118未捕获的TypeError:无法读取未定义的属性'value'
var palabra = "Perro"
var hombre,l, espacio;
var Ahorcado = function (con) {
this.contexto = con;
this.maximo = 5;
this.intentos = 0;
this.vivo = true;
this.dibujar();
}
Ahorcado.prototype.dibujar = function () {
var dibujo = this.contexto;
dibujo.beginPath();
dibujo.moveTo(150,100);
dibujo.lineTo(150,50);
dibujo.lineTo(400,50);
dibujo.lineTo(400,350);
dibujo.lineWidth = 15;
dibujo.strokeStyle = '#000'
dibujo.stroke();
dibujo.closePath();
if (this.intentos > 0) {
dibujo.beginPath();
dibujo.arc(150, 140, 40, 0, Math.PI * 2, false);
dibujo.strokeStyle = '#f00'
dibujo.lineWidth = 5;
dibujo.stroke();
dibujo.closePath();
if (this.intentos > 1) {
dibujo.beginPath();
dibujo.moveTo(150,180);
dibujo.lineTo(150,250);
dibujo.strokeStyle = '#f00'
dibujo.lineWidth = 5;
dibujo.stroke();
dibujo.closePath();
if (this.intentos > 2) {
dibujo.beginPath();
dibujo.moveTo(120,220);
dibujo.lineTo(150,180);
dibujo.lineTo(180,220);
dibujo.strokeStyle = '#f00'
dibujo.lineWidth = 5;
dibujo.stroke();
dibujo.closePath();
if (this.intentos > 3) {
dibujo.beginPath();
dibujo.moveTo(120,290);
dibujo.lineTo(150,250);
dibujo.lineTo(180,290);
dibujo.strokeStyle = '#f00'
dibujo.lineWidth = 5;
dibujo.stroke();
dibujo.closePath();
if (this.intentos > 4) {
dibujo.beginPath();
dibujo.moveTo(125,120);
dibujo.lineTo(145,145);
dibujo.moveTo(145,120);
dibujo.lineTo(125,145);
dibujo.moveTo(155,120);
dibujo.lineTo(175,145);
dibujo.moveTo(175,120);
dibujo.lineTo(155,145);
dibujo.strokeStyle = 'blue';
dibujo.linewidth = 5;
dibujo.stroke();
dibujo.closePath();
}
}
}
}
}
}
Ahorcado.prototype.trazar = function () {
this.intentos++;
if (this.intentos >= this.maximo) {
this.vivo = false;
alert('Estas muerto')
}
this.dibujar();
}
function iniciar() {
var l = document.getElementById('letra');
var b = document.getElementById('boton');
var canvas = document.getElementById('c');
canvas.width = 500;
canvas.height = 400;
var contexto = canvas.getContext('2d');
hombre = new Ahorcado(contexto);
espacio = new Array(palabra.length);
b.addEventListener('click', agregarLetra)
mostrarPista(espacio);
}
function agregarLetra() {
var letra = l.value
var p;
mostrarPalabra(palabra, hombre, letra);
for(p in palabra){
if (letra == palabra[p]) {
espacio[p] = letra;
encontrado = true;
}
}
mostrarPista(espacio);
if (!encontrado) {
ahorcado.trazar
}
}
function mostrarPalabra(palabra, ahorcado, letra) {
var encontrado = false;
letra = letra.toUppercase();
}
function mostrarPista(palabra, espacio) {
var pista = document.getElementById('pista');
var texto = '';
var i = 0;
var largo = espacio.length;
for (i = 0; i < largo; i++) {
if (espacio[i] != undefined) {
texto = texto + espacio[i] + '';
}
else{
texto += '_ '
}
}
pista.innerText = texto;
}
答案 0 :(得分:0)
好吧,变量espacio
未定义,正如错误消息所示,因为您从未调用iniciar
,这会初始化它。
答案 1 :(得分:0)
第118行,var letra = l.value
- l
为undefined
第146行:var largo = espacio.length;
- espacio
为undefined
。
试着找出这些变量的来源以及为什么它们是undefined
,如果代码是另一种语言,我们就无法解决你的问题。
快乐的编码!
答案 2 :(得分:0)
您的事件处理程序'agregarLetra'不知道'l'(btw错误的变量名称,因为它没有解释该变量的用途)。 所以而不是:
var letra = l.value
尝试:
l = document.getElementById('letra').value;
或者在你的'iniciar'函数中写一下:
l = document.getElementById('letra');
而不是:
var l = document.getElementById('letra');
'var l'仅将节点保存到新的局部变量 这应该解决l。 118。
来自l的错误。 146是由于您在调用'mostrarPista'时忘记传递'palabra'参数。您的函数定义了2个参数:
function mostrarPista(palabra, espacio) {
但仅使用一个参数(l.128)调用:
mostrarPista(espacio);