Странный багги рост для змеи JavaScriptHtml

Программисты Html
Ответить
Anonymous
 Странный багги рост для змеи JavaScript

Сообщение Anonymous »

Я смотрел учебное видео для змеи JavaScript, однако, по какой -то причине, это не работало, так что я должен был спрашивать Chatgpt (к сожалению), как исправить горизонтальную ошибку роста, и после миллионов исправлений сейчас только вертикаль. Есть помощь с этим? Я тоже не могу понять, что я делаю неправильно.

const CANVAS = document.getElementById("game-canvas");

const CONTEXT = CANVAS.getContext("2d");

const SEGMENT_WIDTH = 32.0;
const SEGMENT_HEIGHT = 32.0;

const COLUMNS = CANVAS.width / SEGMENT_WIDTH;
const ROWS = CANVAS.height / SEGMENT_HEIGHT;

class Segment {
constructor(x, y, direction ) {

this.x = x;
this.y = y;

this._direction = direction;
this.OLD_direction = this.direction

this.next = null;

}

get direction() {

return this._direction;

}

set direction(direction) {

this.OLD_direction = this._direction;

this._direction = direction;
}

setDirection(direction) {
this.direction = direction;
}

move() {

this.OLD_direction = this.direction;

if (this._direction === 0) this.y--;
else if (this._direction === 1) this.y++;
else if (this._direction === 2) this.x--;
else if (this._direction === 3) this.x++;

if (this.x < 0) this.x = COLUMNS - 1;
else if (this.x >= COLUMNS) this.x = 0;
if (this.y < 0) this.y = ROWS - 1;
else if (this.y >= ROWS) this.y = 0;

if (this.next !== null) {
this.next.direction = this.OLD_direction;
this.next.move();
}
}

}

const ROOT = new Segment(COLUMNS / 2, ROWS / 2, 0);

window.addEventListener("keydown", event => {

if (event.code === "KeyW") {

if (ROOT.direction !== 1) ROOT.direction = 0;

} else if (event.code === "KeyS") {

if (ROOT.direction !== 0) ROOT.direction = 1;

} else if (event.code === "KeyA") {

if (ROOT.direction !== 3) ROOT.direction = 2;

} else if (event.code === "KeyD") {

if (ROOT.direction !== 2) ROOT.direction = 3;

}

});

function addSegment() {
let lastSegment = ROOT;
while (lastSegment.next !== null) {
lastSegment = lastSegment.next;
}

let dir = lastSegment.OLD_direction;

let newX = lastSegment.x;
let newY = lastSegment.y;

if (dir === 0) newY += 1;
else if (dir === 1) newY -= 1;
else if (dir === 2) newX += 1;
else if (dir === 3) newX -= 1;

if (newX < 0) newX = COLUMNS - 1;
else if (newX >= COLUMNS) newX = 0;
if (newY < 0) newY = ROWS - 1;
else if (newY >= ROWS) newY = 0;

lastSegment.next = new Segment(newX, newY, dir);
}

let foodX = 0;
let foodY = 0;

function randFoodPosition() {

foodX = Math.floor(Math.random() * COLUMNS);
foodY = Math.floor(Math.random() * ROWS);

}

randFoodPosition();

let elapsedFrames = 0;

function update() {

if (elapsedFrames > 10) {

ROOT.move();

if (ROOT.x === foodX && ROOT.y === foodY) {

addSegment()

randFoodPosition()
}

elapsedFrames = 0

} else elapsedFrames++;
}

function render() {

console.log("Rendering...?");

CONTEXT.fillStyle = "#60c198";

CONTEXT.fillRect(0.0, 0.0, CANVAS.width, CANVAS.height);

let currentSegment = ROOT;

while (currentSegment !== null) {

CONTEXT.fillStyle = "black";

CONTEXT.fillRect(currentSegment.x * SEGMENT_WIDTH, currentSegment.y * SEGMENT_HEIGHT, SEGMENT_WIDTH, SEGMENT_HEIGHT);

currentSegment = currentSegment.next
}

CONTEXT.fillStyle = "#183026";

CONTEXT.fillRect(foodX * SEGMENT_WIDTH, foodY * SEGMENT_HEIGHT, SEGMENT_WIDTH, SEGMENT_HEIGHT);
}

function tick() {

update();

render();

window.requestAnimationFrame(tick);

}

tick();

< /code>
html: < /p>








#game-canvas {

position: absolute;

left: 50%;
top: 50%;

transform: translate(-50%, -50%);
}



SNAKE












Подробнее здесь: https://stackoverflow.com/questions/796 ... ript-snake
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»