2017-01-01 6 views
0

私は今始めたばかりの私のすべてのゲームを保存するウェブページを作ろうとしています。私はポンゲームをロードするためのボタンを作ろうとしていましたが、ピンポンのコードHTMLとJavascriptのボタンが機能しない

<!DOCTYPE html> 
<html lang = "en"> 
    <head> 
     <title>Title</title> 
     <meta charset="UTF-8"> 
     <style> 
      canvas { 
       position: absolute; 
       margin: auto; 
       top: 0; 
       bottom: 0; 
       left: 0; 
       right: 0; 
      } 
     </style> 
    </head> 
    <body> 
    <center> 
     <h1>Games</h1> 

ボタンコード

 <input id="Pong" type="button" value="Pong" onclick="go();" /> 

ピンポン​​コード

 <script> 
      function go(){ 
      var WIDTH = 700, HEIGHT = 600, pi = Math.PI; 
      var UpArrow = 38, DownArrow = 40; 
      var canvas, ctx, keystate; 
      var player, ai, ball, score; 

      player = { 
       x: null, 
       y: null, 
       width: 20, 
       height: 100, 

       update: function(){ 
        if(keystate[UpArrow]) this.y -= 7; 
        if(keystate[DownArrow]) this.y += 7; 
       }, 
       draw: function(){ 
        ctx.fillRect(this.x, this.y, this.width, this.height); 
       } 
      }; 
      ai = { 
       x: null, 
       y: null, 
       width: 20, 
       height: 100, 

       update: function(){ 
        var desty = ball.y - (this.height - ball.side)*0.5; 
        this.y += (desty - this.y) * 0.1; 
       }, 
       draw: function(){ 
        ctx.fillRect(this.x, this.y, this.width, this.height); 
       } 
      }; 
      ball = { 
       x: null, 
       y: null, 
       vel: null, 
       side: 20, 
       speed: 9, 

       serve: function(side){ 
        var r = Math.random(); 
        this.x = side===1 ? player.x : ai.x - this.side; 
        this.y = (HEIGHT - this.side)*r; 
        score.count += 1; 

        var phi = 0.1*pi*(1 - 2*r); 
        this.vel = { 
         x: side*this.speed*Math.cos(phi), 
         y: this.speed*Math.sin(phi) 
        }; 
       score = { 
        x: null, 
        y: null, 
        count: 0, 
        width: 10, 
        height: 10, 


        update: function(){ 
         Console.log(this.count); 
        }, 
        draw: function(){ 
         ctx.fillRect(this.x, this.y, this.width, this.height); 
       } 
      }; 
       }, 
       update: function(){ 
        this.x += this.vel.x; 
        this.y += this.vel.y; 

        if(0 > this.y || this.y+this.side > HEIGHT){ 
         var offset = this.vel.y < 0 ? 0 - this.y : HEIGHT - (this.y+this.side); 
         this.y += 2*offset; 
         this.vel.y *= -1; 
        } 

        var AABBIntersect = function(ax, ay, aw, ah, bx, by, bw, bh){ 
         return ax < bx+bw && ay < by+bh && bx < ax+aw && by < ay+ah; 
        }; 

        var pdle = this.vel.x < 0 ? player : ai; 
        if(AABBIntersect(pdle.x, pdle.y, pdle.width, pdle.height, this.x, this.y, this.side, this.side)){ 
         this.x = pdle===player ? player.x+player.width : ai.x - this.side; 
         var n = (this.y + this.side - pdle.y)/(pdle.height+this.side); 
         var phi = 0.25*pi*(2*n - 1); 

         var smash = Math.abs(phi) > 0.2*pi ? 1.5 : 1; 
         this.vel.x = smash*(pdle === player ? 1 : -1)*this.speed*Math.cos(phi); 
         this.vel.y = smash*this.speed*Math.sin(phi); 
        } 

        if(0 > this.x+this.side || this.x > WIDTH){ 
         this.serve(pdle === player ? 1 : -1); 
        } 
       }, 
       draw: function(){ 
        ctx.fillRect(this.x, this.y, this.side, this.side); 
       } 
      }; 

      function main(){ 
       canvas = document.createElement("canvas"); 
       canvas.width = WIDTH; 
       canvas.height = HEIGHT; 
       ctx = canvas.getContext("2d"); 
       document.body.appendChild(canvas); 

       keystate = {}; 
       document.addEventListener("keydown", function(evt) { 
        keystate[evt.keyCode] = true; 
       }); 
       document.addEventListener("keyup", function(evt) { 
        delete keystate[evt.keyCode]; 
       }); 

       init(); 

       var loop = function(){ 
        update(); 
        draw(); 
        window.requestAnimationFrame(loop, canvas); 
       }; 
       window.requestAnimationFrame(loop, canvas); 
      } 

      function init(){ 
       player.x = player.width; 
       player.y = (HEIGHT - player.height)/2; 

       ai.x = WIDTH - (player.width + ai.width); 
       ai.y = (HEIGHT - ai.height)/2; 

       ball.serve(1); 
      } 

      function update(){ 
       ball.update(); 
       player.update(); 
       ai.update(); 
      } 

      function draw(){ 

       ctx.fillRect(0, 0, WIDTH, HEIGHT); 

       ctx.save(); 
       ctx.fillStyle = "#fff"; 

       ball.draw(); 
       player.draw(); 
       ai.draw(); 

       var w = 4; 
       var x = (WIDTH - w) * 0.5; 
       var y = 0; 
       var step = HEIGHT/15; 
       while (y < HEIGHT){ 
        ctx.fillRect(x, y + step * 0.25, w, step * 0.5); 
        y += step; 
       } 

       ctx.restore(); 
      } 

      main(); 
     } 
     </script> 

