2017-03-20 4 views
0

食いしん坊蛇のゲームのコードは、私は私のコードを実行した後

var zbImg = new Image(); 
 
zbImg.src = './image/zuobian.jpg'; 
 

 
var bgImg = new Image(); 
 
bgImg.src = './image/beijing.jpg'; 
 

 
var smImg = new Image(); 
 
smImg.src = './image/shangmian.png'; 
 

 
var stImg = new Image(); 
 
stImg.src = './image/shenti.png'; 
 

 
var xmImg = new Image(); 
 
xmImg.src = './image/xiamian.png'; 
 

 
var ybImg = new Image(); 
 
ybImg.src = './image/youbian.png'; 
 

 
function Snake() { 
 

 
    this.cav = document.getElementById("cav"); 
 
    this.canvas = this.cav.getContext('2d'); 
 
    this.step = 25; 
 
    this.width = 500; 
 
    this.height = 500; 
 

 
    this.stepW = this.width/this.step; 
 
    this.stepH = this.height/this.step; 
 

 
    this.snakeArr = []; //snake body 
 
    this.foodArr = []; //store food 
 

 

 

 

 

 

 
    //1, draw the game elements 
 
    this.draw = function() { 
 
    // paint background 
 
    this.canvas.drawImage(bgImg, 0, 0, this.width, this.height); 
 
    // paint snake 
 

 
    // draw it 
 
    this.drawFood = function() { 
 
     if (this.foodArr.length != 0) { 
 
     this.canvas.drawImage(stImg, this.foodArr[0].x * this.step, this.foodArr[0].y * this.step, this.step, this.step); 
 
     return; 
 
     } 
 
     var x = Math.floor(Math.random() * this.stepW); 
 
     var y = Math.floor(Math.random() * this.stepH); 
 

 

 
     for (var i = 0; i < this.snakeArr.length; i++) { 
 
     if (this.snakeArr[i].x == x && this.snakeArr[i].y == y) 
 

 
     { 
 
      this.drawFood(); 
 
      break; 
 
     } 
 
     } 
 

 

 
     // not cover 
 
     this.foodArr[0] = { 
 
     x: x, 
 
     y: y, 
 
     Image: stImg 
 
     } 
 
     this.canvas.drawImage(
 
     stImg, this.foodArr[0].x * this.step, this.foodArr[0].y * this.step, this.step, this.step); 
 

 
    } 
 

 

 

 

 

 
    this.drawSnake = function() { 
 

 
     // initial snake body 
 
     if (this.snakeArr.length == 0) { 
 

 
     for (var i = 0; i < 5; i++) { 
 
      this.snakeArr[i] = { 
 
      x: this.stepW/2 + i - 2, 
 
      y: this.stepH/2, 
 
      img: stImg, 
 
      d: 'l' 
 
      } 
 
     } 
 
     this.snakeArr[0].img = zbImg; //change to snake head pic 
 

 
     } 
 
     for (var i = 0; i < this.snakeArr.length; i++) { 
 
     this.canvas.drawImage(this.snakeArr[i].img, 
 
      this.snakeArr[i].x * this.step, 
 
      this.snakeArr[i].y * this.step, 
 
      this.step, 
 
      this.step); 
 
     } 
 

 
    } 
 
    this.drawFood(); 
 
    this.drawSnake(); 
 

 

 

 
    console.log(5); 
 

 
    } 
 
    //2, make snake move 
 
    this.move = function() { 
 

 
    document.onkeydown = function(event) { 
 
     var event = event || window.event; 
 
     var code = event.keyCode; 
 

 
     console.log(7); 
 
     console.log(code); 
 

 

 
     switch (code) { 
 
     case 37: 
 
      This.snakeArr[0].d = 'l'; 
 
      This.snakeArr[0].img = zbImg; 
 
      break; 
 
     case 38: 
 
      This.snakeArr[0].d = 't'; 
 
      This.snakeArr[0].img = smImg; 
 
      break; 
 
     case 39: 
 
      This.snakeArr[0].d = 'r'; 
 
      This.snakeArr[0].img = ybImg; 
 
      break; 
 
     case 40: 
 
      This.snakeArr[0].d = 'b'; 
 
      This.snakeArr[0].img = xmImg; 
 
      break; 
 
     } 
 
     console.log(This.snakeArr[0]); 
 
    } 
 
    } 
 
    //3, make snake to die 
 
    this.hit = function() { 
 

 
    } 
 

 
}
<!DOCTYPE html> 
 
<html1> 
 

 
    <head> 
 
    <meta charset="UTF-8"> 
 
    <title>tangchishe</title> 
 
    <style> 
 
     #cav { 
 
     background: red; 
 
     } 
 
    </style> 
 
    <script src='./index.js'></script> 
 
    <script type="text/javascript"> 
 
     window.onload = function() { 
 

 
     var snake = new Snake(); 
 
     snake.draw(); 
 
     snake.move(); 
 
     } 
 
    </script> 
 
    </head> 
 

 
    <body> 
 
    <canvas id="cav" width="500" height="500"></canvas> 
 
    </body> 
 
</html1>

この写真は、私が得たコンテンツである移動機能を入力することはできません私はブラウザで実行すると、ヘビと食べ物が表示されますが、コードは移動機能メソッドを入力することはできません。私は移動方法の前にconsole.logプリント5を使用し、console.logプリント7を移動機能メソッドで使用します。最終的にGoogle Chromeのブラウザのコンソールが5と表示されます7 私を助けることができますか? ありがとうございました

+0

あなたはコンソールエラーがありますか?スネーククラスはどこに定義されていますか? 'snake.drew();'行にブレークポイントを置き、 'snake'変数が期待どおりであることを確認することをお勧めします。そうであれば、私はあなたの '.move'関数を呼び出して、良いエラーメッセージを出したり、何がうまくいかないかを見るまで、コードを一行ずつ進めてみることにします。 – mwilson

+0

私はコンソールエラーを見つけられませんが、私のコンパイラは崇高な試用版です。ブレークポイントはありません。javascript用のコンパイラがありがとうございます。ありがとうございます。 – chnaqi

+0

ブラウザの開発ツール(通常はF12が起動します)を使用してください。そこにブレークポイントを設定することができます。私はまた、IDEの – mwilson

答えて

0

一見ここではいくつかのことが起こっています。最初に、javascriptを別のファイルに移動して、ページにロードする必要があります。しかし、あなたがしなくても、javascriptがドキュメントの最後に貼り付けられ、タグにないように見えます。 "また、ページが "html1"タグで囲まれている理由は何ですか?これはちょうど "html"にする必要があります

+0

のVisual Studio CodeやWebStormをお勧めします。私のHTMLとjavascriptはすでに別のファイルに分かれていますが、tangchishe.htmlには最初のセグメントコードが含まれ、index.jsには2番目のセグメントコードが含まれています。私はhtml1をhtmlに変更しました。それはまだ印刷されていません7 – chnaqi

+0

おかげで、明確化のためにありがとう。ウィンドウが読み込まれたときにdraw()関数を呼び出すように見えます。これは、おそらくsetIntervalを使ってキャンバスを更新するために定期的に呼び出す必要がありますか?発砲していない限り、document.onkeydownからwindow.onkeydownに変更してみてください。私が理解しているところからは、焦点の問題です。 – Sam

関連する問題