Показать сообщение отдельно
  #1 (permalink)  
Старый 23.04.2013, 16:15
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Змейка: совпадение координат
Делаю игру "змейка" на канвасе. Имеется такой код
function randomNumber(max) {
	return Math.floor(Math.random() * max) ;
} // генерит случайное число от 0 до (но не включая) max
function Position(x, y, side) {
	this.x = x ;
	this.y = y ;
	if(side !== undefined)
		this.movementToSide = side ;
} // конструктор позиций, x и y - координаты, movementToSide - сторона, в которую двигаемся
function Food() {
	this.position = new Position(randomNumber(canvas.width), randomNumber(canvas.height)) ;
} // конструктор еды, которую ест змейка; position - позиция, где эта еда находится, она может появиться в любом месте на поле
function Snake() {
	this.positionsOfTurns = [] ;
	this.head = new Position(canvas.center.x + canvas.cellSize, canvas.center.y, "right") ;
	this.tail = new Position(canvas.center.x - canvas.cellSize, canvas.center.y, "right") ;
}
/* positionOfTurns - массив позиций, где и в какую сторону поворачивает змейка
пример этого массива:
[{
	x: 250,
	y: 250,
	movementToSide: "top"
},
{
	x: 250,
	y: 200,
	movementToSide: "left"
}], т.е. первый поворот змейка делает вверх в позиции x:250, y:250; далее передвигается на 50пикселей вверх и следующий поворот она делает влево в позиции x:250, y:200
head - позиция головы змейки
tail - позиция хвоста змейки
*/
// прочий код

Так вот, когда создается позиция для еды, нужно проверить, не попала ли она на змейку (нельзя же, чтоб еда появилась на змейке). Следовательно, вопрос: как максимально эффективно (т.е. наиболее быстро) и можно ли вообще проверить, совпала позиция еды с какой-либо координатой, где ползет сейчас змейка, не имея при этом массива всех этих координат змейки (у меня же только хранятся позиции головы, хвоста и поворотов змейки). Я не вижу никакого варианта, кроме как с использованием массива всех координат
__________________
★ ²º¹³ ☆
Ответить с цитированием