2016-03-22 4 views
3

Я работаю над игрой в Yoyo Game Maker, где у меня есть предметы, перемещающиеся вдоль конвейерных лент. Поскольку элементы перемещаются только в одном направлении, я подумал, что имеет смысл использовать структуру данных в очереди или очереди, чтобы хранить элементы. Однако, чтобы иметь возможность отображать элементы, мне нужно иметь возможность читать их все в любой точке очереди, а не только голову или хвост.Queue-подобная структура данных, которая читается в любом месте

 [[a] [b] [c] [d]] 
      | 
      V 

a <- [[ ] [b] [c] [d]] <- e 
      | 
      V 

    [[b] [c] [d] [e]] 
     | | | | 
     V V V V 

     b c d e 

я мог бы просто использовать массив, который вручную перемещает все свои значения вперед на один слот каждый ход (используя для цикла), но как-то, что кажется неэффективным, лага, или по крайней мере, плохой форме. Во всяком случае, мои программные инстинкты отталкиваются от мысли использовать такую ​​систему.

Это правильное предположение? Является ли массив действительно лучшим способом реализации такой структуры? Должен ли я даже беспокоиться об эффективности, или различия в этом случае незначительны?

Некоторые советы или примеры (на любом языке программирования) были бы весьма признательны.

+5

https://en.wikipedia.org/wiki/Circular_buffer – jbapple

+0

@jbapple Это будет работать отлично, спасибо. – a52

ответ

-2

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

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

Picking: Я думаю, чтобы подобрать один из предметов, вам необходимо определить столкновение внутри каждого объекта. После столкновения вы можете определить следующие шаги.

+5

Я ищу структуру данных, а не объектную реализацию столкновений. Объекты, которые я использую, не имеют и не будут иметь физических свойств. – a52

+0

Я не понимаю, как работает ваш процесс обработки, но если вы хотите выбрать объект из конвейерной ленты, этот подход будет работать. – denis