Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 - позиция хвоста змейки
*/
// прочий код

Так вот, когда создается позиция для еды, нужно проверить, не попала ли она на змейку (нельзя же, чтоб еда появилась на змейке). Следовательно, вопрос: как максимально эффективно (т.е. наиболее быстро) и можно ли вообще проверить, совпала позиция еды с какой-либо координатой, где ползет сейчас змейка, не имея при этом массива всех этих координат змейки (у меня же только хранятся позиции головы, хвоста и поворотов змейки). Я не вижу никакого варианта, кроме как с использованием массива всех координат
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #2 (permalink)  
Старый 23.04.2013, 16:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

Ну не всех координат, можно взять imageData конкретного участка. Также возможно поможет isPointInPath().
__________________
29375, 35

Последний раз редактировалось Aetae, 23.04.2013 в 16:49.
Ответить с цитированием
  #3 (permalink)  
Старый 23.04.2013, 17:44
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Hekumok,
хвост следует за головой по пути пройденному головой => по идее, должен быть массив поворотов которые должен сделать хвост на данный момент, он есть (если есть можно его скинуть)?
Ответить с цитированием
  #4 (permalink)  
Старый 23.04.2013, 18:41
Любитель
Отправить личное сообщение для JsLoveR Посмотреть профиль Найти все сообщения от JsLoveR
 
Регистрация: 16.12.2009
Сообщений: 422

Может быть стоит проверять если координаты еды попадают в прямоугольник, где залито цветом змейки, а не цветом фона и возвращать true. Как Aetae предложил.

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

Aetae, JsLoveR, спасибо, но получается, что мне нужно в цикле пробегать по всем координатам змейки и смотреть, совпадают ли они с позицией еды или нет, но я этого не хочу, почему и не использую массив всех координат змейки. А вообще у меня тут идейка появилась, завтра попробую.
Dim@, ээмм... Ну так snake.positionsOfTurns - это и есть массив поворотов змейки, т.е. поворотов, которые должен пройти хвост
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #6 (permalink)  
Старый 23.04.2013, 22:07
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Hekumok,
просто по логике змейка состоит из линий можно по поворотам узнать линии и соответственно координаты змеи полностью, но как я понял для тебя это не катит

Можно попробовать такую вещь - нужна длина змеи и придётся создавать массив точек недоступных для помещения в них еды. Точка недоступна если кол-во шагов пройденных головой из этой точки меньше длины змейки
Ответить с цитированием
  #7 (permalink)  
Старый 23.04.2013, 22:26
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Dim@
массив поворотов


Сообщение от Hekumok
Я не вижу никакого варианта, кроме как с использованием массива всех координат
делай с массивом и не страдай ерундой )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 23.04.2013, 22:29
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

nerv_,
Сообщение от nerv_
Сообщение от Dim@
массив поворотов
да я знаю
Ответить с цитированием
  #9 (permalink)  
Старый 23.04.2013, 22:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

Я говорю о том, что раз змейка отрисовывается на canvas надо использовать методы canvas и тупо смотреть закрашена ли область.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 23.04.2013, 22:51
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Aetae,
это логично, а если там змейка не в виде простых линий?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема координат Karandasheg jQuery 1 11.12.2012 18:53
Как проверить два обьекта на совпадение? abc_ua jQuery 2 16.03.2011 08:40
Реализация алгоритма (массив координат) ed_17 Общие вопросы Javascript 1 02.03.2011 19:25
Определение координат мыши! sat-lin Events/DOM/Window 2 18.12.2009 11:12
Определение координат body. Kolyaj Events/DOM/Window 10 04.04.2009 16:20