2016-05-20 15 views
-1

私はハングマンゲームを続け、コードを完成させました。未知のタイプのエラー(長さと値のプロパティ)

しかし、私は新しい2つのエラーました:あなたはiniciarを呼び出すことはありませんよう

ahorcado.js:146 Uncaught TypeError: Cannot read property 'length' of undefined ahorcado.js:118 Uncaught TypeError: Cannot read property 'value' of undefined

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; 
} 
+2

エラーはかなりはっきりしています。初期化されておらず、読み込むオブジェクトを持たない変数からプロパティを読み込もうとしています。これをデバッグすると、どこが起こるのですか?どのオブジェクトが 'undefined'ですか? *あなたは*それらが定義されると期待していますか?スタックオーバーフローは、デバッガの代替ではありません。 @Davidに加えて – David

+0

これが役に立つかもしれません: 'debugger'を置くと、http://stackoverflow.com/questions/66420/how-do-you-launch-the-javascript-debugger-in-google-chromeステートメント117行を開き、 'undefined'を探してみてください:https://developer.chrome.com/devtools/docs/javascript-debugging AND https://developer.mozilla.org/en-US/docs/ツール/デバッガー – jmunsch

+0

すべての返信をありがとう、私はすべてのsuggetionsのおかげで、今、デバッグする方法を今、私は今、プロセスを学んでいる。 – Santiago

答えて

0

線118、var letra = l.valuel 146はundefined
線です。

この変数がどこに由来するのか、そしてなぜそれらがundefinedであるのかを調べてみると、コードが別の言語になっていると問題を解決できません。
ハッピーコーディング!

0

まあ、変数espacioはそれを初期化することになる、と、エラーメッセージが言うのと同様に、未定義です。 espacioundefinedある - var largo = espacio.length;: -

+0

私は 'iniciar();'をHTMLファイルで呼び出しました。あなたの提案をありがとう。 – Santiago

0

あなたのイベントハンドラ 'agregarLetra'は 'l'(変数が何のためのものなのか説明していないので、btwの悪い変数名)を知らない。 ので、代わりの:

var letra = l.value 

試してみてください。あなたの 'iniciar' 関数の書き込みでまた

l = document.getElementById('letra').value; 

l = document.getElementById('letra'); 

の代わりに:

var l = document.getElementById('letra'); 

「VAR l 'はnを保存する新しいローカル変数にのみ追加してください。
それはlを解決するはずです。 0からの誤差。 146は、 'mostrarPista'を呼び出すときに 'palabra'パラメータを渡すのを忘れたという事実によって引き起こされます。

function mostrarPista(palabra, espacio) { 

一つだけのパラメータ(リットル128。)と呼ばれる:あなたの関数は2つのパラメータで定義されて

mostrarPista(espacio); 
関連する問題