端コード

 </center> 
    </body> 
</html> 
+0

をお楽しみください。外部に定義する必要があります。また、 'Console.log'ではなく' console.log'です。次に、存在しない 'ball.update'を呼び出します。 [ブラウザコンソール](http://webmasters.stackexchange.com/q/8525)を使用してエラーを読んでください。 [JSHint](http://jshint.com/)を使用して、すぐにコードの問題を見つけてください。 – Xufox

答えて

0

私は@ Xufoxのソリューションを取って書きました。また、JS、CSS、およびHTMLに耳を傾けました。あなたはそれの存在しないプロパティを使用した後に、 `score` _inside_` ball.serve`を定義

function go(){ 
 
    score = { 
 
        x: null, 
 
        y: null, 
 
        count: 0, 
 
        width: 10, 
 
        height: 10, 
 

 

 
        update: function(){ 
 
         console.log(this.count); 
 
        }, 
 
        draw: function(){ 
 
         ctx.fillRect(this.x, this.y, this.width, this.height); 
 
       } 
 
      }; 
 
      var WIDTH = 700, HEIGHT = 600, pi = Math.PI; 
 
      var UpArrow = 38, DownArrow = 40; 
 
      var canvas, ctx, keystate; 
 
      var player, ai, ball, score; 
 

 
      player = { 
 
       x: null, 
 
       y: null, 
 
       width: 20, 
 
       height: 100, 
 

 
       update: function(){ 
 
        if(keystate[UpArrow]) this.y -= 7; 
 
        if(keystate[DownArrow]) this.y += 7; 
 
       }, 
 
       draw: function(){ 
 
        ctx.fillRect(this.x, this.y, this.width, this.height); 
 
       } 
 
      }; 
 
      ai = { 
 
       x: null, 
 
       y: null, 
 
       width: 20, 
 
       height: 100, 
 

 
       update: function(){ 
 
        var desty = ball.y - (this.height - ball.side)*0.5; 
 
        this.y += (desty - this.y) * 0.1; 
 
       }, 
 
       draw: function(){ 
 
        ctx.fillRect(this.x, this.y, this.width, this.height); 
 
       } 
 
      }; 
 
      ball = { 
 
       x: null, 
 
       y: null, 
 
       vel: null, 
 
       side: 20, 
 
       speed: 9, 
 

 
       serve: function(side){ 
 
        var r = Math.random(); 
 
        this.x = side===1 ? player.x : ai.x - this.side; 
 
        this.y = (HEIGHT - this.side)*r; 
 
        score.count += 1; 
 

 
        var phi = 0.1*pi*(1 - 2*r); 
 
        this.vel = { 
 
         x: side*this.speed*Math.cos(phi), 
 
         y: this.speed*Math.sin(phi) 
 
        }; 
 
     
 
       }, 
 
       update: function(){ 
 
        this.x += this.vel.x; 
 
        this.y += this.vel.y; 
 

 
        if(0 > this.y || this.y+this.side > HEIGHT){ 
 
         var offset = this.vel.y < 0 ? 0 - this.y : HEIGHT - (this.y+this.side); 
 
         this.y += 2*offset; 
 
         this.vel.y *= -1; 
 
        } 
 

 
        var AABBIntersect = function(ax, ay, aw, ah, bx, by, bw, bh){ 
 
         return ax < bx+bw && ay < by+bh && bx < ax+aw && by < ay+ah; 
 
        }; 
 

 
        var pdle = this.vel.x < 0 ? player : ai; 
 
        if(AABBIntersect(pdle.x, pdle.y, pdle.width, pdle.height, this.x, this.y, this.side, this.side)){ 
 
         this.x = pdle===player ? player.x+player.width : ai.x - this.side; 
 
         var n = (this.y + this.side - pdle.y)/(pdle.height+this.side); 
 
         var phi = 0.25*pi*(2*n - 1); 
 

 
         var smash = Math.abs(phi) > 0.2*pi ? 1.5 : 1; 
 
         this.vel.x = smash*(pdle === player ? 1 : -1)*this.speed*Math.cos(phi); 
 
         this.vel.y = smash*this.speed*Math.sin(phi); 
 
        } 
 

 
        if(0 > this.x+this.side || this.x > WIDTH){ 
 
         this.serve(pdle === player ? 1 : -1); 
 
        } 
 
       }, 
 
       draw: function(){ 
 
        ctx.fillRect(this.x, this.y, this.side, this.side); 
 
       } 
 
      }; 
 

 
      function main(){ 
 
       canvas = document.createElement("canvas"); 
 
       canvas.width = WIDTH; 
 
       canvas.height = HEIGHT; 
 
       ctx = canvas.getContext("2d"); 
 
       document.body.appendChild(canvas); 
 

 
       keystate = {}; 
 
       document.addEventListener("keydown", function(evt) { 
 
        keystate[evt.keyCode] = true; 
 
       }); 
 
       document.addEventListener("keyup", function(evt) { 
 
        delete keystate[evt.keyCode]; 
 
       }); 
 

 
       init(); 
 

 
       var loop = function(){ 
 
        update(); 
 
        draw(); 
 
        window.requestAnimationFrame(loop, canvas); 
 
       }; 
 
       window.requestAnimationFrame(loop, canvas); 
 
      } 
 

 
      function init(){ 
 
       player.x = player.width; 
 
       player.y = (HEIGHT - player.height)/2; 
 

 
       ai.x = WIDTH - (player.width + ai.width); 
 
       ai.y = (HEIGHT - ai.height)/2; 
 

 
       ball.serve(1); 
 
      } 
 

 
      function update(){ 
 
       ball.update(); 
 
       player.update(); 
 
       ai.update(); 
 
      } 
 

 
      function draw(){ 
 

 
       ctx.fillRect(0, 0, WIDTH, HEIGHT); 
 

 
       ctx.save(); 
 
       ctx.fillStyle = "#fff"; 
 

 
       ball.draw(); 
 
       player.draw(); 
 
       ai.draw(); 
 

 
       var w = 4; 
 
       var x = (WIDTH - w) * 0.5; 
 
       var y = 0; 
 
       var step = HEIGHT/15; 
 
       while (y < HEIGHT){ 
 
        ctx.fillRect(x, y + step * 0.25, w, step * 0.5); 
 
        y += step; 
 
       } 
 

 
       ctx.restore(); 
 
      } 
 

 
      main(); 
 
     }
canvas { 
 
       position: absolute; 
 
       margin: auto; 
 
       top: 0; 
 
       bottom: 0; 
 
       left: 0; 
 
       right: 0; 
 
      }
<!DOCTYPE html> 
 
<html lang = "en"> 
 
    <head> 
 
     <title>Title</title> 
 
     <meta charset="UTF-8"> 
 
    </head> 
 
    <body> 
 
    <center> 
 
     <h1>Games</h1> 
 

 
     <input id="Pong" type="button" value="Pong" onclick="go();" /> 
 

 

 

 

 
     </center> 
 
     <script type="text/javascript" src="javascript.js"></script> 
 
    </body> 
 
</html>

関連する問題