蛇のゲームを作成しようとしています。私の問題は、ヘビが食べ物と出会ったとき、マッチがないときです。 x
はfood_position_x
と同じである必要があり、y
はfood_position_y
である必要があります。eat()
のコードを確認してください。2つの位置を比較しようとすると一致しません
(function() {
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
x = 0,
y = 0,
speed = 1;
x_move = speed,
y_move = 0,
food_position_x = Math.floor(Math.random() * canvas.width);
food_position_y = Math.floor(Math.random() * canvas.height);
function eat() {
if (x == food_position_x && y == food_position_y) {
alert('Match!');
}
}
// Drawing
function draw() {
eat();
requestAnimationFrame(function() {
draw();
});
// Draw the snake
ctx.beginPath();
ctx.rect(Math.floor(x/10)*10, Math.floor(y/10)*10, 10, 10);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#ffffff';
ctx.fill();
ctx.closePath();
// Draw the food
ctx.beginPath();
ctx.rect(Math.floor(food_position_x/10)*10, Math.floor(food_position_y/10)*10, 10, 10);
ctx.fillStyle = "blue";
ctx.fill();
ctx.closePath();
// Increase the value of x and y in order to animate
x = x + x_move;
y = y + y_move;
}
draw();
// Key Pressing
document.addEventListener('keydown', function(event) {
switch(event.keyCode) {
case 40: // Moving down
if (x_move != 0 && y_move != -1) {
x_move = 0;
y_move = speed;
}
break;
case 39: // Moving right
if (x_move != -1 && y_move != 0) {
x_move = speed;
y_move = 0;
}
break;
case 38: // Moving top
if (x_move != 0 && y_move != 1) {
x_move = 0;
y_move = -speed;
}
break;
case 37: // Moving left
if (x_move != 1 && y_move != 0) {
x_move = -speed;
y_move = 0;
}
break;
}
});
})();
canvas { background-color: red; }
<canvas width="500" height="300" id="canvas">
私が間違って何をしているのですか?
それはfood_position_x' 'のように見えると' food_position_y'は任意の整数を指定できますキャンバス上の座標が、あなたのヘビの位置は、あなたが同じの上に食べ物を描いている10によって常に割り切れます10ピクセルグリッドをヘビとして使用していますが、実際の位置は2つのセルの間です。最初のステップとして、あなたがそれを設定するときに、食品の位置を10で割り切れるように強制します。 –
同じことがあなたのスネークの位置になります。あなたは10ピクセルのグリッド上に描画しますが、実際の位置は任意の整数にすることができます。実際にヘビが(82,129)にあり、食品が(85,124)にあるとき(80,120)に描かれた食べ物の上にいるように見えます。 –