Member 13712171 Ответов: 2

Как мне изменить направление движения змеи


<!DOCTYPE html>
<html lang="en">
<head>
	<title>Game</title>
	<meta charset="utf-8">
	<style type="text/css">
		#canvas {background:gray;}
	</style>
</head>
<body>
	<canvas id="canvas" width="500px" height="500px">	
	</canvas>
<script type="text/javascript">
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

var multiples = [25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500];



var rightPressed = false;
var leftPressed = false;
var upPressed = false;
var downPressed = false;

var foods = {
	x: Math.floor(Math.random() * multiples[0]) *25,
	y: Math.floor(Math.random() * multiples[0]) *25,
	width: 25,
	height: 25
};

var snake = {
	x: 25,
	y: 25,
	width: 25,
	height: 25
};

function drawRect() {
	ctx.clearRect(0, 0, canvas.width, canvas.height);
	ctx.beginPath();
	ctx.rect(snake.x, snake.y, snake.width, snake.height)
	ctx.fillStyle = "#000000";
	ctx.fill();
	ctx.closePath();
}

function controls() {
	if(rightPressed) {
		snake.x += 25;
	}else if(leftPressed) {
		snake.x -= 25;
	}else if(upPressed) {
		snake.y -= 25;
	}else if(downPressed) {
		snake.y += 25;
	}
}

function collision() {
	if(snake.x >= canvas.width) {
		snake.x = canvas.width - canvas.width;
	}else if(snake.x < canvas.width - canvas.width) {
		snake.x = canvas.width;
	}else if(snake.y >= canvas.height) {
		snake.y = canvas.height - canvas.height;
	}else if(snake.y < canvas.height - canvas.height) {
		snake.y = canvas.height;
	}
}

document.addEventListener("keydown", keyDownHandler, false);
//document.addEventListener("keyup", keyUpHandler, false);

function keyDownHandler(e) {
    if(e.keyCode == 39) {
        rightPressed = true;
		leftPressed = false;
		upPressed =  false;
		downPressed = false;
    }
    else if(e.keyCode == 37) {
        leftPressed = true;
		rightPressed = false;
		upPressed = false;
		downPressed = false;
    }
	if(e.keyCode == 38) {
        upPressed = true;
		leftPressed = false;
		rightPressed = false;
		downPressed = false;
    }
    else if(e.keyCode == 40) {
        downPressed = true;
		rightPressed = false;
		leftPressed = false;
		upPressed = false;
    }
}

/*
function keyUpHandler(e) {
    if(e.keyCode == 39) {
        rightPressed = false;
    }
    else if(e.keyCode == 37) {
        leftPressed = false;
    }
	if(e.keyCode == 38) {
        upPressed = false;
    }
    else if(e.keyCode == 40) {
        downPressed = false;
    }
}
*/

function food() {
	ctx.beginPath();
	ctx.rect(foods.x, foods.y, foods.width, foods.height);
	ctx.fillStyle = "#8B0000";
	ctx.fill();
	eatFood();
	ctx.closePath();
}

function eatFood() {
	if(snake.x == foods.x && snake.y == foods.y) {
		foods.x = Math.floor(Math.random() * multiples[0]) *25;
		foods.y = Math.floor(Math.random() * multiples[0]) *25;
		snake.width += 25;
	}
}

function start() {
	drawRect();
	controls();
	collision();
	food();
}
//up pressed make length -height value

setInterval(start, 100);
</script>
</body>
</html>


Что я уже пробовал:

Я пытался изменить направление змеи, но не могу понять, какая помощь вообще была бы очень признательна.

ZurdoDev

Какая часть кода управляет направлением?

Member 13712171

ну а функция управления-это когда направление движения меняется в зависимости от того, какую клавишу вы нажимаете.

Karthik_Mahalingam

Совет: используйте  Ответить  кнопка, чтобы отправить комментарии/запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

2 Ответов

Рейтинг:
2

Patrice T

Чтобы получить полезные ответы, вы должны объяснить, что должно быть вашей игрой в змею, чтобы у нас было представление о том, чего вы хотите.
Вы хотите воссоздать Змеиный байт? Змеиный байт [сливы: 0] ATARI 800 (8-бит) - 540 - YouTube[^]

Цитата:
Я пытался изменить направление змеи но не могу понять этого

Это ничего не значит для нас, помните, что мы не в вашей голове, мы не АНБ, и у нас нет зелья чтения мыслей.

Объясните, что это за игра, ее требования.
Дайте подробную информацию о том, что не так и что вы пробовали.

[Обновление]
Цитата:
Да это игра похожая на SnakeByte просто пытаюсь сделать классическую змею но у меня есть проблема с тем чтобы изменить направление змеи

У вас есть проблема в вашем коде, она позволяет змее сделать разворот, который невозможен.
Обратите внимание, что SnakeByte использовал 2 клавиши, поверните налево и поверните направо.
Когда я запускаю ваш код, змеиная голова следует указаниям, которые я набираю, можете ли вы дать более подробную информацию о вашей проблеме.
Змея-это голова, тело и хвост, ваш код обрабатывает только голову.
SnakeByte использовал 2d-массив, чтобы запомнить положение всего. Это позволяло обрабатывать змеиное тело по любой траектории и любой длины.


Member 13712171

Да, это игра, похожая на SnakeByte, просто пытающуюся сделать классическую змею, но у меня есть проблема с изменением направления змеи, я не говорю, в каком направлении она движется, но направление хвоста змеи, если это имеет смысл. Если это не имеет смысла, то вы можете получить хорошую идею, скопировав код в редакторе и запустив его. Извините, если я немного неясен, я новичок в этом деле.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 13712171

вы человек, если вы пытаетесь помочь, то помогите мне, если вы не пытаетесь помочь, то не помогайте, я считаю, что сделал свой вопрос достаточно ясным, чтобы понять, и, как я уже сказал, Если вы не понимаете, то не стесняйтесь запускать мой код в браузере и контролировать змею над Красным ящиком, и вы увидите, что я имею в виду. Спасибо, что уделили мне время.

Patrice T

Простая вещь:
-Как помощник, я знаю, что все обращают внимание на вопрос и склонны игнорировать дискуссии вне самого вопроса.
- обновляя свой вопрос с вашим предыдущим сообщением, он делает его более понятным для всех, а "улучшить" заставит его перейти к началу списка вопросов и привлечет внимание к вашему вопросу.