1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| function draw(){ ctx.drawImage(ground,0,0); // 绘制地面 // 绘制蛇 for( let i = 0; i < snake.length ; i++){ // 头是绿色,身体白色。 ctx.fillStyle = ( i == 0 )? "green" : "white"; // 绘制 ctx.fillRect(snake[i].x,snake[i].y,box,box); // 增加边框 ctx.strokeStyle = "red"; ctx.strokeRect(snake[i].x,snake[i].y,box,box); } // 绘制食物 ctx.drawImage(foodImg, food.x, food.y); // old head position - 当前头部位置 let snakeX = snake[0].x; let snakeY = snake[0].y; // which direction - 改变后头部位置 - 依据x y 轴 if( d == "LEFT") snakeX -= box; if( d == "UP") snakeY -= box; if( d == "RIGHT") snakeX += box; if( d == "DOWN") snakeY += box; // if the snake eats the food - 碰到食物 if(snakeX == food.x && snakeY == food.y){ score++; // 得分 ++ eat.play(); // 加载音频 food = { // 持续生成食物位置 x : Math.floor(Math.random()*17+1) * box, y : Math.floor(Math.random()*15+3) * box } // we don't remove the tail }else{ // remove the tail 移出尾部 - 移动。 snake.pop(); } // add new Head let newHead = { x : snakeX, y : snakeY } // game over // 超出边界 if(snakeX < box || snakeX > 17 * box || snakeY < 3*box || snakeY > 17*box || collision(newHead,snake)){ clearInterval(game); // 停止计时器 dead.play(); // 播放dead声音 // 这里可以设置重新开始的开关! } // 添加头部。 snake.unshift(newHead); // 写入得分 ctx.fillStyle = "white"; ctx.font = "45px Changa one"; ctx.fillText(score,2*box,1.6*box); }
|