正在进行的游戏不起作用

Game in progress doesn't work

我试图在线设计一个 pacman 版本,但是我为对象检测编写的代码不起作用。大多数情况下,它会在没有墙并遇到空白时停止 space。我相信我写的代码是正确的,但他们可能是错误的,因为我刚开始学习 javascript。

    <canvas id="gc" width="400", height="400"></canvas>

    <script>
    window.onload = function() {
        canv=document.getElementById("gc");
     ctx=canv.getContext("2d");
        document.addEventListener("keydown",keyPush);
     setInterval(game,1000/2);
    }

    var px=4
 var py=5;
    var xv=0
 var yv=0;
 var cx=5;
 var cy=17;
 //1 = wall, 0 = biscuit, 2 = nothing
    var map=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
      [1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1],
      [1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1],
      [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
      [1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1],
      [1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1],
      [1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1],
      [1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1],
      [1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1],
      [1,0,1,1,1,0,0,0,1,2,2,1,0,0,0,1,1,1,0,1],
      [1,0,0,0,0,0,1,0,1,2,2,1,0,1,0,0,0,0,0,1],
      [1,0,1,1,0,1,1,0,1,2,2,1,0,1,1,0,1,1,0,1],
      [1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1],
      [1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1],
      [1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,1],
      [1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,1],
      [1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1],
      [1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1],
      [1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1],
      [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]];
    point=0;
    gs=tc=20;

    function game() {
  // got to check if can move
  
  var x = px + xv;
  var y = py + yv;

  if (map[x][y] != 1) {
   px = x;
   py = y;
  }

        ctx.fillStyle="black";
     ctx.fillRect(0,0,canv.width,canv.height);

  for (var i=0; i<map.length;i++) {
   for (var s=0; s<map[i].length;s++) {
    if (map[i][s] == 1) {
     ctx.fillStyle="blue";
        ctx.fillRect(s*gs,i*gs,gs,gs);
    }
    if (map[i][s] == 0) {
     ctx.fillStyle="white";
        ctx.fillRect(s*gs+5,i*gs+5,gs-10,gs-10);
    }
   }
  }

  ctx.fillStyle="red";
     ctx.fillRect(cx*gs+5,cy*gs+5,gs-10,gs-10);  

        ctx.fillStyle="yellow";
     ctx.fillRect(px*gs+2.5,py*gs+2.5,gs-5,gs-5);

    }

    function keyPush(evt) {
        switch(evt.keyCode) {
  case 37:
   xv=-1;yv=0;
   break;
  case 38:
   xv=0;yv=-1;
   break;
  case 39:
   xv=1;yv=0;
   break;
  case 40:
   xv=0;yv=1;
   break;
 }
    }
</script>

请帮助我。

你的脚本没问题,你刚刚在碰撞检查中混淆了 yx
固定代码 if (map[y][x] != 1):

window.onload = function() {
    canv=document.getElementById("gc");
    ctx=canv.getContext("2d");
    document.addEventListener("keydown",keyPush);
    setInterval(game,1000/2);
}

var px=4
var py=5;
var xv=0
var yv=0;
var cx=5;
var cy=17;
//1 = wall, 0 = biscuit, 2 = nothing
var map=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1],
        [1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1],
        [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1],
        [1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1],
        [1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1],
        [1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1],
        [1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1],
        [1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1],
        [1,0,1,1,1,0,0,0,1,2,2,1,0,0,0,1,1,1,0,1],
        [1,0,0,0,0,0,1,0,1,2,2,1,0,1,0,0,0,0,0,1],
        [1,0,1,1,0,1,1,0,1,2,2,1,0,1,1,0,1,1,0,1],
        [1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1],
        [1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,0,1,1,1,1],
        [1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0,0,0,0,1],
        [1,0,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,1],
        [1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1],
        [1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,0,1],
        [1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]];
point=0;
gs=tc=20;

function game() {
    // got to check if can move

    var x = px + xv;
    var y = py + yv;

    if (map[y][x] != 1) {
        px = x;
        py = y;
    }

    ctx.fillStyle="black";
    ctx.fillRect(0,0,canv.width,canv.height);

    for (var i=0; i<map.length;i++) {
        for (var s=0; s<map[i].length;s++) {
            if (map[i][s] == 1) {
                ctx.fillStyle="blue";
                ctx.fillRect(s*gs,i*gs,gs,gs);
            }
            if (map[i][s] == 0) {
                ctx.fillStyle="white";
                ctx.fillRect(s*gs+5,i*gs+5,gs-10,gs-10);
            }
        }
    }

    ctx.fillStyle="red";
    ctx.fillRect(cx*gs+5,cy*gs+5,gs-10,gs-10);      

    ctx.fillStyle="yellow";
    ctx.fillRect(px*gs+2.5,py*gs+2.5,gs-5,gs-5);

}

function keyPush(evt) {
    switch(evt.keyCode) {
    case 37:
        xv=-1;yv=0;
        break;
    case 38:
        xv=0;yv=-1;
        break;
    case 39:
        xv=1;yv=0;
        break;
    case 40:
        xv=0;yv=1;
        break;
}
}
<canvas id="gc" width="400" height="400"></canvas>